Docker 1.12.0 改进了服务的负载均衡参数

2016-08-29 09:08:00
先知
转贴:
InfoQ
9641

在最新发布的 1.12.0 版本中,当在 集群中启动服务时,Docker 通过 DNS 和 IP 虚拟服务器(IPVS)为服务的负载均衡引入了新的参数。


新版 Docker 引入了内置的 DNS 服务器,当启动一个容器时,可以通过它使用 --net-alias 参数来为容器的 IP 地址映射别名。

这个特性 从 1.10 后就可使用。从  1.11 版本之后,Docker 也支持了基于循环 DNS 的负载均衡。


在基于 DNS 的负载均衡中,一个服务的名称(别名)会被映射到多个 IP 地址。在这样的情形下,服务其实是运行在容器的 IP 地址背后。

当进行 DNS 查询时,DNS 服务器将会响应多个 IP 地址,同时,它也会打乱返回的 IP 地址的顺序,这使得从不同客户端发送的请求将会命中不同的 IP。

但必须通过手动映射一个别名到多个容器的 IP 地址才能实现循环负载均衡。



在 1.12.0 版本中,Docker添加了内置的对于服务的负载均衡的支持,原理是使用了称为 IPVS 的 Linux 特性。

使用 Docker 的集群引擎,一个服务可以通过命令行和必须的数个复制品(容器)来声明。再也不用为服务手动地指定别名。

在内部,该服务的 DNS 名称被映射到了一个虚拟 IP(VIP),在这里这个特性与 IPVS 联系了起来。当进行 DNS 查找时,VIP 将被返回。


IPVS 是一个  Linux 内核特性,它可以使得第四层(传输层) TCP/UDP 流量 被转发到后端服务器。

它是基于网络过滤模块的,其形成了在 Linux 内核中的包过滤和网络地址转换实现的基础。


当一个服务请求到达了 VIP,它会被转发到一个托管服务的后端容器中。

通过这样的方式,流量会被均匀地分发到容器之中。

这种负载均衡服务的方式和  Consul 非常相似,它是服务发现软件。Consul 也提供一个 DNS 服务器,它可以在每次查询完成时 返回多个 IP 地址。

发表评论
陆 乘 陆 =
评论通过审核后显示。
文章分类
联系我们
联系人: 王春生
Email: chunsheng@cnezsoft.com