docker群的负载均衡

我已经configuration了一个2节点的docker swarm,其中有一个pipe理节点pi-manager和一个worker节点pi-worker ,运行Raspbian的2个Raspberry Pi 3 Model 3 B。 我已经创build了一个图像,在本地主机上运行一个helloworldtypes的网页,该网页也标识了该页面正在运行的容器。 例:

码头图片网页的例子

从dockerpipe理器节点中,我可以创build服务“flairhello”,然后将其扩展到2个大小(我们将称它们为A和B)。

预期的行为:

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

当前行为:

我所经历的行为是,如果我在pi-manager或者pi-worker访问本地主机的时候需要一段时间,那么我将被引导到容器A的网页,然后在下一段时间,不pipe哪个localhost( pi-managerpi-worker )我访问我总是被引导到集装箱B 。 我想这是Docker群集的内置负载平衡?

问题:

我如何使用负载平衡器来获得我想从我的群体中得到的行为?

我必须使用哪些工具? Docker组合? Haproxy图像? (看到这些从阅读这个提到?

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


更新:

在下面的答案中用HAProxy创buildnetworking负载平衡器的步骤!

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

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

感谢@ kleinsasserm指引我正确的方向我find了解决我的问题! 我创build了一个使用基本HAProxy Docker镜像和其循环负载均衡algorithm的负载平衡器,以创build一个hello world网页,该网页将显示它所在的容器,每个容器交替刷新! 这是一个用于演示使用docker进行负载平衡的实验项目。

此解决scheme的步骤:

为了设置和configuration这个负载平衡器我做了以下几点:

  1. 创buildHAProxy Docker图像

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

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

       FROM haproxy:1.7 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg 
    • 创build你的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 
    • 构build你的Docker镜像

       $ docker build -t swarm-haproxy . 
  2. 开始你的Docker Swarm服务:

     $ docker service create -p 8080:80 --name helloworld --replicas 10 <image name> 
  3. 开始你HAProxy图像我在计算机上运行这不是丕堆栈

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


    参考文献:

    • HAProxyconfiguration手册
    • 如何使用HAProxy在Ubuntu VPS上设置HTTP负载平衡
    • bhameyie / haproxy.cfg