Elasticsearch中的索引无法插入新的数据,但是可以读取数据和删除数据的解决办法——read_only_allow_delete

本文探讨了Elasticsearch在遭遇内存压力和磁盘空间不足时的写保护机制,包括触发条件、影响及应对策略。介绍了如何通过调整配置、优化索引、增加硬件资源等手段解决ES读写性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象1

  1. 报错:FORBIDDEN/12/index read-only / allow delete (api)

  2. ES只能读和删,不能增和改

现象2

  1. 取出的数据,排序乱了

原因

  1. 内存不足

JVMMemoryPressure 超过92%并持续30分钟时,ES触发保护机制,并且阻止写入操作,以防止集群达到红色状态,启用写保护后,写入操作将失败,并且抛出 ClusterBlockException ,无法创建新索引,并且抛出 IndexCreateBlockException ,当五分钟内恢复不到88%以下时,将禁用写保护。

  1. 磁盘空间不足

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

  1. 把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}'

若觉得对您有所帮助,请帮忙点个赞,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值