【问题标题】:Docker 1.12 Swarm Mode - Load balance tasks of the same service on single nodeDocker 1.12 Swarm Mode - 单个节点上相同服务的负载均衡任务
【发布时间】:2016-09-23 05:16:06
【问题描述】:

在 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 个任务将在同一个节点上运行,其中一个永远不会收到连接)。

谢谢。

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

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

    您看不到股票 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 节点集群中的管理节点上运行。其他请求由 Worker 上的容器提供服务,因此 Docker 将它们分发给所有任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-12
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2018-01-03
      相关资源
      最近更新 更多