领事没有认识到消失的健康资源

时间:2016-04-03 10:55:37

标签: consul

我现在和领事一起玩。 为此,我有一个带有4个虚拟机的流浪测试设置:

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

每个节点都运行一个consul代理,registrator和一些微服务(都使用Docker)。

启动集群后,所有服务和节点都标记为"传递"在领事。

到目前为止一切顺利。

现在,当我关闭其中一个节点时,领事标记了“自我健康状况”"由于失败,但HTTP运行状况检查仍标记为"传递"虽然整个VM都关闭了。

根据consul文档,运行状况检查超时应为10秒,因此我假设在关闭VM 10秒后将运行状况检查标记为失败。知道为什么它没有?

2 个答案:

答案 0 :(得分:1)

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

您可以通过http API对领事服务器执行curl命令,以取消注册支票或服务。

  1. 首先获取服务名称和对该服务的检查
  2. 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就会按预期返回剩余的两个服务,除非在直接查看服务时“通过”状态。