公司的监控系统使用了curl -s http://localhost:9200/_cat/health?v
来获取集群的健康状态。
那么_cat/health?v返回的结果到底什么意思呢?每个结果对生产环境的集群健康到底有什么参考意义呢?
此命令常见的用途一般有两个:
1、验证节点之间的健康状况是否一致,
2、跟踪大型集群随时间的故障恢复情况
正常情况下,执行curl -s http://localhost:9200/_cat/health?v
命令得到的结果如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558506494 14:28:14 hdzx_elk green 3 3 282 141 0 0 0 0 - 100.0%
含义如下:
前两个是时间戳,不过多介绍。其余如下:
拿了三个节点的ES集群进行测试。
1、首先正常情况下,看head插件中的集群状态如下:
可以看到每个索引有5个主分片,每个主分片的副本不会与主分片分布在同一个节点上。
这时执行curl -s http://localhost:9200/_cat/health?v
命令得到的结果如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558506494 14:28:14 hdzx_elk green 3 3 282 141 0 0 0 0 - 100.0%
可见relo、 init 、unassign、 pending_tasks 均为0;active_shards_percent值为100.0%,一切正常。
2、这时停掉一个ES节点,此时有两个健康节点,
使用_cat/health?v命令循环查看集群的状态。
如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558520494 18:21:34 hdzx_elk yellow 2 2 201 151 0 0 101 0 - 66.6%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558520545 18:22:25 hdzx_elk yellow 2 2 289 151 0 2 11 0 - 95.7%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558520556 18:22:36 hdzx_elk green 2 2 302 151 0 0 0 0 - 100.0%
结合时间戳可以看到集群有个自恢复的过程,
我们去head页面查看集群状态如下:
可见此时有两个节点,主分片和副分片仍不在同一个节点上。
3、再停止一个节点,此时只有一个正常节点
使用_cat/health?v命令循环查看集群的状态。
如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558523601 19:13:21 hdzx_elk yellow 1 1 151 151 0 0 151 0 - 50.0%
此时去head页面查看集群的状态如下:
可以看到此时只有主分片在唯一的一个节点上,所以集群状态为yellow。
4、此时恢复一个节点,将有两个节点正常运行。
使用_cat/health?v命令循环查看集群的状态。
如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558524428 19:27:08 hdzx_elk yellow 2 2 178 151 0 2 122 0 - 58.9%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558524437 19:27:17 hdzx_elk yellow 2 2 208 151 0 2 92 0 - 68.9%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558524455 19:27:35 hdzx_elk yellow 2 2 274 151 0 2 26 0 - 90.7%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558524500 19:28:20 hdzx_elk green 2 2 302 151 0 0 0 0 - 100.0%
可见随着时间的推移:
5、恢复第三个节点
使用_cat/health?v命令循环查看集群的状态。
如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558525121 19:38:41 hdzx_elk yellow 3 3 282 151 0 0 20 1 - 93.4%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558525125 19:38:45 hdzx_elk yellow 3 3 293 151 0 2 7 0 - 97.0%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558525129 19:38:49 hdzx_elk green 3 3 302 151 2 0 0 0 - 100.0%
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558525225 19:40:25 hdzx_elk green 3 3 302 151 0 0 0
再次看head页面会发现,虽然都是三个节点,但是分片的分布状态不一样。