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
具有容器A
, pi-worker
具有容器B
当我访问pi-manager
本地主机地址时,我期望看到A
的容器ID,当我访问pi-worker
的localhost地址时,我期望看到B
的容器ID。 这不是正在发生的事情。
当前行为:
我所经历的行为是,如果我在pi-manager
或者pi-worker
访问本地主机的时候需要一段时间,那么我将被引导到容器A
的网页,然后在下一段时间,不pipe哪个localhost( pi-manager
或pi-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这个负载平衡器我做了以下几点:
-
创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 .
-
-
开始你的Docker Swarm服务:
$ docker service create -p 8080:80 --name helloworld --replicas 10 <image name>
-
开始你HAProxy图像我在计算机上运行这不是丕堆栈
$ docker run -d -p 80:80 swarm-haproxy
-
在运行HAproxy映像的机器上,转到http:/.0.0.0.0刷新页面,显示运行相同服务的不同容器
参考文献:
- HAProxyconfiguration手册
- 如何使用HAProxy在Ubuntu VPS上设置HTTP负载平衡
- bhameyie / haproxy.cfg