欢迎关注个人微信公众号: 小哈学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
}

对商品索引执行如上命令后。让业务组再次同步数据,一切正常了。

六、参考

免费分享 | 面试&学习福利资源

最近在网上发现一个不错的 PDF 资源《Java 核心知识&面试.pdf》分享给大家,不光是面试,学习,你都值得拥有!!!

获取方式: 关注公众号: 小哈学Java, 后台回复资源,既可免费无套路获取资源链接,下面是目录以及部分截图:

重要的事情说两遍,关注公众号: 小哈学Java, 后台回复资源,既可免费无套路获取资源链接 !!!

最新文章

  1. MVC缓存
  2. 【003:switch 不加 break的结果
  3. Oracle 11g服务器安装详细步骤
  4. js中的一个方法怎么将数据主动传给另一个方法
  5. GJM : Unity3D 常用网络框架与实战解析 【笔记】
  6. javascript动态创建script标签,加载完成后调用回调
  7. 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统
  8. html5 canvas 粒子特效
  9. Swift Internal Parameter and External Parameter 外部参数和内部参数
  10. Unity3D研究院编辑器之不影响原有布局拓展Inspector
  11. 到目前为止,Linux下最完整的Samba服务器配置攻略
  12. JSP JS 日期控件的下载、使用及注意事项
  13. js中设置setInterval的注意点
  14. Gradle多项目配置的一个demo
  15. 画地为Mask,随心所欲的高效遮罩组件[Unity]
  16. 3D图片变换
  17. Mybatis事务(一)事务管理方式
  18. C语言编程(多线程)
  19. MYSQL一次千万级连表查询优化(一)
  20. linux之grep 基础

热门文章

  1. pycharm执行代码可以跑,但放到linux跑就报文件找不到
  2. Web前端性能优化——提高页面加载速度
  3. vue04 组件化开发 Vue自动化工具
  4. Mysql命令mysql:连接Mysql数据库
  5. webpack核心概念使用的综合小案例
  6. 关于panda中dataframe的与&amp;运算*(stackoverflow高票答案)
  7. Git使用笔记 (github为例)
  8. C++ 数据结构模板 队列 栈 动态链表 模板 Queue Stack List
  9. 用keil编写的 C51错误 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START
  10. hdu_1061_Rightmost Digit_201311071851