1. 程式人生 > >Elasticsearch6.4集群報yellow和red狀態問題

Elasticsearch6.4集群報yellow和red狀態問題

就是 sha 處理 rds rep cat 分片 img 常見

集群非green狀態都是非健康狀態,是需要處理的

集群 red 狀態
原因: 表示所有的主分片都未必健康可用,一般是由於某個索引的主分片為 unassigned 狀態引起的
處理方法: 找出分片為 unassigned 狀態的索引,手工分配即可。

官方文檔的詳細說明請添加鏈接描述

通過curl GET http://{ESIP}:9200/_cluster/health?level=indices 找出是哪個索引狀態為 red ,如果索引重要則修復,如果不重要則delete掉,方法見下面 “修復 red 或 yellow 方法實踐”
技術分享圖片

集群 yellow 狀態
原因: 表示所有主分片健康可用,但副片都未必可用,最常見的情景是單節點時,主分片和副本不能在同一個節點上,所以副本就是未分配unassigned

處理方法: 過濾查看所有未分配索引的方式, curl -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED結果,第一列表示索引名,第二列表示分片編號,第三列p是主分片,r是副本

`curl -s "http://{ESIP}:9200/_cat/shards" | grep UNASSIGNED

eslog1 3 p UNASSIGNED
eslog1 3 r UNASSIGNED
eslog1 1 p UNASSIGNED
eslog1 1 r UNASSIGNED`

修復 red 或 yellow 方法實踐
知道哪個索引的哪個分片就開始手動修復,通過reroute的allocate分配

curl -XPOST ‘{ESIP}:9200/_cluster/reroute‘ -d ‘{
    "commands" : [ {
          "allocate" : {
              "index" : "eslog1",     --索引名
              "shard" : 4,
              "node" : "es1",           --分配的節點名
              "allow_primary" : true
          }
        }
    ]
}‘

分配副本時必須要帶參數"allow_primary" : true, 不然會報錯
當集群中es版本不同時,如果這個未分配的分片是高版本生成的,不能分配到低版本節點上,反過來低版本的分片可以分配給高版本,如果遇到了,只要升級低版本節點的ES版本即可

Elasticsearch6.4集群報yellow和red狀態問題