我现在和领事一起玩。 为此,我有一个带有4个虚拟机的流浪测试设置:
1:领事服务器, 2到4:节点。
每个节点都运行一个consul代理,registrator和一些微服务(都使用Docker)。
启动集群后,所有服务和节点都标记为"传递"在领事。
到目前为止一切顺利。
现在,当我关闭其中一个节点时,领事标记了“自我健康状况”"由于失败,但HTTP运行状况检查仍标记为"传递"虽然整个VM都关闭了。
根据consul文档,运行状况检查超时应为10秒,因此我假设在关闭VM 10秒后将运行状况检查标记为失败。知道为什么它没有?
答案 0 :(得分:1)
Consul将在三天(72小时)后删除尚未收到确认的节点。
您可以通过http API对领事服务器执行curl命令,以取消注册支票或服务。
http://consulserver:8500/v1/health/checks/<service-name>
它将返回如下内容:
[{"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 /剂/检查/失败/
此端点用于TTL类型的检查。当通过GET访问此端点时,检查的状态将设置为严重,并且TTL时钟将被重置。
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 /代理/服务/注销/
deregister端点用于从本地代理中删除服务。必须在斜杠后传递ServiceID。代理将负责使用目录取消注册服务。如果存在相关检查,则也会取消注册。
成功时返回代码为200。
https://www.consul.io/docs/agent/http/agent.html#agent_service_deregister
答案 1 :(得分:0)
好的,得到了这个。 这似乎是领事逻辑。一旦SERF失败,就维持服务的最后状态。 一旦我使用了正确的health-url(http://localhost:8500/v1/health/service/my-cool-service-name?passing),consul就会按预期返回剩余的两个服务,除非在直接查看服务时“通过”状态。