Consul 注册服务和健康检查(http检查) - Part.5
2018-12-27
张子阳
分类: 分布式系统
在前面两篇文章中,我们对控制台类型的程序进行了服务注册,并以script脚本的方式进行了健康检查。这篇文章将介绍如何对Web类型的服务进行服务注册,并进行健康检查。
本文依然是采用配置文件的方式进行服务注册,以Http API进行注册的方式会在以后的文章中说明。
注册服务
首先要明白的几点是:
- 服务是不区分程序类型的,所以对控制台类型的程序和对Web类型的程序进行服务注册都是一样的。
- 健康检查的方式才区分类型,包括script检查、http检查、tcp检查、gRPC检查等好几种。这篇文章介绍的是http检查。
- 服务不一定要位于运行consul的节点上,配置文件以及Http API只是将服务注册到consul上,并没有说明服务实际的运行位置。因此,可以有很多服务位于不同的服务器上,而它们的本地服务器都没有运行consul。然后通过http api或者配置文件将它们注册在某个运行了consul的节点上。
比如说,我们现在通过我本机工作电脑(mac_work)注册一个服务,这个服务就是这个tracefact.net站点,显然这个站点所在的服务器没有安装consul,修改config下的services.json文件:
{ "services":[ { "id": "tracefact.net", "name": "tracefact.net", "tags": [ "my blog"], "port": 80, "enable_tag_override": false } ] }
执行consul reload重新加载配置后,可以看到mac_work上注册一个tracefact.net服务,而这个tracefact.net本身运行在远程服务器上。
编写健康检查
编写http类型的健康检查相对更简单一些,因为不像script检查需要编写shell或者python脚本。在config下添加check_tracefact.json文件:
{ "check": { "id": "check_tracefact", "name": "check_tracefact", "notes": "检查tracefact.net站点是否可以正常运行", "http": "http://www.tracefact.net/about.html", "tls_skip_verify": false, "method": "GET", "header": {"x-foo":["bar", "baz"]}, "interval": "20s", "timeout": "2s" } }
对于http检查来说,根据Http Status来验证健康检查的状态:
- Http status 200 - 通过
- Http status 429 - 警告
- Http status 其他 - 失败
接下来再次运行 consul reload 重新加载配置,然后进入Web UI,可以看到类似下面的界面:
Output一栏输出了页面请求的Http Body,显然这个输出太长了,更好的办法是为Web Server加一个专用于健康检查的URL地址,仅返回OK。
至此,我们就完成了Web的服务注册和健康检查。接下来,就是通过Consul提供的Http Api来获取可用服务、查看节点状态。
感谢阅读,希望这篇文章能给你带来帮助!