Docker 1.12 Swarm模式-单节点上相同服务的负载平衡任务

Docker 1.12 Swarm模式-单节点上相同服务的负载平衡任务,docker,docker-swarm,Docker,Docker Swarm,在Docker 1.12 Swarm模式下,如果在单个节点中运行同一服务的多个任务并发布同一端口,是否可以在任务之间进行任何类型的负载平衡?或者,拥有比节点数量更多的服务实例的目的是什么? 例如 现在,如果我打开浏览器并访问(多次刷新页面),所有连接似乎都由同一个任务处理,如下所示: docker logs [container1] docker logs [container2] PS:好的,我知道一个节点群没有任何意义,但是如果群上有10个节点(服务扩展到10个副本),然后我失去其中一个节

在Docker 1.12 Swarm模式下,如果在单个节点中运行同一服务的多个任务并发布同一端口,是否可以在任务之间进行任何类型的负载平衡?或者,拥有比节点数量更多的服务实例的目的是什么?
例如

现在,如果我打开浏览器并访问(多次刷新页面),所有连接似乎都由同一个任务处理,如下所示:

docker logs [container1]
docker logs [container2]
PS:好的,我知道一个节点群没有任何意义,但是如果群上有10个节点(服务扩展到10个副本),然后我失去其中一个节点(服务的两个任务将在同一个节点上运行,其中一个将永远不会接收连接),那么同样的情况也会发生


谢谢。

不,路由网格在所有容器之间分配请求,即使多个容器在同一节点上运行

对于stock
nginx
图像,您看不到这一点,因为它配置了高保持活动设置,所以当您刷新时,您的客户端会一直返回到同一容器

请尝试此自定义Nginx映像:

docker service create --name nginx --replicas 10 -p 80:80 sixeyed/nginx-with-hostname
(是自动生成的,您可以在上检查源代码。)

有一个1秒的keep-alive指定,和一个定制响应头
X-Host
,它告诉您服务器的主机名-在这种情况下,它将是容器ID

我连续提出三个请求,所有请求都由不同的容器提供:

> curl -k http://my-swarm.com/ | grep X-Host
X-Host: 5920bc3c7659 

> curl -k http://my-swarm.com/ | grep X-Host    
X-Host: eb228bb39f58 

> curl -k http://my-swarm.com/ | grep X-Host
X-Host: 891bafd52c90  
这些容器都恰好在2节点群中的manager节点上运行。其他请求由worker上的容器提供服务,因此Docker将它们分发到所有任务中

> curl -k http://my-swarm.com/ | grep X-Host
X-Host: 5920bc3c7659 

> curl -k http://my-swarm.com/ | grep X-Host    
X-Host: eb228bb39f58 

> curl -k http://my-swarm.com/ | grep X-Host
X-Host: 891bafd52c90