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

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

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

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

通過curl GET http://{ESIP}:9200/_cluster/health?level=indices 找出是哪個索引狀態爲 red ,如果索引重要則修復,如果不重要則delete掉,方法見下面 “修復 red 或 yellow 方法實踐”
Elasticsearch6.4集羣報yellow和red狀態問題

集羣 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版本即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章