Docker 1.12群集模式 – 在单个节点上负载相同服务的平衡任务

在Docker 1.12 Swarm模式下,如果我有多个同一个服务的任务在一个节点上运行并且发布相同的端口,是否可以在任务之间做任何forms的负载平衡? 或者,具有比节点数量更多的服务实例的目的是什么?
例如。

node swarm init node service create --name web --replicas=2 --publish=80:80 nginx 

现在,如果我打开浏览器并访问http:// localhost / (多次刷新页面),所有连接似乎都是由相同的任务处理,

 docker logs [container1] docker logs [container2] 

PS:好吧,我知道,有一个单一的节点群体是没有意义的,但似乎也会发生,如果我有10个节点群体(与服务缩放到10副本),然后我失去了其中一个节点(该服务的两个任务将在同一个节点上运行,其中一个任务将永远不会接收连接)。

谢谢。

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

你看不到股票的nginx图像,因为它configuration了高保持活动设置,所以当你刷新的时候你的客户端会一直返回到同一个容器。

试试这个自定义的Nginx图像:

 docker service create --name nginx --replicas 10 -p 80:80 sixeyed/nginx-with-hostname 

( sixeyed / nginx-with-hostname是一个自动构build,你可以在GitHub上查看源代码。)

有一个指定的保持活动状态1秒,还有一个自定义的响应头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 

这些容器都运行在双节点群的pipe理节点上。 其他请求通过容器提供给工作人员,所以Docker将把它们分发给所有的任务。