Elastic Stack 5.0升级踩坑记

2020-05-29 00:00:00 集群 报错 配置 升级 性能
27号收到了官方发的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非常值得升级。

但是,

做好测试,谨慎操作!

做好测试,谨慎操作!

做好测试,谨慎操作!

相关文章