ELK5 升级小记
早就听说 ES5 的版本了,一直没有在意,但是直到最近正式版出来之后,才有了要升级现在的 ES 集群的想法,首先便是日志集群(2.3 版本),之前一直有问题:丢日志现象很严重,尤其是 GC 导致的静止现象,然后所用占用的空间非常大。
看 ES5 的介绍,以及网上其他人的经验,ES5 集成了 Lucene 6,性能提高不少,简单来说:** 磁盘空间少一半 => 索引时间少一半 => 查询性能提升 25%。当然了,其它还包括: 索引 merge 次数更少,用的内存更少了,GC 静止出现的次数也会更少 **。
我看了下文档,需要注意的地方很多,也暗自感叹,幸好选择的是日志集群,目前出点事挂掉也不会有很大的影响。看到了 ES 的好多新功能,其中就有 reindex 这个功能,于是我就想到,不要直接升级原来的集群,而是把新集群搭建好,测试完毕之后,用 reindex 的方式把旧数据迁移过来,这样对旧日志系统的影响最小,几乎不会影响到旧有的系统,中间过渡起来也方便。事实上,官方推荐由 1.x 升级到 5.x 的方案就是 reindex。同时呢,还需要注意如果原来的索引很大,持续时间会很长,所以可以用 ES5 的 task 方式去做:
1 | POST _reindex?wait_for_completion=false |
好了,现在直接罗列一些升级过程的中的坑,希望对大家有帮助,不过建议还是先通读一遍官方的注意事项:
ES 升级:
- 去除了 ES_HEAP_SIZE,改用 vm.options 里面的配置,如果不改的话,集群不会启动;
- reindex,需要在 elasticsearch.yml 中指定 reindex.remote.whitelist;
- 很好用的 marvel 插件现在集中在 x-pack 全家桶中了,我暂时没装,似乎还有些坑,需要单独测试下;
- kopf 插件没了,head 也没了,都改成了单独的 app;
所以,kopf 还想用的话,用这个:
1 | docker run -d -p 9000:9000 --restart=always --name cerebro yannart/cerebro |
Logstash 升级:
- 变得非常慢,启动时间少则 20 秒,多则一分钟,比之前慢太多;
- 配置改为 logstash.yml 中的一些参数,当然了,命令行参数也还在;
- workers 的配置去除,改为 logstash.yml 中的 pipleline.output.workers 参数,由此带来的兼容问题比较蛋疼;
- elasticsearch output 改动很大,建议多测试后再上;
Kibana
- Marvel 插件没了,marvel 改成了 x-pack,需要单独安装;
- Sense 变成了 dev-tools 集成在 kibana 中;
- Timelion 插件也没了,直接集成在 kibana 中;
其它
reindex 的接口,似乎没有批量的功能,也就是索引名不变,直接迁移过来的功能,网上工具也几乎没有。不过还好,ES 的 npm 包也更新了,直接自己实现调用即可,下面直接贴出我的迁移代码
1 | ; |
Reference
首发于 Github issues: https://github.com/xizhibei/blog/issues/31 ,欢迎 Star 以及 Watch
本文采用 署名-非商业性使用-相同方式共享(BY-NC-SA)进行许可作者:习之北 (@xizhibei)
原链接:https://blog.xizhibei.me/zh-cn/2016/12/03/elk5-sheng-ji-xiao-ji/