Docker群模式下服务副本之间的networking请求负载均衡

在群集模式下,Docker服务副本之间的负载均衡algorithm找不到任何文档。

我创build了一个基于Dockerfile的图像mynodeapp:

 FROM node:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 8080 CMD [ "npm", "start" ] 

npm启动以下server.js

 const LATENCY = 5000; var app = require('express')(); app.get('/', (req,res)=>{ console.log('Sending response'); setTimeout( function() { res.send('All ok'); }, LATENCY ); }); app.listen( 8080 ); 

代码在延迟5秒后才发送All ok 。 此外,它打印Sending response到控制台。

现在,我开始docker swarm模式:

 docker swarm init --advertise-addr:eth0 

并开始两个副本的服务:

 docker service create mynodeapp --replicas 2 --publish 8080:8080 

结果是

 root@man1:~# docker service ls ID NAME REPLICAS IMAGE COMMAND 233z44bz6sx0 amazing_hypatia 2/2 mynodeapp root@man1:~# docker ps CONTAINER ID PORTS NAMES 1f36e0c9eb37 8080/tcp amazing_hypatia.1.453u2upnyf2nvtwxouopv4olk f0fb099a5154 8080/tcp amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g 

现在,我打开两个terminal并查看两个容器的日志:

  docker logs amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f 

 docker logs amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f 

当我跑步

 curl localhost:8080 

我从一个terminal获得一次Sending response ,另一个terminal从另一个terminal获得Sending response 。 因此, 似乎使用循环负载平衡。

但什么是真正的负载平衡algorithm?

该algorithm目前是一个简单的循环法。 已经有人build议启用最快的预期响应时间algorithm来解决请求被路由到另一个docker主机的问题,该服务也在本地运行,但是这还没有被实现。


从docker的群networking文档 :

群集负载均衡器自动将HTTP请求发送到服务的VIP,以执行一个活动的任务。 它使用循环法select将后续请求分发给其他任务。

关于使用最快的预期响应的意见是从一些我现在无法解决的dockercon 2016video。