本來項目跑到好好的,今天ElasticsearchTemplate添加和修改索引的時候出現報錯,read_only_allow_delete
瀏覽器打開es,查看es索引信息會發現多了一個"read_only_allow_delete":"
true"
原因
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
read_only_allow_delete屬性
此屬性為true時,ES索引只允許讀和刪數據,不允許增和改數據
1. 查看指定索引的設置信息
curl -XGET http://127.0.0.1:9200/blog/_settings?pretty
當索引不能增和改時,通過此命令,可以看到read_only_allow_delete為true
2. 把read_only_allow_delete設置為false
curl -XPUT -H "Content-Type: application/json" http://127.0.0.1:9200/blog/_settings -d '{"index.blocks.read_only_allow_delete": null}'
或者使用復合查詢
"
再次查看es索引信息,發現read_only_allow_delete":"
true"已經沒有了,此時就可以正常修改和添加es數據了