2016-06-08 39 views
1

我正在使用gliderlabs/registrator容器的領事,向領事展示我的活動容器。當我過快地刪除容器時,服務不會從領事中刪除,而使「殭屍」服務不再存在。我聽說可以使用gliderlabs/registrator容器的其他選項來防止這種情況,例如-cleanup。但是,我無法使用此選項成功運行任何註冊人。這是我的registrators我目前的搬運工運行命令:如何通過領事和gliderlabs /註冊人防止殭屍服務?

docker run -d -h $(hostname -i) --name registrator1 \ 
-v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator \ 
consul://$(hostname -i):8500 

我有什麼要添加到此運行命令有registrator刪除領事不再存在或已經下降的任何容器?

更新:我已經找到了問題

所以我用我的領事集羣registrator的跑着羣。爲了爲羣集提供故障轉移,我在我的consul羣集前放置了一個負載均衡器,並將我的羣集和註冊器容器連接到負載均衡器的IP地址。這允許任何領事節點下降而不會失去羣體。

然而,swarm並沒有將自己註冊爲服務。它將每個節點註冊爲一個關鍵值,並且不會綁定到consul集羣中的任何節點。註冊到註冊人的領事的容器被創建爲服務並綁定到單個領事服務器。

我認爲最近發生的事情是,當我刪除一個容器時,註冊人去從領事刪除服務,但它只有33%的機會擊中正確的領事服務器,並刪除服務,因爲我的LB正在做循環賽。

我所有的swarm master,負載平衡器,領事服務器和swarm worker都在不同的機器上運行。我的註冊人正在我的羣體工作人員機器上運行。一切都在容器中運行。

啓用粘性負載平衡是解決我的問題的臨時修復程序。不過,我認爲試圖在我的羣體工作人員身上運行某種類型的領事,並讓註冊人將自己綁定到在本地主機上運行的領事,這可能是解決方案。我相信這可能是在領事github https://github.com/hashicorp/consul/tree/master/bench中描述的「板凳工人」。我對領事仍然相當陌生,所以我仍然試圖全力以赴。

回答

0

答案是在我所有的swarm工人節點上運行領事工作者,正式名稱爲領事客戶端。這可以通過從我的progrium/consul運行命令中刪除-server標籤來完成。然後,我的註冊人只是向每臺機器上運行的領事客戶報告,而不是將自己綁定到領事服務器上。由於實習生/領事已經過時並且不再維持,所以當容器被非正常停止(即,除了docker stop以外的任何方式)並隨後被移除時仍然存在殭屍問題。