脱离集群
可以使用 Ctrl-C
来平滑地退出,也可以强行Kill退出,区别是主动告知其它节点自己的离开,和被其它节点标记为失效,被发现离开
健康检查
健康检查对于避免将请求发送给运行不正常的服务是一个相当关键的机制
和服务一样,有两种方式来定义健康检查
- 通过配置文件
- 使用 HTTP API
定义检查
这里使用配置文件的方式来定义健康检查
代码语言:javascript复制[root@docker ~]# echo '{"check": {"name": "ping","script": "ping -c1 soft.dog >/dev/null", "interval": "30s"}}' > /etc/consul.d/ping.json
[root@docker ~]# echo '{"service": {"name": "web", "tags": ["rails"], "port": 80,"check": {"script": "curl localhost >/dev/null 2>&1", "interval": "10s"}}}' > /etc/consul.d/web.json
[root@docker ~]# cat /etc/consul.d/ping.json
{"check": {"name": "ping","script": "ping -c1 soft.dog >/dev/null", "interval": "30s"}}
[root@docker ~]# cat /etc/consul.d/web.json
{"service": {"name": "web", "tags": ["rails"], "port": 80,"check": {"script": "curl localhost >/dev/null 2>&1", "interval": "10s"}}}
[root@docker ~]#
重载配置
通过给进程发送 SIGHUP 的信号来使配置重载
代码语言:javascript复制[root@docker ~]# ps faux | grep consul
root 22094 1.2 0.3 25084 13756 pts/0 Sl 21:51 1:07 | _ consul agent -data-dir /tmp/consul -node=a2 -bind=192.168.100.103 -config-dir /etc/consul.d
root 25063 0.0 0.0 112644 960 pts/1 S 23:20 0:00 _ grep --color=auto consul
[root@docker ~]# kill -s SIGHUP 22094
[root@docker ~]#
这时可以观察到日志输出
代码语言:javascript复制...
...
==> Caught signal: hangup
==> Reloading configuration...
2016/03/18 23:21:07 [INFO] agent: Synced service 'web'
2016/03/18 23:21:07 [INFO] agent: Synced check 'ping'
2016/03/18 23:21:08 [WARN] agent: Check 'service:web' is now critical
2016/03/18 23:21:18 [WARN] agent: Check 'service:web' is now critical
2016/03/18 23:21:28 [WARN] agent: Check 'service:web' is now critical
2016/03/18 23:21:32 [INFO] agent: Synced check 'ping'
2016/03/18 23:21:38 [WARN] agent: Check 'service:web' is now critical
...
...
...
重新加载配置后,两个检查脚本都成功载入了
ping 脚本检查正常,因为我的博客地址是可达的,同时由于我们并没有真正在本地启web服务,80端口不存在,也不提供内容,所以检查结果是状态不正常