ES通常可以通过滚动升级来避免服务中断。一般情况下小版本升级,和相邻主版本的升级可以通过滚动升级来完成,具体情况需参照官方文档的升级指导。
使用滚动升级的方式升级集群,若进行跨越大版本的升级,可能需要重新索引在旧版本中创建的索引,有时也许需要进行多次滚动升级和重建索引才能升级到我们需要的目标版本。
除了滚动升级,我们还可以使用“集群停机升级”和“跨级群重建索引”的方式直接进行ES跨版本的升级。
升级ES版本,需要同时升级ES相关的官方组件,可以使用官方提供的“交互式升级指南”获得可供参考的升级方案。
交互式升级指南:https://www.elastic.co/cn/upgrade_guide
升级前的工作:
- 查看新版本ES的重要变更,了解对我们应用程序的影响;
- 查看废弃的功能列表,检查我们是否使用了不推荐使用的功能;
- 如果使用了自定义插件,需要确保在插件兼容新版本;
- 在升级生产集群之前,在测试环境先进行测试验证;
- 升级之前备份数据。集群升级后集群内的数据格式会发生变化,无法回退到之前的版本。如果需要回退到之前的集群版本,需要使用备份数据恢复。
升级方式:
下表显示了何时可以执行滚动升级,何时需要重新索引或删除旧索引以及何时需要完全重启群集。
补充:升级到7.8(当前最新稳定版本),官方文档给出的建议都是通过一次或多次滚动升级的方式进行升级。
ES不同版本间索引的兼容性:
ES主要版本发布顺序为 1.x,2.x, 5.x, 6.x, 7.x 。
高版本ES可以兼容读取上一个主版本ES中创建的索引。更早版本(跨主版本)ES中创建的索引需要
在升级前进行重建索引或删除。例如:ES 6.x可以使用在 ES 5.x中创建的索引,但不能使用在 ES 2.x 或更在版本中创建的索引。ES 5.x 可以使用在 ES 2.x 中创建的索引,但不能使用在 1.x 或更早版本中创建的索引。
这也适用于使用快照和还原备份的索引。如果索引最初是在2.x中创建的,则即使快照是由5.x群集创建的,也无法将其还原到6.x群集。
如果存在不兼容的索引,Elasticsearch节点将无法启动。
ES升级举例:
升级 5.3 到6.8,有3种升级方式:
- 滚动升级:先滚动升级到 5.6,再滚动升级到 6.8;
- 停机升级:集群停机升级,先关闭5.3的所有实例,升级所有5.3实例到6.8,重启集群,恢复数据。
- 重建索引升级:创建一个新的 6.8 集群,使用“远程重建索引”直接将 5.3 的数据导入 6.8集群。
要升级运行2.x的Elasticsearch集群,有2种方式:
- 使用集群停机升级的方式升级到5.6,重新索引2.x中创建的索引为5.6索引格式,滚动升级到6.x。如果您的Elasticsearch 2.x集群包含在2.x之前创建的索引,则在升级到5.6之前必须删除它们或使用reindex将索引格式改为2.x中的格式。
- 创建一个新的6.x群集,使用reindex直接从2.x群集导入索引到6.x集群。
要升级Elasticsearch 1.x集群,有2种方式:
- 执行集群停机升级到Elasticsearch 2.4.x,然后重新索引或删除1.x索引。然后,执行集群停机升级到5.6,然后重新索引或删除2.x索引。最后,执行滚动升级到6.x。
- 创建一个新的6.x群集,使用reindex直接从1.x群集导入索引到6.x集群。
小结:
在有保留数据需求的情况下有三种升级方式:
1.集群停机升级,需停止服务;
2.滚动升级,无须停服务,但可能需要执行多次重建索引(集群内reindex)和滚动升级;
3.新建集群安装高版本ES服务,使用 reindex 直接将低版本集群的数据导入新建集群。这种方式可以直接执行跨越多个版本的集群升级,但需要考虑新建集群的服务器资源、数据跨集群reindex对网络带宽的需求和数据迁移的时间等问题。
前两种升级方式为原地升级,最后一种升级方式为新建集群,进行数据迁移。具体采用哪种方式升级还需考虑硬件资源、索引数据量、对服务连续性的影响等因素。
最后,ES版本更新迭代非常迅速,在增加新功能特性的同时也废弃了很多特性,最大的变化莫过于6.0版本移除了索引对多type的支持,在升级ES集群的同时请进行必要的应用改造以适配更新后的ES。
参考:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/setup-upgrade.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.8/setup-upgrade.html#setup-upgrade
https://www.elastic.co/guide/en/elasticsearch/reference/7.8/setup-upgrade.html#setup-upgrade