Elastic Stack 5.0升级踩坑记
先说结论,做好测试,谨慎操作。
• ES5简介
这次是个大升级,统一了全家桶版本号,升级了Lucene,发布了对于官方来说非常重要的X-Pack,等等。详见 Elastic Stack 5.0.0 Released、Breaking changes in 5.0、What's new in Elasticsearch 5.0。
关于Elastic Search本体,一些值得关注的:
1. Lucene升级到了6.2,搜索方面会有巨大的性能提升。
2. 优化Indexing过程,性能会更加稳定。
3. 新增Ingest Node,用于数据转换,相当于Elastic Search里内置了一个Logstash。或许有比bulk更好的Indexing性能,有待测试。
• 踩到的坑
1. Copy2.X的elasticsearch.yml到5.0里,大量报错
1)踩了个"node settings must not contain any index level settings",报错提示是所有index配置(例如 index.mapper.dynamic)都需要在ES启动之后通过接口来改。
2)script开头的配置项也没了。
3)一些配置项的名字改了,例如 bootstrap.mlockall 改成了 bootstrap.memory_lock。
建议直接在5.0的elasticsearch.yml上面改配置。
另外,./config/ 里面新增了 jvm.options 和 log4j2.properties,取消了logging.yml。关于内存的配置可以直接在 jvm.options 里面设,不需要折腾环境变量了。
2. 启动报错,提示调高JVM线程数限制
bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解法:
vi /etc/sysctl.conf
vm.max_map_count=262144 #添加这一行
3. 搜索报错,默认Scripting语言从groovy改成了painless
这个坑藏得好深,让我困惑了一段时间(都怪我没有看完What's New就去折腾升级)...后改query的lang字段为painless就过了。
感觉painless的可读性要好一点。之前写Function Score Query的时候发现自己想表达的跟实际出来的结果不一样(也可能是文档的问题)。
4. 搜索报错,部分DSL语言格式变了
发现2.X的query在5.0里跑不通了...
后发现Filter的DSL语言格式改了。
把我坑惨了...
• 关于X-Pack
X-Pack是一套新的扩展。
一直以来,Elastic Search团队提供的付费插件与服务都感觉不痛不痒。新发布的X-Pack把所有付费痛点打包到一起了,包括权限控制、更好的数据可视化系统、经常被提出的报表系统等,我认为是Elastic Search商业化非常重要的一步(另一步是Elastic Cloud)。
X-Pack的License(可注册1年免费License)
由于全家桶都被打包到一起了,安装上更方便,操作上也非常有整体感。
UI彻底重做了一次,没有那么山寨了。
一个问题是,跟Marvel插件一样,每天还是会生产一个很™大的Index,还是得要有个脚本盯着来删。
• 性能对比
1. 同样的机器(硬件、数量)及集群结构(Master Node、Data Node)
2. 同样的索引结构和分片数量
3. 基本一致的查询语句(ES5语法有所变化,所以query没有完全一致)
4. 同样的数据量
5. 同样的流量
ES5集群的 CPU Usage 约为ES2集群的 3/4
ES5集群的 Search Latency 约为ES2集群的 2/3
另外,发现ES5的index/update性能也优于ES2,有待量化评测。
• 总结
由于Lucene升级带来的巨大性能提升,我认为ES5非常值得升级。
但是,
做好测试,谨慎操作!
做好测试,谨慎操作!
做好测试,谨慎操作!
相关文章