2016-06-08 38 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以外的任何方式)并随后被移除时仍然存在僵尸问题。