Elasticsearch1.7到2.3升级实践总结
概括
简述
升级分为Elasticsearch server升级和Elasticsearch client api升级
为什么要迁移
当前团队内多个业务方公用一套ES集群,容易被影响,重要业务应该独自搭建一套集群
迁移的优势:
- 降低业务耦合性,加强不同业务隔离;
- 丰富的资源提供更好的服务支撑;
为什么选择ES2.3
在1.X系列之上,ES2.X算是开启了又一个重要的里程碑,文档的展示样式也体现了该版本的重要性,当然了这只是冰山一角;

下边是增强说明(下边两幅图说明了同一个观点:更优秀的功能集成在了2.X版本上):


附上地址:https://www.elastic.co/blog/release-we-have 新功能
我们既然决定了迁移,那就一起升级到优秀的版本,2.3.3是当时最新的版本,算是比较稳定的版本,看他最近一次提交是5.17;

迁移的效果如何


上边两个接口的迁移效果
因为上周中间才开始,还在观察期,中间的几个突兀是期间来回切换重启,缓存失效引起,当然,这个效果是ES Server在基本上没怎么调优的情况下的效果,之后会一遍观察,一遍调优,找出适合我们自己的配置;
ES升级方案
升级策略
- 搭建自己业务独立的ES集群(2.3.3)
- API更新换代
配置文件
*以下列表中的参数可支持自动化配置,其余未列出来皆用默认配置(如有不妥,请及时纠偏,尤其是 配置节点类型一列)
| 配置参数 | 功能简介 | 配置节点类型 | 自动化配置 | 建议配置 | 所属模块 |
|---|---|---|---|---|---|
cluster.name |
集群名称 |
|
√ | √ | cluster |
| node.name | 节点名称 |
|
√ | √ |
node |
|
node.master |
是否是master |
|
√ | √ | |
|
node.data |
是否是data |
|
√ | √ | |
|
index.number_of_shards |
索引分片数 |
|
√ | √ |
index |
|
index.number_of_replicas |
索引备份数 |
|
√ | √ | |
|
index.refresh_interval |
refresh时间 |
|
√ | √ | |
|
index.merge.scheduler.max_thread_count |
merge线程数 |
|
√ | Χ | |
|
index.unassigned.node_left.delayed_timeout |
一个node脱离集群后多长时间之外才开始进行一系列的备份操作 |
|
√ | √ | |
|
index.search.slowlog.threshold.query.warn |
query慢日志时间设置 |
|
√ | √ | |
|
index.search.slowlog.threshold.fetch.warn |
fetch慢日志时间设置 |
|
√ | √ | |
|
index.indexing.slowlog.threshold.index.warn |
index慢日志时间设置 |
|
√ | √ | |
|
monitor.jvm.gc.old.warn |
gc时间设置 |
|
√ | √ |
monitor |
|
monitor.jvm.gc.old.info |
|
√ | √ | ||
|
monitor.jvm.gc.young.warn |
|
√ | √ | ||
|
monitor.jvm.gc.young.info |
|
√ | √ | ||
|
script.inline |
是否支持script表达式搜索 |
|
√ | Χ |
script |
|
script.indexed |
|
√ | Χ | ||
|
path.logs |
log日志路径 |
|
√ | Χ |
path |
|
path.data |
存储数据路径 |
|
√ | Χ | |
|
network.host |
对外发布本机ip |
|
Χ | Χ |
network |
|
transport.tcp.port |
通信端口 |
|
√ | Χ | |
|
http.port |
http端口 |
|
√ | Χ | |
|
discovery.zen.ping.multicast.enabled |
是否开启相同集群名称则组成集群 |
|
Χ | Χ |
discovery |
|
discovery.zen.ping.unicast.hosts |
单播机器列表 |
|
√ | Χ | |
|
discovery.zen.minimum_master_nodes |
组成master集群的最小节点数 |
|
√ | Χ | |
|
gateway.recover_after_data_nodes |
full restart 参数设置 |
|
√ | Χ |
gateway |
|
gateway.expected_data_nodes |
|
√ | Χ | ||
|
gateway.expected_master_nodes |
|
√ | Χ | ||
|
gateway.recover_after_master_nodes |
|
√ | Χ | ||
|
gateway.expected_nodes |
|
√ | Χ | ||
|
gateway.recover_after_nodes |
|
√ | Χ | ||
|
gateway.recover_after_time |
|
√ | Χ | ||
|
action.disable_delete_all_indices |
是否允许全部删除 |
|
Χ | Χ |
action |
|
action.destructive_requires_name |
是否允许正则表达式删除 |
|
Χ | Χ | |
|
shield.enabled |
是否支持shield |
|
Χ | Χ | shield |
插件
- head
监控
监控方案:ElasticSearch集群监控报警指标梳理
监控效果:这部分为内部监控
异同
https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-2.3.html
2.0比1.7的变化

其中红色部分是这次迁移过程中遇到需要解决的问题,带箭头的是ES Server变化的相关部分,不带箭头的是代码层面需要变化的部分;
其中,代码改动部分最大的是Query DSL changes;
2.1的变化

search changes:search type的count和scan过期了;
2.2的变化

2.3的变化
比较少,摘一个

如何同步迁移时的新需求
从master分支上上新开一个branch ,每次master增加新功能,上线之后,立马同步到新的branch,时时保证同步性;
迁移流程
- 搭建一套新的ES2.3.3集群;
- 全量写入数据索引,观察ES写入是否正常,修改出现的问题,直至索引写入OK;
- 上线每天全量刷数据到索引的服务,观察两天,索引创建过程及结果正常;
- 此时线上有一套1.7的刷索引服务和读索引服务,还有一套ES2.3刷索引服务,此时ES2.3增量索引也正常进行;
- 将搭建好的ES2.3备份集群上线,收集数据服务接入该备份集群,通过双写的方式保证数据正常;
- 在3、4、5进行期间,在测试环境上部署ES2.3的搜索服务,通过这段时间线下的点击来发现问题,修复直至搜索和1.7结果一致;
- 原有服务4台Server,增加一台Server,发ES2.3API端的分支(该分支请求ES2.3索引),通过流量配置平台将该台server流量调至1/50,通过观察错误日志和监控图表,直至无问题;(此时有问题,通过OCTO的禁用,可以瞬间恢复)
- 继续放开流量,一边放流量一遍观察日志和监控,直到1/5,没问题,然后发新加的3台机器,直至放入1/2流量,继续观察,无问题后,通过服务管理平台禁用原来ES1.7的API端而不是直接下掉服务(这样即使有问题,可以通过服务管理平台的禁用瞬间恢复);PS:这个观察的时间还是蛮长的,几个小时吧
- 观察一段时间没什么问题,随后增加少量代码,实现一键切换的功能,验证、上线,完全上线之后,一键切换到备份集群,没什么问题,再切回来;
- 观察整个周末线上服务的一个运行情况,基本无大碍(有一个GC的问题,已经整理到需要解决的问题里边),然后将数据收集服务里边的一些定时任务迁移到ES2.3的收集服务里边,上线;
- 截止到上周末为止,升级、迁移基本完成,原有集群任务还在跑,考虑再跑这周,下周跑几天,没有问题的话,做一下善后处理,下掉对ES1.7的完全引用,收拾收拾代码,开始ES2.3的业务之旅;
ES集群宕机方案
索引
采用双写的机制,保证当前使用索引和备份索引保持一致;
搜索
采用ZK配置,一键切换使用集群;
Elasticsearch1.7到2.3升级实践总结的更多相关文章
- QQ会员AMS平台PHP7升级实践
作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. QQ会员活动运营平台(AMS ...
- 日请求亿级的 QQ 会员 AMS 平台 PHP7 升级实践
QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之 ...
- 升级到php7相关问题,日请求过亿QQ会员活动平台PHP7升级实践
升级到php7相关问题,日请求过亿QQ会员活动平台PHP7升级实践 日请求过亿:QQ会员活动平台PHP7升级实践http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4 ...
- 日请求亿级的QQ会员AMS平台PHP7升级实践
版权声明:本文由PHP7升级项目组原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/74 来源:腾云阁 https://www ...
- 手机淘宝轻店业务 Serverless 研发模式升级实践
一.前言 随着 Serverless 在业界各云平台落地,阿里内部 Serverless 研发平台.各种研发模式也在业务中逐步落地,如火如荼.在此契机下,淘系团队启动了轻店 Serverless 研发 ...
- 读“日请求亿级的QQ会员AMS平台PHP7升级实践”博客心得笔记
PHP7版本尚未普及,对于前辈们为了性能提升有勇气探索新技术敢于尝螃蟹的精神十分敬佩,倍受鼓舞. PHP7升级面临的风险和挑战 对于一个已经现网在线的大型公共Web服务来说,基础公共软件升级,通常是一 ...
- 经典文摘:饿了么的 PWA 升级实践(结合Vue.js)
自 Vue.js 官方推特第一次公开到现在,我们就一直在进行着将饿了么移动端网站升级为 Progressive Web App 的工作.直到近日在 Google I/O 2017 上登台亮相,才终于算 ...
- Kubernetes 集群无损升级实践 转至元数据结尾
一.背景 活跃的社区和广大的用户群,使 Kubernetes 仍然保持3个月一个版本的高频发布节奏.高频的版本发布带来了更多的新功能落地和 bug 及时修复,但是线上环境业务长期运行,任何变更出错都可 ...
- elasticsearch1.0 升级2.2的数据备份和恢复
近期由于elasticsearch的版本升级,需要研究下elasticsearch的快照(snapshot)和恢复(restore)功能. 先说下背景,目前环境采用的是elasticsearch1 ...
随机推荐
- 在同一台电脑上同时安装Python2和Python3
目前Python的两个版本Python2和Python3同时存在,且这两个版本同时在更新与维护. 到底是选择Python2还是选择Python3,取决于当前要使用的库.框架支持哪个版本. 例如:HTM ...
- Mysql 事件(定时任务)
mysql 创建任务(事件) 1.检查数据库事件是否开启,如果 event_scheduler 等于 NO表示开启 SELECT @@event_scheduler; SHOW VARIABLES L ...
- CKEditor与CKFinder整合 MVC3
今天偶然看到一篇关于 CKEditor与CKFinder整合文章,心想有一段时间没有使用这种东西了.于是乎自己动手亲自体验了一下,本以为简单但在东西编写的过程发现了很多没有遇见毛病. 所以记录一下自己 ...
- Lock VS Monitor
Lock Monitor 多线程操作的时候,为防止死锁,我们经常采用加Lock的方式解决,下面就谈一下Lock的具体运用和Lock可以用什么来替换 首先,看代码: private static o ...
- demo
NGUI demo:http://112.124.104.173/killer/demo/demo.html 网络游戏架构(服务器放在阿里云,有时连接不上可能是服务器没有开) 只是测试框架,美术都是本 ...
- java中Comparable实现对象的比较
/* class A implements Comaprable<A>{ } 那么 A x = new A(); 类关系图 Object o = A; Object Comparable ...
- Cocos2d-x 3.2 学习笔记(七)Scene And Transition
Scene 场景. 是一个抽象的概念,仅被用作Node(节点)的一个子类. Scene (场景)和Node(节点)几乎相同,不同的是Scene的默认锚点在屏幕的中心. 关于场景,不得不提的是场景之间的 ...
- 哈夫曼树(三)之 Java详解
前面分别通过C和C++实现了哈夫曼树,本章给出哈夫曼树的java版本. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载请注明出处:htt ...
- double保持精度,防止小数点后数字的丢失的小方法
一般情况下,输入带小数点的字面值,编译器会把它解析成double 类型. 例如:一个字面值被直接放到代码中,由于带小数点所以,默认值为double类型 输出结果是:1.12345678912345 ...
- 理论到实践,A/B测试不得不直面的4个统计学问题
有放回?无放回? 从总体中随机抽取一个容量为n的样本,当样本容量 n足够大(通常要求n ≥30)时,无论总体是否符合正态分布,样本均值都会趋于正态分布.期望和总体相同,方差为总体的1/n.这即是中心极 ...