Docker 端口映射上的集群扩展行为
Docker swarm scaling behaviour on port mapping
我有一个由三个节点组成的群:
$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
i12s3zxsn4vu1c98bv3i5idr8 node03 Ready Active
i2ckxvsju4tmommxim3dbfq7l node02 Ready Active
wak4isl46dn7pbo39drrhphju * node01 Ready Active Leader
然后我 运行 那个 swarm 上的 1 个 nginx 副本并将他的端口映射到 8080:
$ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
neahnb9mvi1i nginx replicated 1/1 nginx:latest *:8080->80/tcp
从那里,我可以在 http://node01:8080
上访问 nginx
接下来,我将 nginx 实例扩展到 6 个:
$ sudo docker service scale nginx=6
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
neahnb9mvi1i nginx replicated 6/6 nginx:latest *:8080->80/tcp
从那里,我仍然可以在 http://node01:8080 上访问 nginx。
但是,如果 docker swarm 将多个节点暴露为一个唯一的主机,他如何在扩展操作期间管理端口,因为我的所有 nginx 服务都映射到同一个 8080 端口?在 swarm 内部完成的所有服务实例之间是否有循环负载平衡并在 8080 上返回答案?
我相信对主机的请求是在 round-robin 类型分配中分配的。
找到这篇关于它的便利文章 http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html。检查标题为“INGRESS 和 ROUND ROBIN 负载平衡”的部分。
您可以通过使用 swarm 中任何机器的 IP 和该端口来访问公开其端口的任何服务(使用堆栈部署)。 Docker swarm 然后将该请求转发给其中一个副本。
哪个副本由健康状态(不健康的服务被忽略)和配置的负载平衡选项决定,默认情况下是循环。
我有一个由三个节点组成的群:
$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
i12s3zxsn4vu1c98bv3i5idr8 node03 Ready Active
i2ckxvsju4tmommxim3dbfq7l node02 Ready Active
wak4isl46dn7pbo39drrhphju * node01 Ready Active Leader
然后我 运行 那个 swarm 上的 1 个 nginx 副本并将他的端口映射到 8080:
$ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
neahnb9mvi1i nginx replicated 1/1 nginx:latest *:8080->80/tcp
从那里,我可以在 http://node01:8080
上访问 nginx接下来,我将 nginx 实例扩展到 6 个:
$ sudo docker service scale nginx=6
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
neahnb9mvi1i nginx replicated 6/6 nginx:latest *:8080->80/tcp
从那里,我仍然可以在 http://node01:8080 上访问 nginx。
但是,如果 docker swarm 将多个节点暴露为一个唯一的主机,他如何在扩展操作期间管理端口,因为我的所有 nginx 服务都映射到同一个 8080 端口?在 swarm 内部完成的所有服务实例之间是否有循环负载平衡并在 8080 上返回答案?
我相信对主机的请求是在 round-robin 类型分配中分配的。
找到这篇关于它的便利文章 http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html。检查标题为“INGRESS 和 ROUND ROBIN 负载平衡”的部分。
您可以通过使用 swarm 中任何机器的 IP 和该端口来访问公开其端口的任何服务(使用堆栈部署)。 Docker swarm 然后将该请求转发给其中一个副本。 哪个副本由健康状态(不健康的服务被忽略)和配置的负载平衡选项决定,默认情况下是循环。