本文介紹當您遇到磁碟使用率超過85%,甚至達到100%,導致Elasticsearch叢集或Kibana無法正常提供服務時,採用的排查方式。
重要 免責聲明:本文檔可能包含第三方產品資訊,該資訊僅供參考。阿里雲對第三方產品的效能、可靠性以及操作可能帶來的潛在影響,不進行任何暗示或其他形式的承諾。
問題描述
- 在進行索引請求時,返回類似
index read_only
的報錯。例如FORBIDDEN/12/index read-only / allow delete (api)];]
。 - 叢集處於Red狀態,嚴重情況下存在節點未加入叢集的情況(可通過
GET _cat/nodes?
查看),並且存在未分配的分區(可通過GET _cat/allocation?v
查看)。說明 Red狀態代表部分主分區不可用,可能已經遺失資料。 - 通過Kibana控制台建立管道、註冊Beats時報錯:
internal server error
。 - 通過Elasticsearch控制台的叢集監控頁面,或者登入Kibana控制台進入監控頁面,動態查看近一段時間的叢集負載,磁碟使用率曾達到100%。
問題原因
上述問題是由於磁碟使用率過高導致的。資料節點的磁碟使用率存在以下三個水位線,超過水位線可能會影響Elasticsearch或Kibana服務:
- 超過85%,會導致新的分區無法分配。
- 超過90%,Elasticsearch會嘗試將對應節點中的分區遷移到其他磁碟使用率比較低的資料節點中。
- 超過95%,系統會對Elasticsearch叢集中的每個索引強制設定
read_only_allow_delete
屬性,此時索引將無法寫入資料,只能讀取和刪除對應索引。
解決方案
- 執行以下命令刪除資料。 警告 資料刪除後將無法恢複,請謹慎操作。您也可以選擇保留資料,但需進行磁碟擴容,詳情請參見升配叢集。
curl -u <username>:<password> -XDELETE http://<host>:<port>/<index-name>
<host>
表示Elasticsearch執行個體的公網或內網地址,建議使用前先確認相關白名單是否開啟。- 執行命令後,如果叢集無法響應,建議觸發強制重啟,在重啟階段嘗試執行刪除命令。
- 檢測叢集索引是否依然為read_only狀態,如果是,執行以下命令,將叢集中所有索引的
index.blocks.read_only_allow_delete
屬性設定為null
,使叢集中不再存在read_only狀態的索引。PUT _settings { "index.blocks.read_only_allow_delete": null }
- 檢測叢集是否依然為Red狀態,如果是,可使用
_cat/allocation?v
命令查看叢集中是否存在未分配的分區。 - 如果存在未分配的分區,可執行
GET _cluster/allocation/explain
命令查看未分配分區的原因。如果原因如下圖,請手動執行POST /_cluster/reroute?retry_failed=true
命令。 - 等待分區下發完成後,查看叢集狀態。如果叢集狀態依然為Red,請聯絡阿里雲支援人員工程師解決。
更多資訊
為避免磁碟使用率過高影響Elasticsearch服務,建議開啟磁碟使用率監控警示,及時查收警示簡訊,提前做好防禦措施,詳情請參見配置叢集警示。