本文介紹當您遇到磁盤使用率超過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服務,建議開啟磁盤使用率監控報警,及時查收報警短信,提前做好防御措施,詳情請參見配置集群報警。