之前的文章已经让我们知道搭建 consul 的集群比较简单,今天我们来继续我们的系列,使用 consul 进行 health check。
开始之前,你需要准备我们在前面文章中已经搭建好的 cluster。
定义 checks
同定义 service 一样,定义 checks 可以通过配置或者调用 HTTP API 来实现,在此我们之前一样使用配置文件来实现,这是最通用的做法。
在 consul 0.9 之后,agent 必须配置 enable_script_checks 为 true 来允许 script checks。
在第二个节点上创建两个定义文件:
1 | vagrant@n2:~$ echo '{"check": {"name": "ping", |
这里我们定义了一个 ping 的 host check,这个 check 每 30s 执行一次 ping -c1 google.com命令。基于 script 的 health check 执行命令时的 user 和 开启 consul 进程是同一个。如果检测程序退出时的 code >= 2,这次检测会被标记为 failing,这个服务也被认为是不健康的 unhealthy。这个规则适用任何 script-base 的 health check。
第二个命令定义了一个服务 web,并且每 10s 进行一次 curl 检查来确保服务仍然可用。
重新启动 consul 来加载刚才的定义:
1 | 2018/05/16 11:32:16 [INFO] agent: Synced check "ping" |
从输出结果我们不难看出,ping 现在是警告状态,service:web 报严重错误,由于 google 被墙所以 ping 会超时,端口在 80 的 web 服务我们本地根本没有开启。
获取 checking 状态
可以通过 API 来获取有关 health check 的运行状态:
1 | vagrant@n1:~$ curl http://localhost:8500/v1/health/state/critical |
为了证实我们获取的结果,可以使用 DNS 查询查看 web 服务的:
1 | vagrant@n1:~$ dig @127.0.0.1 -p 8600 web.service.consul |
可以看到没有返回正确的状态,因为服务已经不可用了。