Elasticsearch數據不能寫入問題解決方案


報錯起因:

同步數據到es中發生異常,日志報錯寫入索引異常,報錯情況如下

org.elasticsearch.cluster.block.ClusterBlockException: blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];

ElasticSearch進入“只讀”模式,只允許刪除,ES說明文檔中有寫明,當ES數據所在目錄磁盤空間使用率超過90%后,ES將修改為只讀狀態,所以初步判斷是磁盤空間不足導致es自動關閉了索引的寫功能,只能進行讀取或者刪除。

但是服務器排查 df -h

image-20220113133334828

產生原因

根據多方查詢資料可能造成原因如下

1. 內存不足

JVMMemoryPressure 超過92%並持續30分鍾時,ES觸發保護機制,並且阻止寫入操作,以防止集群達到紅色狀態,啟用寫保護后,寫入操作將失敗,並且拋出 ClusterBlockException ,無法創建新索引,並且拋出 IndexCreateBlockException ,當五分鍾內恢復不到88%以下時,將禁用寫保護。

2. 磁盤空間不足

es的默認磁盤水位警戒線是85%,一旦磁盤使用率超過85%,es不會再為該節點分配分片,es還有一個磁盤水位警戒線是90%,超過后,將嘗試將分片重定位到其他節點

解決方案
  1. 磁盤擴容

  2. 刪除無用索引

  3. 將舊索引的副本數調小

  4. 增加數據節點

  5. 手動將 index.blocks.read_only_allow_delete 改成false

我es服務器是內存不足造成得 ,所有索引狀態都是 index.blocks.read_only_allow_delete true

此屬性為true時,ES索引只允許讀和刪數據,不允許增和改數據

  1. 查看指定索引的設置信息

    curl -XGET http://127.0.0.1:9200/index_*/_settings?pretty
    

當索引不能增和改時,通過此命令,可以看到read_only_allow_delete為true

  1. 把read_only_allow_delete設置為false
curl -XPUT -H "Content-Type: application/json" http://127.0.0.1:9200/index_*/_settings -d '{"index.blocks.read_only_allow_delete": null}'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM