大版本升级,从ES 2.1到ES5.5,两年的数据,每天15GB,5个节点,前后历时一个月左右。
限制条件:
记录一下整个流程。
首先是做决定到底是采用全集群方式升级还是平滑方式升级。
1.关闭shard分配,防止关闭一个节点后ES集群误认为node故障,在剩余节点上执行 shard 恢复,如果数据过多,可能会由于产生大量IO造成ES集群挂起。
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
2.执行同步刷新, 这样集群重新启动后shard恢复更快。
POST _flush/synced
3.关闭集群中所有的ES进程。
4.安装ES5,并且修改配置文件,配置好data路径。不要直接指向2.x的路径,否则一旦升级失败,老数据无法恢复。
5.配置好路径后将2.x的data目录copy到新的路径下。
6.启动ES5 集群,等待集群状态变为green即可
简单,速度快,一步到位
这种升级方式其实就是对所有的数据做一次重新处理然后自己通过http接口重新写入到新的 ES5缓冲节点,然后再将原来的ES2的节点逐台加入的新的集群,之前的数据和配置都清空。
ES2 -> scanner -> redis -> reindex -> ES5
引入Redis作为中间缓冲的考虑:
经过内部讨论决定采用平滑升级的方式。
整个过程涉及到的知识点如下: