Si se implementa un servicio de enjambre en un clúster de 2 nodos (1 administrador + 1 trabajador). Suponiendo que las réplicas se establezcan en 3, se lanzarán contenedores: 2 en un nodo y 1 en el otro nodo.
Cuando se presiona el comando curl en el administrador de direcciones IP o en el trabajador, el contenedor que reside en el mismo host se sirve de manera RR. La solicitud no se atiende desde el otro nodo, por lo tanto, esta configuración no logra el propósito de la conmutación por error o HA (a través de múltiples nodos).
Déjame compartirte los pasos detallados que he hecho: https://privatedock.wordpress.com/2017/04/09/docker-swarm/
Por favor, avíseme si me perdí algo. Gracias por adelantado.
Veo que está implementando en AWS y utilizando la IP pública para la IP de publicidad de Swarm. ¿Seguro que quieres hacer esto? Los cargos de la red de AWS se basan en los datos que fluyen a través de la IP pública. ¿Ha abierto sus reglas de firewall para su interfaz pública?
Port 7946 TCP/UDP for container network discovery. Port 4789 UDP for the container overlay network.Puede descartar el firewall si utilizó direcciones IP privadas dentro de su VPC. Y no se le cobrará por el ancho de banda.
Su servicio también se creó utilizando VIP para equilibrar la carga. Si quisiera DNS RR, necesitaría agregar --endpoint-mode dnsrr a su comando docker service create .
Puede verificar que DNS RR funciona si ejecuta el siguiente script de Python en sus contenedores. Reemplace SERVICE_NAME con el servicio contra el que desea resolver.
python -c "import socket; print socket.gethostbyname_ex('SERVICE_NAME')[2]"