elasticsearch 未分配分片unassigned导致集群为Yellow状态修复

1.集群状态:

  (1)绿色—最健康的状态,代表所有的主分片和副本分片都可用; 
  (2)黄色—所有的主分片可用,但是部分副本分片不可用; 
  (3)红色—部分主分片不可用。(此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好。)

2.查看集群中不同节点,不同索引的状态

GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

3.导致未分配分片unassigned可能的原因

1)INDEX_CREATED:由于创建索引的API导致未分配。
2)CLUSTER_RECOVERED :由于完全集群恢复导致未分配。
3)INDEX_REOPENED :由于打开open或关闭close一个索引导致未分配。
4)DANGLING_INDEX_IMPORTED :由于导入dangling索引的结果导致未分配。
5)NEW_INDEX_RESTORED :由于恢复到新索引导致未分配。
6)EXISTING_INDEX_RESTORED :由于恢复到已关闭的索引导致未分配。
7)REPLICA_ADDED:由于显式添加副本分片导致未分配。
8)ALLOCATION_FAILED :由于分片分配失败导致未分配。
9)NODE_LEFT :由于承载该分片的节点离开集群导致未分配。
10)REINITIALIZED :由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。
11)REROUTE_CANCELLED :作为显式取消重新路由命令的结果取消分配。
12)REALLOCATED_REPLICA :确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。

4.解决未分配分片unassigned方案

方案一、

  极端情况—这个分片数据已经不可用,直接删除该分片。 
  ES中没有直接删除分片的接口,除非整个节点数据已不再使用,删除节点。 

curl -u elastic:xxxx -XDELETE ‘localhost:9200/index_name/’

方案二、

  集群中节点数量>集群中所有索引可配置最大副本数量。
  N> R
  其中:
    N—集群中节点的数目;
    R—集群中所有索引可配置最大副本数目。
  知识点:当节点加入和离开集群时,主节点会自动重新分配分片,以确保分片的多个副本不会分配给同一个节点。换句话说,主节点不会将主分片分配给与其副本相同的节点,也不会将同一分片的两个副本分配给同一个节点。
  如果没有足够的节点相应地分配分片,则分片可能会处于未分配状态。
  由于我的集群就3个节点,即N=3;所以R=2,也能满足公式,而集群副本分配默认为1。

  问题就转嫁为: 
    1)添加节点处理,即N增大; 
    2)调小副本分片,即R置为2。 
  R置为2的方式,可以通过如下命令行实现【当集群节点大于1时,不建议将索引副本设置为0】:

curl -u elastic:xxxx -XPUT "http://localhost:9200/_settings" -d '{ "number_of_replicas" : 2 }' 
{"acknowledged":true}

  查看elasticsearchx系统配置

GET _settings

  然而查到我的集群出问题的索引副本竟然是3

  尝试将默认副本数number_of_replicas改为1

  集群健康状态恢复了

 

posted @ 2019-05-31 16:40  chenjianwen  阅读(6556)  评论(0编辑  收藏  举报