我已经在运行Raspbian的2个Raspberry Pi 3 Model 3 B的堆栈上配置了一个2节点docker swarm,其中包含一个管理器节点pi-manager
和一个工作节点pi-worker
。我创建了一个在本地主机上运行helloworld类型网页的图像,该网页还标识了正在运行该页面的容器。例如:
从docker manager节点我可以创建服务“flairhello”,然后将其扩展为2个continers(我们称之为A和B)。
预期行为:
我期望获得的行为是,当我访问每个本地主机时,我将获得显示在该主机上运行的容器ID的网页。例如,如果pi-manager
包含容器A
而pi-worker
包含容器B
。当我访问pi-manager
的localhost地址时,我希望看到容器ID为A
,当我访问pi-worker
的本地主机地址时,我希望看到容器ID为{{1} }}。这不是正在发生的事情。
当前行为:
我遇到的行为是,如果我访问B
或pi-manager
的本地主机,我会被引导到容器pi-worker
的网页,然后是下一部分时间,无论我访问哪个localhost(A
或pi-manager
),我总是被定向到Container pi-worker
。我想这是Docker swarm内置的负载均衡?
问题:
如何使用负载均衡器从我的群中获取我想要的行为?
我必须使用哪些工具? Docker撰写? Haproxy图像? (从阅读中看到这些?
这个过程有没有很好的教程?
更新:
在下面的回答中使用HAProxy创建网络负载均衡器的步骤!
答案 0 :(得分:2)
是的,这是正确的。 Docker swarm有swarm路由网格https://docs.docker.com/engine/swarm/ingress/,每个设计都不粘(ipvs)。如果你想变粘,你必须在堆栈中部署一个支持会话粘性的负载均衡器,例如Traefik(https://traefik.io/)。
但是你可以像我们一样使用Nginx。 - > https://github.com/n0r1sk/border-controller。但这更复杂。
答案 1 :(得分:0)
感谢@kleinsasserm指出我正确的方向,我找到了解决问题的方法!我使用基本HAProxy docker镜像及其Round Robin负载平衡算法创建了一个负载均衡器,以创建一个hello world网页,显示它所在的容器,每次刷新交替容器!这是一个实验室项目,用于演示使用docker进行负载均衡。
此解决方案的步骤:
为了设置和配置此负载均衡器,我执行了以下操作:
创建了HAProxy Docker镜像
为图片创建目录
$ 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 .
启动Docker Swarm服务:
$ docker service create -p 8080:80 --name helloworld --replicas 10 <image name>
启动您的HAProxy图像我在不是pi堆栈的计算机上运行
$ docker run -d -p 80:80 swarm-haproxy
在运行HAproxy映像的计算机上,转到http://0.0.0.0刷新页面以显示运行相同服务的不同容器
<小时/> 参考文献: