2017-07-27 241 views
3

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

example of docker image webpage

从我可以创建服务“flairhello”,然后将其扩展到2个continers泊坞窗管理器节点(我们称他们为A和B)。

预期的行为:

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

当前的行为:

我遇到的问题是,对于一定的时间,如果我去拜访在任pi-managerpi-worker本地主机,我引导到容器A的网页,然后在接下来的部分时间无论哪个本地主机(pi-managerpi-worker)我访问我总是定向到Container B。我想这是Docker swarm的内置负载平衡?

问题:

如何使用负载平衡器来得到我的群我想要的行为?

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

是否有这个过程的任何好的教程


更新:?!

步骤,我的回答如下,以创建HAProxy的网络负载平衡器

回答

2

是的,这是正确的,Docker swarm有swarm routing mesh https://docs.docker.com/engine/swarm/ingress/,并且每个设计都没有粘性(ipvs)如果你喜欢粘滞,你必须在你的堆栈中部署一个支持session stickiness的loadbalancer,例如Tr aefik(https://traefik.io/)。

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

+0

林开发这个项目作为一个类的实例,以显示负载平衡,这样,当我去到主网页的流量重定向到两个不同的容器在'pi-manager'和'pi-worker'上运行。因此,如果刷新页面,则容器地址不同,您可以说明负载平衡功能。 Nginx或HaProxy可能吗? Thakk你为我的例子,我看到它是一个粘性连接它究竟是如何工作? – ob1

+0

你认为我可以将这个码头文件转换为ARM架构吗? – ob1

+0

如果容器上没有正在运行的Web服务,我仍然会被重定向到运行该服务的节点? – ob1