Elasticserach 同步索引报错:ElasticSearch ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》资源链接!!
个人网站: https://www.exception.site/essay/elasticsearch-sync-index-read-only-allow-delete
目录
- 一、背景
- 二、题外话
- 三、开始排查
- 四、为什么索引处于只读状态呢?
- 五、如何解决
一、背景
前几天小哈在钉钉群里收到重庆业务线反馈,说是中台数据传输中间件在同步 Mysql 增量数据到 Elasticsearch 总是失败。
二、题外话
你说的这个数据传输和阿里云提供的数据传输DTS是一个东西吗?
不是!上面说的数据传输是小哈所在的中台研发部自主研发的中间件,目的是为了取代各业务线对阿里DTS同步功能的依赖!
目前来说,数据传输还是要依赖于阿里开源 Canal, 或者阿里 DTS,依赖的目的是实现对 Mysql 数据库 binlog 增量订阅。
以上网络架构示例图中,中台数据传输充当一个 binlog 事件消费者的角色,通过自定义规则映射,数据加工,分发并最终同步到目标源 Elasticsearch 中。
三、开始排查
回归正题,出了问题,立马赶紧通过跳板机连上数据传输所在的服务器,开始查看日志:
看到日志中存在大量的 [FORBIDDEN/12/index read-only / allow delete (api)]
错误!!
提示错误也很明显:ES 索引处于只读状态!!在和业务组沟通以后,发现需要同步的目标索引有两个,一个商品索引(充当主表),一个商品属性索引(充当商品从表),从表同步是 ok 的,也就是说商品属性索引非只读状态,写入正常,仅仅是商品索引处于只读状态,最终未能正常同步数据。
四、为什么索引处于只读状态呢?
什么原因导致的索引只读的?小哈开始翻阅 Elasticsearch 官方文档, 原文如下:
Elasticsearch considers the available disk space on a node before deciding whether to allocate new shards to that node or to actively relocate shards away from that node.
Elasticsearch 在决定是否分配新分片给该节点,或对该节点重新定位分片之前,会先判断该节点存储空间是否足够,如果说你的使用磁盘空间已经超过 95%,ES 会自动将索引 index
置为 read-only
状态。
于是,让运维看下 ES 机器的磁盘空间是否足够,运维反馈说:前两天就是因为磁盘不足告警,刚刚扩的容,肯定是够的!
真相大白了!
前两天磁盘空间不足,那个时候,商品索引刚好有写入的操作,由于 ES 的保护机制,将该索引置为了只读状态。
五、如何解决
原因找到了!要如何解决呢?
处于只读状态的索引,只能被查询或者删除。而 ES 还不会自动将索引状态切换回来,就需要我们手动切换了:
PUT /<yourindex>/_settings
{
"index.blocks.read_only_allow_delete": null
}
对商品索引执行如上命令后。让业务组再次同步数据,一切正常了。
六、参考
- https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html
- https://stackoverflow.com/questions/48032661/transporterror403-ucluster-block-exception-ublocked-by-forbidden-12-inde
- https://blog.51cto.com/michaelkang/2164181
- https://www.aityp.com/%E8%A7%A3%E5%86%B3elasticsearch%E7%B4%A2%E5%BC%95%E5%8F%AA%E8%AF%BB/
免费分享 | 面试&学习福利资源
最近在网上发现一个不错的 PDF 资源《Java 核心知识&面试.pdf》分享给大家,不光是面试,学习,你都值得拥有!!!
获取方式: 关注公众号: 小哈学Java, 后台回复资源,既可免费无套路获取资源链接,下面是目录以及部分截图:
重要的事情说两遍,关注公众号: 小哈学Java, 后台回复资源,既可免费无套路获取资源链接 !!!
最新文章
- MVC缓存
- 【003:switch 不加 break的结果
- Oracle 11g服务器安装详细步骤
- js中的一个方法怎么将数据主动传给另一个方法
- GJM : Unity3D 常用网络框架与实战解析 【笔记】
- javascript动态创建script标签,加载完成后调用回调
- 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统
- html5 canvas 粒子特效
- Swift Internal Parameter and External Parameter 外部参数和内部参数
- Unity3D研究院编辑器之不影响原有布局拓展Inspector
- 到目前为止,Linux下最完整的Samba服务器配置攻略
- JSP JS 日期控件的下载、使用及注意事项
- js中设置setInterval的注意点
- Gradle多项目配置的一个demo
- 画地为Mask,随心所欲的高效遮罩组件[Unity]
- 3D图片变换
- Mybatis事务(一)事务管理方式
- C语言编程(多线程)
- MYSQL一次千万级连表查询优化(一)
- linux之grep 基础
热门文章
- pycharm执行代码可以跑,但放到linux跑就报文件找不到
- Web前端性能优化——提高页面加载速度
- vue04 组件化开发 Vue自动化工具
- Mysql命令mysql:连接Mysql数据库
- webpack核心概念使用的综合小案例
- 关于panda中dataframe的与&;运算*(stackoverflow高票答案)
- Git使用笔记 (github为例)
- C++ 数据结构模板 队列 栈 动态链表 模板 Queue Stack List
- 用keil编写的 C51错误 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START
- hdu_1061_Rightmost Digit_201311071851