背景说明

ES版本 7.1.4

在ES生产环境中增加字段,一直提示Setting index.mapper.dynamic was removed after version 6.0.0错误。但是我只是加一个字段而已啊。

详细错误

curl --request PUT --url http://ca.yorkbbs.elasticsearch:9200/object006_bbs_post/_mapping --header 'content-type: application/json' --data '{"properties": {"property_inWeChat": {"type": "long"}}}'

{
"error": {
"root_cause": [{
"type": "illegal_argument_exception",
"reason": "Setting index.mapper.dynamic was removed after version 6.0.0"
}],
"type": "illegal_argument_exception",
"reason": "Setting index.mapper.dynamic was removed after version 6.0.0"
},
"status": 400
}

产生原因

直接先说原因吧

错误的设置了index.mapper.dynamic属生,导致此问题。

你也可以理解为是es的一个bug,在设置时并没有提醒,可以设置成功,但是设置后修改时,启动时都会判断。

甚至ES启动也会失败,如果ES被更改错误后,再次启动将会失败,导致无法启动。

所以,此错误是非常可怕的。

而且此错误,在当时不一定能发现,可能过了好久,ES出现异常重启时,发现启动不了,这个时候可能连备份都已经没有了。

我发现这个问题时,还算是比较及时的,在错误的设置完index.mapper.dynamic后,第二天偶然间需要在index中增加一个字段。

详细过程

在某一天,我同事发现我们现在生产用的index的字段是自动创建的,在早期的时候都是设置为手动创建的,这样做是为了防止程序出现错误时,导致ES字段爆炸(比如:原来想写入一个字段值,结果把一个对象赋值上去了,结果ES就创建了大量的字段)。所以,我们都会要求把index的字段改为手动创建,当赋值错误时提示错误,或者创建失败。我以前都是用发HTTP请求来完成了,最近一直在用cerebro,了解到里面可以有一个index setting选项,发现里面有一个dynamic的设置,就直接改成flase了。这个操作正式引爆了核弹。

第二天需要在index中增加一个字段。才发现增加不了,增加的API语句也是以前用过N次了,而且在测试环境也可以正常增加,只有生产无法增加。回想了一下最近的操作,想想前一天设置过es的设置。当时本意是想把ES设置为字段不可能自动增加,只能人工增加。

以前呢,我都是用API指令修改,哪天呢,发现公司配置的cerebro集群管理工具,有UI的修改界面,觉得有UI,就直接修改吧,于是感觉一定与此有关。

我用的cerebro版本是0.9.4

设置界面

后来分析可能是cerebro工具版本比较早,早期确实是用的index.mapper.dynamic,但是es6.0.0以后就不用了,但是这个工具呢,并没有修改。设置时仍然设置的是index.mapper.dynamic值,刚好呢,es在设置时也没有校验。

这里觉得ES责任最大,你要不支持,你设置时就提示不支持,不让设置啊。设置时不判断,设置成功了,修改时又不让修改。造成的后果无法修复。

同时,以后慎用第三方工具吧,至少在测试环境先多测试测试。

重新创建了一个新的index,就可以添加成功。

curl --request GET --url http://ca.yorkbbs.elasticsearch:9200/object006_bbs_post

出现错误的原因就在这里,设置的时候没有提示不能设置,设置后再做变更时,提示数据配置文件错误,不允许设置,也无法再修复。

此命令一定要谨慎执行,在6.0.0以上版本执行可能会引发此问题

此命令一定要谨慎执行,在6.0.0以上版本执行可能会引发此问题

此命令一定要谨慎执行,在6.0.0以上版本执行可能会引发此问题

### 此命令一定要谨慎执行,在6.0.0以上版本执行可能会引发此问题
PUT http://127.0.0.1:9200/zpf001/_settings
Content-Type: application/json {
"index": {
"mapper": {
"dynamic": "true"
}
}
} curl --request PUT --url http://127.0.0.1:9200/zpf001/_settings --header 'content-type: application/json' --data '{"index": {"mapper": {"dynamic": "true"}}}'

尝试过的解决办法(都失败了)

由于分析出来原因是因为index setting中错误的设置了dynamic属性,所以解决办法就是删除它(也曾想过改个名字,让ES不认识它),

通过HTTP请求无法把设置删除,现在只要是修改setting的,都会有这样提示,查看了源码,在操作前进行了这个判断。

尝试修改名字,也无效。修改名称后,ES连启动都启动不了了。

在上面位置,可以找到dynamic字段,修改为其他名字,重启无效。ES直接无法启动了。这个时候发现,其实在设置了dynamic后,你的ES就无法启动,因为在启动时,也有上面的版本判断。

坑爹不!

至此,已经过去几天了。仍然没有解决

最后的解决办法

尝试好多办法都无法解决,那就只能重建ES了,还好我们ES的数据可以从DB恢复。

建议

一定要做好备份,比如快照备份,磁盘备份,数据库备份等等。并且在任何操作前,都要做好可以回退的措施,你真的不知道下一秒会发生什么?

正式设置ES字段为手动创建的HTTP请求

### 设置mapping字段手工同步,不自动创建 true 动态添加新的字段—缺省 false忽略新的字段 strict 如果遇到新字段抛出异常
PUT {{esHost}}/object006/_mapping
Content-Type: application/json {
"dynamic": "strict"
}

一个ES设置操作引发的“血案”的更多相关文章

  1. 一个Tomcat配置参数引发的血案

    转载:https://mp.weixin.qq.com/s/3IuTcDCTB3yIovp6o_vuKA 一.现象 有用户反馈访问PC首页偶尔会出现白页情况,也偶尔会收到听云的报警短信 二.监控(听云 ...

  2. jenkins配置findbugs失败---不要随便忽略警告!一个因为文件所有权引发的血案

    一:背景交代 这两天组长让我这边搭一个持续集成环境.梳理了需求后,因为我们的项目都是maven项目,所以我选择了jenkins+外置maven(区别于直接从jenkins里面安装)的方案.(cento ...

  3. mysql参数max_binlog_cache_size设置不当引发的血案

    日常运维中的坑真是防不胜防,不一小心就遇到别人给你挖的坑.最近又遇到经验不足的DBA不知道从哪拷贝的配置文件(据说是当时参加某培训机构视频培训是资料里的模板,真的是误人子弟呀),其中把max_binl ...

  4. 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器

    1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...

  5. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  6. 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  7. 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  8. 一个无锁消息队列引发的血案(四)——月:RingQueue(上) 自旋锁

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  9. Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

随机推荐

  1. rem,px,em最大的区别;

    px:px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.移动端的分辨率很多.所以px不适用移动端em:em的值不固定:其长度继承父级元素的字体大小rem:相对于根元素htm ...

  2. HttpRequest.Path与HttpRequest.PathBase区别

    源自stackoverflow

  3. pycharm——import已存在的库居然失败!

    问题 明明在cmd中可以import的库,放到pycharm中却找不到. 问题根源 找了一圈,最后得到这个结论. 因为pycharm默认就是这样的... 解决 打开设置,找到解释器 点击右边齿轮图标, ...

  4. Spring-AOP动态代理技术(底层代码)

    1.JDK代理:基于接口的动态代理技术 目标对象必须有接口,目标对象有什么方法,目标接口就有什么方法, 运行期间基于接口动态生成代理对象,所以代理对象也就有目标对象同样的方法. 注意:以下代码只是底层 ...

  5. cali1e4a9cee8dc这是什么东西?

    //我们查下k8s node节点,发现很多类似 cali7c620a7a67b 这样的类似网络设备的东西.//这些是什么呢?//k8s集群节点ht10,node网络情况.[root@ht10 cali ...

  6. 帝国CMS 后台登录空白

    编辑/e/config/config.php中 $ecms_config['esafe']['ckfromurl']=0; //是否启用来源地址验证,0为不验证,1为全部验证,2为后台验证,3为前台验 ...

  7. DFS与N皇后问题

    DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索. 它是一种用来遍历或搜索树和图数据结构的算法 注:关于树的一些知识可以去看<树的概念及基本术语>这篇文章 ...

  8. CAS如何解决ABA问题

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. CAS如何解决ABA问题 什么是ABA:在CAS过程中,线程1.线程2分 ...

  9. 攻防世界-MISC:give_you_flag

    这是攻防世界新手练习区的第四题,题目如下: 点击附件一下载,打开后发现是一个gif动图 可以看到动图有一瞬间出现了一个二维码,找一个网站给他分离一下 得到一张不完整的二维码(然后就不知道该怎么办了,菜 ...

  10. Mybatis执行多条SQL

    1:在数据库连接配置文件处,增加如下参数即可:allowMultiQueries=true spring: datasource: url: jdbc:mysql://IP:PORT/数据库名?其他参 ...