在 Elasticsearch 集群中可以监控统计很多信息,但只有集群健康(cluster health)是最重要的。集群健康有三种状态:RedYellowGreen

集群健康可通过以下命令查看:

curl -u 用户名:密码 http://domain:9200/_cluster/health

集群健康

颜色 状态 备注
Red 不是所有的主要分片都可用 表明该集群中存在不可用的主分片,可以理解为某个或者某几个索引存在主分片 unassigned (丢失)的情况。
Yellow 所有主要分片可用,但不是所有复制分片都可用 表明该集群中某个或者某几个索引副本分片 unassigned (丢失)的情况。
Green 所有主要分片和复制分片都可用 表明集群中所有的索引都很健康不存在 unassigned 的分片。
说明

上述健康状态的描述说明,主要是为了保证您的 Elasticsearch 集群处于 Green 状态,因此需要保证任何时候所有的主要分片副本都可用。

故障处理

集群处于yellow状态

如果您的集群处于 Yellow 状态,此时进行修改密码或者升级会导致升级周期比较长。

建议修复集群成健康状态 Green 后,再进行操作。造成 Yellow 状态的原因是索引存在副本分片 unassigned(丢失)的情况,需要查找集群中有问题的索引。

索引状态查询命令
curl -u 用户名:密码 http://domain:9200/_cat/indices
# 找到有问题的索引名称。如果是因为设置的副本数大于当前节点数减1导致集群处于Yellow状态,
# 需调整有问题的索引的副本个数。
索引状态修复命令
curl -XPUT -u 账号:密码 http://domain:9200/有问题的索引名称/_settings -H 'Content-Type: application/json' -d '{"index":{"number_of_replicas":(当前节点数减1)}'
# 比如申请的实例节点数为3但是个别索引副本数为3,这样集群就会处于yellow的状态。
# 设置问题索引副本数为2即可。
说明

当您完成实例操作(重启/扩容/自定义配置)后,请根据您的实例节点数量设置合理副本数。这将有效提高您的 elasticsearch 服务的可靠性和稳定性。