2016-07-02 29 views
1

方案DNS(和/或負載平衡):如何配置多克羣經理

我建立和配置一個碼頭工人羣簇。我的想法是在2臺分離主機(HostAHostB)部署2臺3臺的虛擬機,使用領事作爲發現後端:

HostAmanager0node0node1

HostBmanager1node2node3

通過這種方式,我可以在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的服務。我不想手動連接到manager0manager1,這取決於每種情況下哪一個是主要的,我希望將單個端點用於整個羣集。因此:

如何使用Consul DNS解析指向使用單個端點的正確Swarm管理器?例如:

docker -H tcp://swarm.cluster.example.com:3376 version 

,而不是之一:

docker -H tcp://manager0:3376 version 

docker -H tcp://manager1:3376 version 
+0

提示:通過添加第二臺主機,實際上可以降低容錯能力。這是因爲分佈式配置工具需要仲裁,或者超過50%的節點可用。所以如果一個主機出現故障,另一個主機不再有法定人數運行。您至少需要3臺主機才能支持一臺主機停機。 – BMitch

+1

如果你正在開發一個新的羣體,我會去1.12路線,新的'docker swarm'和'docker service'命令可以消除你在這裏試圖解決的很多挑戰。 – BMitch

+0

嗨@BMitch,謝謝你對於1.12路線的建議。我會考慮未來的! –

回答

2

我認爲HostAHostB應該使用領事作爲DNS服務器。爲此,需要將Consul的默認DNS服務器端口更改爲53.之後,更改主機的域名服務器(文件/etc/resolv.conf)。

見鏈接https://www.consul.io/docs/agent/dns.html

的DNS查詢系統使用的健康檢查信息,以防止 路由不健康的節點。當進行服務查詢時,任何服務 未通過健康狀況檢查或未通過節點系統檢查將從結果中省略 。爲了實現簡單的負載均衡,每次返回節點的集合 也是隨機的。這些機制使得易於使用DNS和應用程序級別的重試作爲面向自動修復面向服務的體系結構的基礎 。

+0

謝謝@Nguyen - 我會試試這個。我在Consul很新,它的文檔假設了一些我不能控制的基本知識。 –