Elasticsearch集群狀態莫名其妙變成紅色,紅色意味着有可能存在主分片未分配。本隨筆記錄了問題的排查和簡單地恢復集群。
查看分配狀態
從分配詳情可以看出的確是有3個分片沒能自動分配,其中包括6號分片的主分片,因為主分片未分配意味着數據不完整,所以集群的狀態是紅色。
獲取分片分配解釋
執行命令
GET /_cluster/allocation/explain
{
"index": "bigtable_v4",
"shard": 6,
"primary": true
}
返回結果
重點:failed to obtain in-memory shard lock
Github大佬們的解釋:
https://github.com/elastic/elasticsearch/issues/23939
兩個重點:
- 出現這個問題的原因是原有分片未正常關閉和清理,所以當分片要重新分配回出問題節點的時候沒有辦法獲得分片鎖。
- 這不會造成分片數據丟失,只需要重新觸發一下分配。
修復
執行修復命令
POST /_cluster/reroute?retry_failed
修復結果
Elasticsearch集群健康狀態忽然變為紅色有可能是內存不足Full GC停頓時間過長或網絡不好導致節點離線。
如果確實是網絡條件不理想可以考慮以下改善:
1.當節點離線延緩分片重新分配
PUT /_all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
2.延緩網絡錯誤檢查時間
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/modules-discovery-zen.html