gpt4 book ai didi

docker - 如何使用 consul 和 gliderlabs/registrator 防止僵尸服务?

转载 作者:行者123 更新时间:2023-12-02 20:21:56 25 4
gpt4 key购买 nike

我正在使用带有 gliderlabs/registrator 容器的 consul 来在 consul 中显示我的事件容器。当我删除容器太快时,服务不会从 consul 中删除,留下 “僵尸” 不再存在的服务。我听说有一些额外的选项可以用于 gliderlabs/registrator 容器来防止这种情况,例如 -cleanup .但是,我无法使用此选项成功运行任何注册器。这是我的注册者当前的 docker run 命令:

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

我必须在此运行命令中添加什么才能让注册者从领事中删除不再存在或已关闭的任何容器?

更新:我发现了问题

因此,我正在使用我的领事集群和注册者集群运行 swarm。为了为 swarm 提供故障转移,我在我的 consul 集群前面放置了一个负载均衡器,并将我的 swarm 和 registrator 容器连接到负载均衡器的 IP 地址。这允许任何 consul 节点在不丢失 swarm 的情况下关闭。

然而 swarm 并没有将自己注册为服务。它将每个节点注册为一个键值,并且不绑定(bind)到 consul 集群中的任何节点。通过注册器注册到 consul 的容器被创建为服务并绑定(bind)到单个 consul 服务器。

我认为发生的事情是,当我删除一个容器时,注册器会从 consul 中删除该服务,但它只有 33% 的机会访问正确的 consul 服务器并删除该服务,因为我的 LB 只是在进行循环。

我所有的 swarm master、负载均衡器、consul 服务器和 swarm worker 都在不同的机器上运行。我的注册器在我的 swarm worker 机器上运行。一切都在容器中运行。

启用粘性负载平衡是解决我的问题的临时修复。但是,我认为尝试在我的 swarm 工作人员上运行某种类型的领事工作人员并将注册器绑定(bind)到在本地主机上运行的领事工作可能是解决方案。我相信这可能是 consuls github https://github.com/hashicorp/consul/tree/master/bench 中描述的“bench-worker” .我对领事还很陌生,所以我仍在努力弄清楚。

最佳答案

答案是运行领事工作人员,正式名称为 。领事客户 ,在我所有的 swarm worker 节点上。这可以通过删除 -server 来完成。我的 progrium/consul 运行命令中的标记。然后我的注册者只是向每台机器上运行的领事客户端报告,而不是将自己绑定(bind)到领事服务器。由于 progrium/consul 已过时且不再维护,当容器被不优雅地停止(即除 docker stop 之外的任何方式)并随后被删除时,仍然会出现僵尸问题。

关于docker - 如何使用 consul 和 gliderlabs/registrator 防止僵尸服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37691453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com