Docker SWARM容器的循环行为不适用于多个主机

如果群集服务部署在2节点群集(1manager + 1worker)中。 假设副本设置为3,则会启动容器:一个节点中有2个,另一个节点中有1个容器。

当IP地址pipe理器或工作者命中curl命令时 – 驻留在同一主机上的容器以RR方式被服务。 这个请求不会从另一个节点获得服务,因此这个configuration对于​​我来说不能实现故障转移或HA(跨越多个节点)的目的。

让我分享一下我所做的详细步骤: https : //privatedock.wordpress.com/2017/04/09/docker-swarm/

请让我知道如果我错过了什么。 提前致谢。

我看到您正在部署AWS并使用Public IP for Swarm广告IP。 你确定你要这么做吗? AWSnetworking收费基于通过公共IP传输的数据。 你是否打开了你的公共接口的防火墙规则?

Port 7946 TCP/UDP for container network discovery. Port 4789 UDP for the container overlay network. 

如果您在VPC中使用私有IP地址,则可以排除防火墙。 而且你不会为带宽收费。

您的服务也是使用VIP进行负载平衡创build的。 如果您想要DNS RR,则需要将--endpoint-mode dnsrr添加到您的--endpoint-mode dnsrr docker service create命令中。

如果在容器中运行以下python脚本,则可以validationDNS RR正在工作。 将SERVICE_NAMEreplace为您想要解决的服务。

python -c "import socket; print socket.gethostbyname_ex('SERVICE_NAME')[2]"