agent一个很重要的功能是进行系统级别
和应用级别
的健康检查。
上一节中,我们注册了web服务,它的状态在UI中显示为健康
但在client端,根本没有在80端口跑任何应用,应用都不存在,何来健康一说呢?
这是因为consul只进行了系统级别
的状态检测,从系统层面上来说,我们的client服务器是活跃的。
需要额外配置应用级别的健康检测。
应用级别的健康检测有以下几种方式:
我们下面将介绍使用script的方式来进行health check
Check脚本可以做任何事情来确定服务的状态。唯一的限制是:退出代码必须遵循下面的约定:
脚本其他的输出都保存在notes字段中,可以供人查看。
将上一节client端的web.json
文件进行更新,配置健康检测的逻辑:
{
"service": {
"name": "web",
"port": 80,
"check": {
"args": [
"curl",
"127.0.0.1"
],
"interval": "10s"
}
}
}
此时执行consul reload
,发现报错如下
这是因为,consul执行bash是危险的操作,默认没有开启脚本检查这种方式。
编辑 /home/ec2-user/consul/config/
目录下的hcl文件,加入以下参数:
data_dir = "/home/ec2-user/consul"
start_join = ["172.31.60.3"]
bind_addr = "172.31.58.144"
enable_script_checks = true # 增加该行
重新启动consul:sudo systemctl restart consul
由于client的80端口没有运行任何应用,故service check会报错:
此时进行服务查询,由于服务状态异常,故查不到结果:
在client的80上运行nginx应用:
sudo amazon-linux-extras enable nginx1
sudo yum install nginx -y
sudo systemctl start nginx
由于80 端口已经有应用在运行,通过了script的状态检测: