繁体   English   中英

docker swarm模式下服务副本之间网络请求的负载平衡

[英]Load balancing of network requests between replicas of services in docker swarm mode

我无法在集群模式下的docker服务副本之间使用负载平衡算法的任何文档。

我创建了一个图像mynodeapp从Dockerfile基于:

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

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

 docker logs amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f

docker logs  amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f

当我跑步

curl localhost:8080

我从一个终端一次收到Sending response而从另一终端一次得到Sending response 因此, 似乎使用了循环负载平衡。

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

该算法当前是一个简单的轮询。 有人建议启用最快的预期响应时间算法,该算法将解决将请求路由到该服务也在本地运行的另一个Docker主机的问题,但这尚未实现。


来自Docker的swarm联网文档

群负载均衡器自动将HTTP请求路由到服务的VIP到活动任务。 它使用循环选择将后续请求分配给其他任务。

关于使用最快的预期响应的评论来自一些dockercon 2016视频,我现在不能停下来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM