领事不承认消失的医疗资源

Consul doesn't recognize disappeared health resource

我目前正在玩 consul。 为此,我有一个带有 4 个虚拟机的 vagrant 测试设置:

1:领事服务器, 2 到 4:节点。

每个节点都是运行一个领事代理、注册器和一些微服务(都带有Docker)。

启动集群后,所有服务和节点在consul中标记为"passing"

到目前为止一切顺利。

现在,当我关闭其中一个节点时,consul 将 "Serf Health Status" 标记为失败,但 HTTP 健康检查仍标记为 "passing",尽管整个 VM 已关闭。

根据 consul 文档,健康检查超时应为 10 秒,因此我假设健康检查在 VM 关闭 10 秒后被标记为失败。知道为什么没有吗?

Consul 将在三天(72 小时)后删除未收到确认的节点。

您可以通过 http API 对 consul 服务器执行 curl 命令以注销支票或服务。

  1. 首先获取服务名称并检查该服务

http://consulserver:8500/v1/health/checks/<service-name>

它会 return 像这样: [{"Node":"b7ea2063deb5","CheckID":"service:myapp","Name":"Service 'myapp' check","Status":"passing","Notes":"runs SELECT 1","Output":" online \n--------\n 1\n(1 row)\n\n","ServiceID":"myapp","ServiceName":"myapp","CreateIndex":11488,"ModifyIndex":11491}]

然后使用 "CheckID" 将健康检查标记为失败:

/v1/agent/check/fail/

This endpoint is used with a check that is of the TTL type. When this endpoint is accessed via a GET, the status of the check is set to critical, and the TTL clock is reset.

http://consulserver:8500/v1/health/fail/service:myapp

如果响应是CheckID does not have associated TTL

那么你的支票不是 TTL 类型的。

可在此处找到有关不同检查类型的更多信息:

https://www.consul.io/docs/agent/checks.html

如果您在查询 http API.

时收到的响应没有任何实际输出,则很难向您提供 运行 的正确命令

您还可以尝试注销整个服务,如果它仍然存在 运行宁

/v1/agent/service/deregister/

The deregister endpoint is used to remove a service from the local agent. The ServiceID must be passed after the slash. The agent will take care of deregistering the service with the Catalog. If there is an associated check, that is also deregistered.

The return code is 200 on success.

https://www.consul.io/docs/agent/http/agent.html#agent_service_deregister

好的,知道了。 这似乎是执政官的逻辑。一旦 SERF 失败,服务的最后状态就会保持不变。 一旦我使用了正确的 health-url (http://localhost:8500/v1/health/service/my-cool-service-name?passing),consul returns 只会像预期的那样剩下两个服务,除非在直接查看服务时处于 "passing" 状态。