Docker 1.12 Swarm Mode - 单节点同服务负载均衡任务
Docker 1.12 Swarm Mode - Load balance tasks of the same service on single node
在 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 个任务将 运行 在同一个节点上,其中一个将永远不会接收连接)。
谢谢。
不,路由网格确实会在所有容器之间分发请求,即使多个容器 运行 在同一节点上也是如此。
您在库存 nginx
图像中看不到这一点,因为它配置了高 keep-alive 设置,因此您的客户端在您刷新时会不断返回到同一容器。
改用这个自定义 Nginx 映像:
docker service create --name nginx --replicas 10 -p 80:80 sixeyed/nginx-with-hostname
(sixeyed/nginx-with-hostname is an automated build, you can check the source on GitHub.)
指定了 1 秒 keep-alive 和自定义响应 header 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 将它们分布在所有任务中。
在 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 个任务将 运行 在同一个节点上,其中一个将永远不会接收连接)。
谢谢。
不,路由网格确实会在所有容器之间分发请求,即使多个容器 运行 在同一节点上也是如此。
您在库存 nginx
图像中看不到这一点,因为它配置了高 keep-alive 设置,因此您的客户端在您刷新时会不断返回到同一容器。
改用这个自定义 Nginx 映像:
docker service create --name nginx --replicas 10 -p 80:80 sixeyed/nginx-with-hostname
(sixeyed/nginx-with-hostname is an automated build, you can check the source on GitHub.)
指定了 1 秒 keep-alive 和自定义响应 header 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 将它们分布在所有任务中。