方案DNS(和/或負載平衡):如何配置多克羣經理
我建立和配置一個碼頭工人羣簇。我的想法是在2臺分離主機(HostA
和HostB
)部署2臺3臺的虛擬機,使用領事作爲發現後端:
HostA
:manager0
,node0
,node1
HostB
:manager1
,node2
,node3
通過這種方式,我可以在Swarm管理器和節點中獲得所需的冗餘。然而,我目前的狀況是在較早和更簡單的階段:我剛剛紡單一的碼頭工人羣經理如下:
docker \
run -d \
-p 3376:3376 \
swarm manage \
-H :3376 --advertise manager0:3376 \
--replication consul://consul0:8500/
(注:上面的命令已被改編爲這個問題進行一些不相關的參數,如TLS認證已被清除)
這蟲羣簇的第一種子按預期工作:
docker -H tcp://manager0:3376 version
Client:
Version: 1.11.2
API version: 1.23
Go version: go1.5.4
Git commit: b9f10c9
Built: Wed Jun 1 21:47:50 2016
OS/Arch: linux/amd64
Server:
Version: swarm/1.2.3
API version: 1.22
Go version: go1.5.4
Git commit: eaa53c7
Built: Fri May 27 17:25:03 UTC 2016
OS/Arch: linux/amd64
問題:
比方說,我成功地解決了初步計劃,並添加了第二位經理,第二位。據我所知,Consul維護關於Swarm羣集的信息,它知道誰是主要和次要的,執行健康檢查等等。
現在,我戴着我的部署者帽子。我想將我的Docker客戶端連接到Swarm集羣,以便部署例如我的基於nginx的服務。我不想手動連接到manager0
或manager1
,這取決於每種情況下哪一個是主要的,我希望將單個端點用於整個羣集。因此:
如何使用Consul DNS解析指向使用單個端點的正確Swarm管理器?例如:
docker -H tcp://swarm.cluster.example.com:3376 version
,而不是之一:
docker -H tcp://manager0:3376 version
或
docker -H tcp://manager1:3376 version
提示:通過添加第二臺主機,實際上可以降低容錯能力。這是因爲分佈式配置工具需要仲裁,或者超過50%的節點可用。所以如果一個主機出現故障,另一個主機不再有法定人數運行。您至少需要3臺主機才能支持一臺主機停機。 – BMitch
如果你正在開發一個新的羣體,我會去1.12路線,新的'docker swarm'和'docker service'命令可以消除你在這裏試圖解決的很多挑戰。 – BMitch
嗨@BMitch,謝謝你對於1.12路線的建議。我會考慮未來的! –