【问题标题】:Load balancing of network requests between replicas of services in docker swarm modedocker swarm模式下服务副本之间网络请求的负载均衡
【发布时间】:2017-01-13 13:51:09
【问题描述】:

我找不到任何关于集群模式下 docker 服务副本之间负载平衡算法的文档。

我根据 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

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

 docker logs amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f

docker logs  amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f

当我跑步时

curl localhost:8080

我一次从一个终端收到Sending response,另一次从另一个终端收到。所以它似乎使用了循环负载平衡。

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

【问题讨论】:

    标签: node.js docker load-balancing swarm


    【解决方案1】:

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


    来自docker's swarm networking docs

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

    关于使用最快预期响应的 cmets 来自一些我现在无法提取的 dockercon 2016 视频。

    【讨论】:

    • 您能否提供一些链接来支持您的回答?我只是找不到任何讨论这个问题的来源。
    • 更新了 dockers 文档的链接和引用。
    猜你喜欢
    • 1970-01-01
    • 2017-11-22
    • 2017-10-12
    • 2017-07-19
    • 1970-01-01
    • 2018-01-03
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多