1. 程式人生 > 實用技巧 >Elasticsearch叢集黃色原因分析

Elasticsearch叢集黃色原因分析

1、Elasticsearch叢集不同顏色代表什麼?

綠色——最健康的狀態,代表所有的主分片和副本分片都可用;
黃色——所有的主分片可用,但是部分副本分片不可用;
紅色——部分主分片不可用。(此時執行查詢部分資料仍然可以查到,遇到這種情況,還是趕快解決比較好。

2、Elasticsearch 叢集顏色變黃色了要不要緊?

Elasticsearch叢集黃色代表:

  • 分配了所有主分片,但至少缺少一個副本。
  • 沒有資料丟失,因此搜尋結果仍將完整。

注意:您的高可用性在某種程度上會受到影響。
如果更多分片消失,您可能會丟失資料。 將黃色視為應該提示調查的警告。

3、Elasticsearch叢集健康狀態如何排查?

3.1叢集狀態檢視

GET /_cluster/health?pretty=true
{
  "cluster_name" : "cloud_es",
  "status" : "green",
  "timed_out" : false,           #是否超時
  "number_of_nodes" : 2,         #節點數量
  "number_of_data_nodes" : 2,    #儲存節點數量
  "active_primary_shards" : 10,  #主分片數
  "active_shards
" : 17, #所以分片數 "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 #叢集分片的可用性百分比,如果為0則表示不可用
}

3.2分片狀態檢視

GET /_cat/shards?v
index   shard prirep state      docs  store ip              node
nihao   2     r      STARTED       0   208b 192.168.100.110 node01_r1
nihao   2     p      STARTED       0   208b 192.168.100.110 node01_r2
nihao   1     p      STARTED       0   208b 192.168.100.110 node01_r1
nihao   1     r      STARTED       0   208b 192.168.100.110 node01_r2
nihao   0     r      STARTED       0   208b 192.168.100.110 node01_r1
nihao   0     p      STARTED       0   208b 192.168.100.110 node01_r2
hello   2     p      STARTED       1  4.4kb 192.168.100.110 node01_r1
hello   1     p      STARTED       1  4.5kb 192.168.100.110 node01_r2
hello   0     p      STARTED       0   208b 192.168.100.110 node01_r1
chong   2     r      STARTED       1  4.3kb 192.168.100.110 node01_r1
chong   2     p      STARTED       1  4.3kb 192.168.100.110 node01_r2
chong   1     p      STARTED       0   208b 192.168.100.110 node01_r1
chong   1     r      STARTED       0   208b 192.168.100.110 node01_r2
chong   0     r      STARTED       0   208b 192.168.100.110 node01_r1
chong   0     p      STARTED       0   208b 192.168.100.110 node01_r2
.kibana 0     p      STARTED      42 58.9kb 192.168.100.110 node01_r1
.kibana 0     r      STARTED      42 74.4kb 192.168.100.110 node01_r2
wefwe   2     r      STARTED       0   208b 192.168.100.110 node01_r1
wefwe   2     p      STARTED       0     0b 192.168.100.110 node01_r2
wefwe   2     r      UNASSIGNED                                            #副本丟失
wefwe   1     p      STARTED       0   208b 192.168.100.110 node01_r1
wefwe   1     r      STARTED       0   208b 192.168.100.110 node01_r2 
wefwe   1     r      UNASSIGNED                                            #副本丟失
wefwe   0     r      STARTED       0   208b 192.168.100.110 node01_r1
wefwe   0     p      STARTED       0   208b 192.168.100.110 node01_r2      
wefwe   0     r      UNASSIGNED                                            #副本丟失

3.3 檢視unsigned 的原因

GET /_cluster/allocation/explain

3.4 檢視叢集中不同節點、不同索引的狀態

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

3.5 cerebro監控工具排查

4、Elasticsearch叢集黃色的原因排查及解決方案

4.1 原因1:Elasticsearch採用預設配置(5分片,1副本),但實際只部署了單節點叢集。

index.number_of_shards:5
index.number_of_replicas:1

解決方案如下:

您可以將副本計數降低到0或將第二個節點新增到群集,以便可以將主分片和副本分片安全地放在不同的節點上。
這樣做以後,如果您的節點崩潰,群集中的另一個節點將擁有該分片的副本。
(1)設定副本數為0,操作如下:

PUT /cs_indexs/_settings
{
  "number_of_replicas": 0
}

進行段合併,提升訪問效率,操作如下:

POST /cs_indexs/_forcemerge?max_num_segments=1 

(2)不再物理擴充套件叢集,將後續所有的索引自動建立的副本設定為 0。

PUT /_template/index_defaults 
{
  "template": "*", 
  "settings": {
  "number_of_replicas": 0
  }
}

4.2 原因2:Elasticsearch分配分片錯誤。

進一步可能的原因:您已經為叢集中的節點數過分分配了副本分片的數量,則分片將保持UNASSIGNED狀態。其錯誤碼為:ALLOCATION_FAILED。
解決方案如下:
reroute:重新路由命令允許手動更改群集中各個分片的分配。
核心操作如下:

POST /_cluster/reroute
  {
  "commands": [
    {
      "allocate_replica": {
        "index": "cs_indexs",
        "shard": 0,   # 重新分配的分片(標記黃色的分片)
        "node": "es-2"
      }
    }
  ]
}

reroute擴充套件使用——可以顯式地將分片從一個節點移動到另一個節點,可以取消分配,
並且可以將未分配的分片顯式分配給特定節點。
舉例使用模板如下:

POST /_cluster/reroute
{
    "commands" : [
        {
            "move" : {
                "index" : "test", "shard" : 0,
                "from_node" : "node1", "to_node" : "node2"
            }
        },
        {
          "allocate_replica" : {
                "index" : "test", "shard" : 1,
                "node" : "node3"
          }
        }
    ]
}

其中:
1)move代表移動;
2)allocate_replica 代表重新分配;
3)cancel 代表取消;

4.3 磁碟使用過載。

原因3:磁碟使用超過設定百分比85%。
cluster.routing.allocation.disk.watermark.low——控制磁碟使用的低水位線。 它預設為85%,這意味著Elasticsearch不會將分片分配給使用磁碟超過85%的節點。 它也可以設定為絕對位元組值(如500mb),以防止Elasticsearch在小於指定的可用空間量時分配分片。
解決方案:

(1)檢視磁碟空間是否超過85%。

[root@localhost home]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/xvda1          1014M  165M  849M  17% /boot
/dev/mapper/cl-home  694G  597G   98G  86% /home

(2)刪除不必要的索引,以釋放更多的空間。

DELETE  cs_indexs

4.4 磁碟路徑許可權問題。

原因4:磁碟路徑許可權問題。安全起見,預設Elasticsearch非root賬戶和啟動。
相關的Elasticsearch資料路徑也是非root許可權。
解決方案:
去資料儲存路徑排查許可權,或者在data的最外層設定:

chown -R elasticsearch:elasticsearch data

Elasticsearch 叢集健康值紅色終極解決方案