阿里云Elasticsearch(简称ES)支持在线运维,在线运维可以为您展示集群的健康状态。集群健康状态包括redyellowgreen

集群健康状态说明

登录阿里云ES的Kibana控制台,在Dev Tools页面的Console中,通过以下命令查看集群的健康状态。
GET /_cluster/health
正常情况下,返回结果如下。
{
  "cluster_name" : "es-cn-45xxxxxxxxxxxxk1q",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 18,
  "active_shards" : 36,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
status表示集群的健康状态,取值为greenyellowred
集群健康状态 状态 说明
red 不是所有的主要分片都可用。 表示该集群中存在不可用的主分片。可以理解为某个或者某几个索引存在主分片unassigned(丢失)的情况。
yellow 所有主要分片可用,但不是所有复制分片都可用。 表示该集群中某个或者某几个索引存在副本分片unassigned(丢失)的情况。
green 所有主要分片和复制分片都可用。 表示集群中所有的索引都很健康,不存在unassigned的分片。
注意
  • 上述健康状态的描述说明,主要是为了保证您的ES集群处于green状态,即保证任何时候所有的主要分片和副本分片都可用。
  • 如果您的集群处于yellow状态,此时进行修改密码或者升级操作会导致周期比较长。建议修复集群状态为green后,再进行操作。造成yellow状态的原因是,索引存在副本分片unassigned(丢失)的情况,需要查找集群中有问题的索引。详情请参见常见问题

常见问题

Q:集群处于yellow状态如何处理?

A:造成yellow状态的原因是索引存在副本分片unassigned(丢失)的情况,需要查找并修复集群中有问题的索引,命令如下。
  • 索引状态查询命令。
    curl -u 用户名:密码 http://<host>:9200/_cat/indices                   
    通过以上命令,您可以查找有问题的索引名称,即状态为yellow的索引名称。有问题的索引
  • 索引状态修复命令。
    curl -XPUT -u 用户名:密码 http://<host>:9200/有问题的索引名称/_settings -H 'Content-Type: application/json' -d '{"index":{"number_of_replicas":(当前节点数-1)}'              

    当您设置的索引副本数大于当前节点数减1时,会导致集群处于yellow状态。以上代码针对此情况的索引的副本数进行调整。

    例如,您申请的实例节点数为3,但是个别索引副本数也为3,这样集群就会处于yellow的状态。此时设置问题索引副本数为2即可。

    注意 当您完成实例的重启、扩容或其他自定义配置后,请根据ES实例节点数量为索引设置合理的副本数,这将有效提高ES服务的可靠性和稳定性。