导读 | 在最新发布的 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 地址。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/210876.html