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

  集群健康狀態恢復了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM