2017-07-27 242 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