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

时间:2016-09-22 19:06:41

标签: docker docker-swarm

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

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个副本),那么似乎也会出现同样的情况,然后我失去了一个节点这些节点(服务的2个任务将在同一节点上运行,其中一个永远不会接收连接)。

感谢。

1 个答案:

答案 0 :(得分:3)

不,路由网格确实在所有容器之间分发请求,即使多个容器在同一节点上运行也是如此。

您没有看到库存nginx图片,因为它配置了高保持活动设置,因此您的客户端会在您刷新时继续返回同一个容器。

请尝试使用此自定义Nginx图像:

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

sixeyed/nginx-with-hostname是自动构建,您可以在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  

这些容器都碰巧在2节点群中的管理器节点上运行。其他请求由工作人员的容器提供,因此Docker正在围绕所有任务分发它们。