繁体   English   中英

使用docker swarm进行负载均衡

[英]Load balancing with docker swarm

我已经在运行Raspbian的2个Raspberry Pi 3 Model 3 B的堆栈上配置了一个2节点docker swarm,其中有一个管理器节点pi-manager和一个worker node pi-worker 我创建了一个在本地主机上运行helloworld类型网页的图像,该网页还标识了正在运行该页面的容器。 例:

docker image网页的示例

从docker manager节点我可以创建服务“flairhello”,然后将其扩展为2个continers(我们称之为A和B)。

预期行为:

我期望获得的行为是,当我访问每个本地主机时,我将获得显示在该主机上运行的容器ID的网页。 例如,如果pi-manager有容器Api-worker有容器B 当我访问pi-manager localhost地址时,我希望看到A的容器ID,当我访问pi-worker的localhost地址时,我希望看到容器ID为B 这不是正在发生的事情。

目前的行为:

我遇到的行为是,如果我在pi-managerpi-worker访问本地主机,有一段时间我会被引导到容器A的网页,然后在下一段时间内,无论哪个本地主机( pi-managerpi-worker )我访问我总是被导向容器B 我想这是Docker swarm内置的负载均衡?

问题:

如何使用负载均衡器从我的群中获取我想要的行为?

我必须使用哪些工具? Docker撰写? Haproxy图像? (看过这些从阅读中提到的?

这个过程有没有很好的教程?


更新:

在下面的答案中,使用HAProxy创建网络负载均衡器的步骤!

是的,这是正确的。 Docker swarm有swarm路由网格https://docs.docker.com/engine/swarm/ingress/ ,这并不是每个设计的粘性(ipvs)。 如果你喜欢粘性,你必须在堆栈中部署一个支持会话粘性的负载均衡器,例如Traefik( https://traefik.io/ )。

但是你也可以像我们一样使用Nginx。 - > https://github.com/n0r1sk/border-controller 但这更复杂。

感谢@kleinsasserm指出我正确的方向,我找到了解决问题的方法! 我使用基本HAProxy docker镜像及其Round Robin负载平衡算法创建了一个负载均衡器,以创建一个hello world网页,显示它所在的容器,每次刷新交替容器! 这是一个实验室项目,用于演示使用docker进行负载平衡。

此解决方案的步骤:

为了设置和配置此负载均衡器,我执行了以下操作:

  1. 创建了HAProxy Docker Image

    • 为您的图像创建一个目录

       $ mkdir haproxyImage $ cd hapoxyImage 
    • 使用以下内容创建您的docker文件

       FROM haproxy:1.7 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg 
    • 创建您的haproxy.cfg文件

       global daemon log 127.0.0.1 local0 notice maxconn 256 defaults log global mode http option httplog option dontlognull retries 3 option redispatch timeout connect 5000 timeout client 10000 timeout server 10000 listen stats bind 0.0.0.0:80 # This is the page you will access mode http stats enable stats uri /haproxy?stats stats realm Strictly\\ Private stats auth A_Username:user stats auth Another_User:password balance roundrobin # Defines our balancing algorithm as round robin. option httpclose option forwardfor server pi-manager <ip address>:8080 check # Docker node server pi-worker1 <ip address>:8080 check # Docker node # Add more docker nodes here 
    • 构建Docker镜像

       $ docker build -t swarm-haproxy . 
  2. 启动Docker Swarm服务:

     $ docker service create -p 8080:80 --name helloworld --replicas 10 <image name> 
  3. 启动你HAProxy图像我在计算机而不是pi堆栈上运行它

     $ docker run -d -p 80:80 swarm-haproxy 
  4. 在运行HAproxy映像的计算机上,转到http://0.0.0.0刷新页面以显示运行相同服务的不同容器


    参考文献:

暂无
暂无

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

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