ES通常可以通过滚动升级来避免服务中断。一般情况下小版本升级,和相邻主版本的升级可以通过滚动升级来完成,具体情况需参照官方文档的升级指导。
使用滚动升级的方式升级集群,若进行跨越大版本的升级,可能需要重新索引在旧版本中创建的索引,有时也许需要进行多次滚动升级和重建索引才能升级到我们需要的目标版本。
除了滚动升级,我们还可以使用“集群停机升级”和“跨级群重建索引”的方式直接进行ES跨版本的升级。
升级ES版本,需要同时升级ES相关的官方组件,可以使用官方提供的“交互式升级指南”获得可供参考的升级方案。
交互式升级指南:https://www.elastic.co/cn/upgrade_guide
下表显示了何时可以执行滚动升级,何时需要重新索引或删除旧索引以及何时需要完全重启群集。
补充:升级到7.8(当前最新稳定版本),官方文档给出的建议都是通过一次或多次滚动升级的方式进行升级。
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节点将无法启动。
升级 5.3 到6.8,有3种升级方式:
要升级运行2.x的Elasticsearch集群,有2种方式:
要升级Elasticsearch 1.x集群,有2种方式:
在有保留数据需求的情况下有三种升级方式:
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