【问题标题】:consul: how many agents for services领事:服务的代理人有多少
【发布时间】:2015-05-24 00:02:47
【问题描述】:

我正在使用 Docker 和 Consul,我有几个关于代理服务映射的问题,尤其是在 docker 环境中。假设我有一个服务名称“myGreatService”,它是简单的 web nodejs helloworld 应用程序,使用名为“myGreatServiceImage”的 docker 镜像封装。从 Consul 文档中,我确实了解到,当您注册服务(通过 HTTP 或服务定义文件)时,服务即将“连接”到代理/领事节点(可以通过 /v1/catalog/service/ 检索有线节点) .因此,如果一个领事节点已关闭(或节点健康检查确定它已关闭),那么“连接​​”到该领事节点的所有服务都将自动标记为已关闭。我对吗 ?

如果我通过 docker 在单个主机上多次运行我的 GreatServiceImage 图像(导致多个“myGreatService”服务实例) 我应该运行多少个代理? 每个主机管理该主机上的所有容器(所有服务实例)?或者也许每个容器(服务实例)都有一个单独的代理?

【问题讨论】:

  • 在生产中,建议在集群模式下运行consul(3-5台服务器),这样当(consul)节点发生故障时,集群仍然可用,并且服务定义可读。它是一个分布式系统,因此在此设置中,所有节点都拥有所有数据,因此您的服务不会“连接”到特定的领事节点。

标签: consul


【解决方案1】:

如果服务的运行状况检查失败,则该服务将被标记为关闭,并且如果您对该服务进行 DNS 查询,该服务将不会显示

dig @localhost -p 8500 apache.service.consul

如果您调用 api,您会看到该服务仍然在列表中。这是因为服务没有被删除,它只是被标记为关闭。如果您执行 api 调用来检查该服务的运行状况,它将显示为已关闭。

curl localhost/v1/catalog/service/apache
curl localhost/v1/health/service/apache 

您可以在最后一次调用中添加 ?passing 标志以仅接收健康服务。 (就像 dns 查询一样)

curl localhost/v1/health/service/apache?passing

如果主机上的 consul 代理失败,那么如果您向 consul 查询服务,则该主机上运行的所有服务都不会显示。 (通过 dns 查询或通过 api)。

至于您应该运行的代理数量:每台主机运行一个领事代理。让您的服务通过您当地领事代理的 api 自行注册。 (或在配置文件中预配置所有服务,但我建议您将其设为动态的自我注册过程)

【讨论】:

  • 澄清一下:“主机上的代理/节点”是什么意思 您的意思是“注册”服务的代理/节点(您可以从 / v1/catalog/service/ call) 失败,而不是连接到该代理/节点的任何服务都从领事注册表中消失(从 API 和 DNS 中不可见)?你能确认一下吗,请
  • 主机上的代理/节点是指在主机上运行的领事代理。如果您在某个领事代理上注册服务并且该代理出现故障,那么您将无法使用领事 api 或 dns 获取该服务。
  • 太棒了。谢谢澄清。由于我更多地在 Docker 中运行领事,所以我总是需要明确解释“在主机上运行代理”是什么意思
  • 您可以运行 consul Inside a docker container 或直接在您的服务器上运行。这取决于你。我建议你也看看registrator
  • 是的,我知道。我也一直在使用注册器
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 2015-09-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2017-04-08
相关资源
最近更新 更多