返回介绍

健康检查

发布于 2024-12-29 22:52:38 字数 2816 浏览 0 评论 0 收藏 0

我们现在看到 Consul 运行时如此简单.添加节点和服务,查询节点和服务.在这一节.我们将继续添加健康检查到节点和服务.健康检查是服务发现的关键组件.预防使用到不健康的服务。

这一步建立在前一节的 Consul 集群创建之上.目前你应该有一个包含两个节点的 Consul 集群。

定义检查

和服务类似,一个检查可以通过检查定义或 HTTP API 请求来注册。

我们将使用和检查定义来注册检查.和服务类似,因为这是建立检查最常用的方式。

在第二个节点的配置目录建立两个定义文件:

vagrant@n2:~$ echo '{"check": {"name": "ping",
  "script": "ping -c1 163.com >/dev/null", "interval": "30s"}}' \
  >/etc/consul.d/ping.json

vagrant@n2:~$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80,
  "check": {"script": "curl localhost >/dev/null 2>&1", "interval": "10s"}}}' \
  >/etc/consul.d/web.json

第一个定义增加了一个主机级别的检查,名字为 "ping" . 这个检查每 30 秒执行一次,执行 ping -c1 163.com . 在基于脚本的健康检查中,脚本运行在与 Consul 进程一样的用户下.如果这个命令以非 0 值退出的话这个节点就会被标记为不健康.这是所有基于脚本的健康检查的约定。

第二个命令定义了名为 web 的服务,添加了一个检查.每十分钟通过 curl 发送一个请求,确定 web 服务器可以访问.和主机级别的检查一样.如果脚本以非 0 值退出则标记为不健康。

现在重启第二个 agent 或者发送 SIGHUP 信号,你应该可以看到如下的日志内容输出:

==> Reloading configuration...
    2016/08/18 15:29:57 [INFO] agent: Synced service 'web'
    2016/08/18 15:29:57 [INFO] agent: Synced check 'ping'
    2016/08/18 15:29:58 [WARN] agent: Check 'service:web' is now critical

前几行检查到 agent 同步了新的定义.最后一行检查到 web 服务出于危险状态.这是因为我们实际上没有运行一个 web 服务器.所以 `curl 的测试会一直失败!

检查健康状态

现在我们加入了一些简单的检查.我们能适应 HTTP API 来检查他们.首先我们检查有哪些失败的检查.使用这个命令(注意:这个命令可以运行在任何节点)

[root@hdp3 consul.d]# curl http://localhost:8500/v1/health/state/critical
[{"Node":"hdp3","CheckID":"service:web","Name":"Service 'web' check","Status":"critical","Notes":"","Output":"","ServiceID":"web","ServiceName":"web","CreateIndex":878,"ModifyIndex":878}]

我们可以看到,只有一个检查我们的 web 服务在 critical 状态

另外,我们可以尝试用 DNS 查询 web 服务,Consul 将不会返回结果.因为服务不健康。

[root@hdp3 consul.d]# dig @127.0.0.1 -p 8600 web.service.consul

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> @127.0.0.1 -p 8600 web.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 33096
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;web.service.consul.           IN         A

;; AUTHORITY SECTION:
consul.            0          IN         SOA        ns.consul. postmaster.consul. 1471507354 3600 600 86400 0

;; Query time: 8 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Thu Aug 18 16:02:34 2016
;; MSG SIZE  rcvd: 104

下一步

在本章,你学到了如何鉴定的添加健康检查.检查定义可以通过配合文件并发送 SIGHUP 到 agent 进行更新.另外,HTTP API 可以用来动态添加,移除和修改检查,以及进行 TTL 检查.TTL 可以让应用程序更紧密的与 Consul 集成.将检查的状态加入到业务逻辑的计算。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文