2017-04-11 54 views
3

如果羣集服務部署在2節點集羣(1manager + 1worker)中。假設副本設置爲3,則將啓動容器:一個節點中有2個,另一個節點中有1個。Docker SWARM容器在多個主機上不起作用的輪循行爲

當IP地址管理器或工作者命中curl命令時 - 駐留在同一主機上的容器以RR方式提供服務。該請求沒有從另一個節點獲得服務,因此對於我來說,此配置無法實現故障轉移或HA(跨多個節點)的目的。

讓我分享你,我也做了詳細的步驟:https://privatedock.wordpress.com/2017/04/09/docker-swarm/

請讓我知道如果我錯過了什麼。提前致謝。

回答

2

我看到您正在部署AWS並使用Public IP for Swarm廣告IP。你確定你要這麼做嗎? AWS網絡收費基於通過公共IP傳輸的數據。你有沒有爲你的公共接口打開你的防火牆規則?

Port 7946 TCP/UDP for container network discovery. 
Port 4789 UDP for the container overlay network. 

如果您在VPC中使用私有IP地址,則可以排除防火牆。而且你不會爲帶寬收費。

您的服務也是使用VIP創建的負載平衡。如果您需要DNS RR,則需要將--endpoint-mode dnsrr添加到您的docker service create命令中。

如果您在容器中運行以下python腳本,則可以驗證DNS RR是否正常工作。將SERVICE_NAME替換爲您想要解決的服務。

python -c "import socket; print socket.gethostbyname_ex('SERVICE_NAME')[2]"

+0

它工作...防火牆是問題。 –

+0

請標記爲已回答,謝謝! – Richard

相關問題