Docker SWARM 容器的循环行为无法跨多个主机工作

Round Robin Behaviour of Docker SWARM container not working across multiple hosts

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

当在 IP 地址管理器或工作器上执行 curl 命令时 - 驻留在同一主机上的容器正在以 RR 方式提供服务。该请求不会从其他节点得到服务,因此对于我来说,此配置无法实现故障转移或 HA(跨多个节点)的目的。

让我把我做的详细步骤分享给你:https://privatedock.wordpress.com/2017/04/09/docker-swarm/

如果我遗漏了什么,请告诉我。提前致谢。

我看到您正在 AWS 中部署并使用 Public IP 作为 Swarm 广告 IP。你确定要这么做吗? AWS 网络费用基于流经 public IP 的数据。您是否为 public 接口打开了防火墙规则?

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

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

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

如果您在容器中 运行 以下 python 脚本,您可以验证 DNS RR 是否正常工作。将 SERVICE_NAME 替换为您要解析的服务。

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