Elasticsearch版本升级实践、注意事项

news/2025/2/13 6:11:15/

版本关系

从官方文档看可以发现两个大版本升级需要关注到具体的版本,比如想从 5.x 版本升级到 7.x 版本,就必须先升级到 6.8 版本,再从 6.8 升级到 7.x 版本。

检查是否可以升级

1. 版本号确认

2. 通过API检查是否存在过期的用法

	# ES 6.xGET /_xpack/migration/deprecations?filter_path=index_settings# ES 7.xGET /_migration/deprecations?filter_path=index_settings关注其中的critical的整改项;

3. 可以查看segment信息,检查是什么版本的lucene(也就可以知道ES版本)创建的,例如5.x创建的索引,即使已经升级到6.8版本,想要升级到7.17,依然需要重建索引。

异常

如果出现不兼容的情况,ES节点无法启动。

注意事项

1. 客户端

ES不同版本的客户端,可以说是非常乱了,抛开非官方推荐的client(jest、bboss等),依然有很多不兼容的地方。

这里简单列一些结论:(仅包括 rest-high-level-client)

7.5 的 client 可以访问 6.8 的集群6.8 的 client 可以访问 7.5 的集群6.8.23 的 client 的版本可以访问 7.17.5 的集群7.17.5 的 client 不能访问 6.8.5 集群 ("message": "Elasticsearch exception [type=exception, reason=Content-Type header [application/vnd.elasticsearch+json; compatible-with=7] is not supported]")

2. type

ES 的 type 也是比较尴尬的地方,带有历史债的场景,改动相对不那么平滑。

ES6.8 创建带 type 的 index,直接升级到 7.17,可以通过 带type/_doc 来查询、写入

# 在6版本创建index
PUT zmc
{"mappings": {"properties": {"aa": {"type": "keyword"}}}
}# PUT 一条数据# 升级到7.17# 执行,可以查到结果
GET zmc/type/_search
{}# 执行,可以查到结果
GET zmc/_search
{}# 执行,不可以查到结果
GET zmc/_doc/_search
{}# 可以写入
POST zmc/_doc/aa
{"aa":"111"
}# 可以写入
POST zmc/type/bb
{"aa":"111"
}# 可以查到结果
GET zmc/_doc/bb# 可以查到结果
GET zmc/type/bb

总的来说,7.17会对6.8集群创建的带type的index进行兼容,需要注意读写语句的写法,可以看到上面的测试,建议读写都带上type。(当然,升级完成后type肯定还是要去掉的)

注:7.x/8.x 对_doc不再视为一个默认的type,而且查询中的一个永久的路径。

升级流程

1.API检查是否可以升级,不能则先改造

2.升级ES集群(此时依然使用6.8客户端,兼容访问6.8/7.17集群)

3.重建索引(去掉type)

4.修改客户端代码 & 升级客户端版本到 7.17

注:如果发现是5版本创建的索引,得先重建索引,再升级集群,再重建索引。

参考

官方文档:

1. Reindex before upgrading | Elasticsearch Guide [7.17] | Elastic

2. Rolling upgrades | Elasticsearch Guide [7.17] | Elastic


http://www.ppmy.cn/news/3653.html

相关文章

班级网页制作 HTML个人网页设计 我的班级网站设计与实现 大学生简单班级静态HTML网页设计作品 DIV布局班级网页模板代码 DW学生校园网站制作成品下载

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

建筑建材企业如何高效进行合同签署?数商云B2B系统推动企业合同签约规范化

建筑建材行业作为重要的材料工业,其主要产品包括建筑材料及制品、非金属矿及制品、无机非金属新材料三大门类,现广泛应用于建筑、军工、环保、高新技术产业和人民生活等领域,占国民生产总值的20%左右,但目前建筑建材行…

Python自定义模块的创建与使用

文章目录一、前言二、模块的概述三、自定义模块附:python打包用户自定义模块一、前言 在Python提供了强大的模块支持,主要体现为不仅在Python标准库中包含了大量的模块(称为标准模块),而且还有很多第三方模块&#xf…

JavaWeb语法二:Thread类的基本使用

目录 1.创建线程 1.2:run()和start()方法 1.3:Thread的几个常见属性 2.线程的有关操作 2.1:启动一个线程:start() 2.2:中断一个线程 2.2.1:使用自定义的变量来作为标志位 2.2.2:使用Thr…

mysqldump实战-问题1

使用mysqldump导出数据时,遇到了一个权限问题(之前没报过这个提示) mysqldump: Error: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation when trying to dump tablespaces 查看当前用户的权限: 解决方法&…

SpringBoot热部署方案

几种热部署方案 SpringBoot dev toolHotSwapAgentJRebel阿里的arthas美团的sonic(不公开) IDEA中使用 HotSwap agent 实现热部署 热部署的插件有很多,像市面上比较流行的 JRebel,或者是 Spring DevTools 都可以实现代码的热部署…

木字楠后台管理系统开发(5):Vue登陆界面编写以及与后台联调测试

🎶 文章简介:木字楠后台管理系统开发(5):Vue登陆界面编写以及与后台联调测试 💡 创作目的:为了带大家完整的体验木字楠后台管理系统模版的开发流程 ☀️ 今日天气:愿冷空气冷藏你的烦恼,让快乐永驻。 &…

Nacos架构与原理

Nacos 生态 Nacos 几乎支持所有主流语言, 其中 Java/Golang/Python 已经支持 Nacos 2.0 长链接协议, 能 最大限度发挥 Nacos 性能。 阿里微服务 DNS(DubboNacosSpring-cloud-alibaba/Seata/ Sentinel) 最佳实践, 是 Ja…