如果在2节点集群(1manager + 1worker)中部署了swarm服务。假设副本设置为3,则将启动容器:一个节点中的2个节点和另一个节点中的1个节点。
当在IP地址管理器或工作人员上点击curl命令时 - 驻留在同一主机上的容器以RR方式提供服务。请求不会从其他节点获得服务,因此我的配置无法实现故障转移或HA(跨多个节点)的目的。
让我与您分享我所做的详细步骤:https://privatedock.wordpress.com/2017/04/09/docker-swarm/
如果我错过了什么,请告诉我。提前致谢。
答案 0 :(得分:2)
我看到您正在AWS中部署并使用Public IP for Swarm宣传IP。你确定你要这么做吗? AWS网络费用基于流经公共IP的数据。您是否为公共界面打开了防火墙规则?
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]"