本文介紹重啟變更報錯的詳細說明、可能原因及解決方案。
報錯說明
當您觸發了Elasticsearch執行個體重啟變更時,系統提示“叢集狀態不健康或存在close索引,不能執行當前操作,建議待叢集狀態穩定或開啟已關閉的索引後再試”。
問題原因及解決方案
當叢集存在以下情況,重啟或變更執行個體時會報出此類錯誤:
- 叢集中存在close狀態的索引。
您可以通過
GET /_cat/indices?v
命令查看索引狀態。如果索引狀態為close,可通過POST /<index_name>/_open
將索引狀態設定為open。 - 叢集處於yellow或red狀態。您可以通過
GET /_cat/health?v
命令查看叢集狀態。常見的異常原因及解決方案如下。常見異常原因 解決方案 shard自動分配,已經達到最大重試次數5次 建議通過 POST /_cluster/reroute?retry_failed=true
命令,重新分配分區。某一索引主副本分區分配到一個節點,對應報錯資訊為:the shard cannot be allocated to the same node on which a copy of the shard already exists 建議將副本設定為0,待叢集正常後再設定為1。 已達到節點最大允許同時分配分區個數的限制 當前節點正在分配shard,請耐心等待。您可以通過 GET _cluster/allocation/explain
命令,查看完整的未分配原因。節點失聯 通過 GET _cat/nodes?v
命令,查看節點是否已脫離叢集。建議對脫離叢集的節點進行重啟。磁碟使用率高 磁碟使用率達到水位線,當前節點磁碟已降到85%以下,建議對節點進行重啟,使診斷迴歸正位。 堆記憶體熔斷 建議限流,並將歷史索引close降低記憶體開銷。 其他 叢集存在主分區未分配,需要關注CPU使用率、堆記憶體使用量情況,結合 GET _cluster/allocation/explain
命令,擷取shard未分配資訊進行分析。 - 叢集狀態正常,但負載過高。常見排查方式、異常原因及解決方案如下。
排查方式 常見異常原因 解決方案 - 查看磁碟使用率監控
GET _cat/allocation
命令GET _cluster/allocation/explain
命令- 查看日誌
磁碟使用率達到85% 磁碟使用率達到85%,影響到分區的建立,建議按照以下方式處理。處理後,可通過查看磁碟監控,判斷磁碟使用率是否降到85%以下。 - 刪除歷史索引資料。
- 擴容磁碟。
- 將索引複本數設定為0。
查看CPU使用率監控、熱線程 CPU使用率達到85% CPU使用率達到85%,影響到叢集的穩定性。需要降低流量或擴容,關注叢集總體讀或寫入QPS監控。 查看堆記憶體監控、日誌、old gc collection count、old gc collecting.ms 堆記憶體達到75%以上 堆記憶體過高,將嚴重影響到降低叢集的穩定性,建議按照以下方式處理: - 降低讀寫量。
- 強制擴容叢集規格。
- 將歷史索引的狀態設定為close,降低記憶體使用量率。
查看load_1m監控 load_1m>CPU核心數 load_1m超過CPU核心數,說明當前伺服器負載大,需要關注叢集總體讀或寫入QPS監控及磁碟吞吐(每秒讀寫大小)監控,及時降低流量或擴容。 說明- 關於監控指標的詳細資料,請參見指標含義與異常處理建議。
- 關於日誌的詳細資料,請參見查詢日誌。