Elasticsearch cannot downgrade a node from version [7.x.x] to version [7.x.x]

2023-10-17 21:40

本文主要是介绍Elasticsearch cannot downgrade a node from version [7.x.x] to version [7.x.x],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 背景和问题分析
      • 1. 最简单方案
      • 2. 复制数据仓库

cannot downgrade a node from version [7.x.x] to version [7.x.x]
Elasticsearch降级实践

背景和问题分析

首先官方是不支持降级的,想要降级必须从快照中恢复,这是最保险的,前提也比较多,成本较高。
但是你做了很小的版本升级,过后又非常想回退到原来的版本,怎么办呢?

注意:我的Elasticsearch是单机模式,集群模式自行研究吧。

以我的操作环境为例:从7.13.4回退到7.11.2。
直接启动7.11.2,报错如下:

cannot downgrade a node from version [7.13.4] to version [7.11.2]

报错原因是启动时会检查,当前服务版本和集群内部状态的版本,源码如下

VSCode中打开该仓库:https://github1s.com/elastic/elasticsearch/blob/HEAD/server/src/main/java/org/elasticsearch/env/NodeMetadata.java

1. 最简单方案

版本做了很小的升级,你也很清楚,降级不会影响业务和程序。
最简单的方法,就是把集群内部状态的版本改下。

集群内部状态是基于lucene的文件系统,修改集群状态,代码如下:

public class Application {static final String NODE_VERSION_KEY = "node_version";//7130499 -> 7110299public static void main(String[] args) {int targetNodeVersion = 7110299;String _state = "/data/elk/elasticsearch-7.11.2/data/nodes/0/_state/";Path path = Paths.get(_state);try (DirectoryReader reader = DirectoryReader.open(new SimpleFSDirectory(path))) {final Map<String, String> userData = reader.getIndexCommit().getUserData();System.out.println(userData.toString());try (IndexWriter indexWriter =createIndexWriter(new SimpleFSDirectory(path), true)) {final Map<String, String> commitData = new HashMap<>(userData);commitData.put(NODE_VERSION_KEY, Integer.toString(targetNodeVersion));indexWriter.setLiveCommitData(commitData.entrySet());indexWriter.commit();}} catch (Exception e) {e.printStackTrace();}}private static IndexWriter createIndexWriter(Directory directory, boolean openExisting) throws IOException {final IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new KeywordAnalyzer());// start empty since we re-write the whole cluster state to ensure it is all using the same format versionindexWriterConfig.setOpenMode(openExisting ? IndexWriterConfig.OpenMode.APPEND : IndexWriterConfig.OpenMode.CREATE);// only commit when specifically instructed, we must not write any intermediate statesindexWriterConfig.setCommitOnClose(false);// most of the data goes into stored fields which are not buffered, so we only really need a tiny bufferindexWriterConfig.setRAMBufferSizeMB(1.0);// merge on the write thread (e.g. while flushing)indexWriterConfig.setMergeScheduler(new SerialMergeScheduler());return new IndexWriter(directory, indexWriterConfig);}
}

2. 复制数据仓库

如果你的数据很少,比如索引、账号、Kibana索引等。重新建设很快,那我建议还是重新建设吧。
如果重建过程非常耗时,成本比较高,并且你有另外一套相同版本的环境,那就好办了。
打包另一个环境的path.data目录,复制到当前环境中,然后重新设置账号信息即可。

# 1. 创建一个管理员账号
bin/elasticsearch-users useradd admin -p 123456 -r superuser# 2. 重置elastic密码
curl --user admin:123456 -XPUT "http://localhost:9200/_security/user/elastic/_password?pretty" -H 'Content-Type: application/json' -d '{"password" : "123456"}'

这篇关于Elasticsearch cannot downgrade a node from version [7.x.x] to version [7.x.x]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228127

相关文章

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

解决java.util.RandomAccessSubList cannot be cast to java.util.ArrayList错误的问题

《解决java.util.RandomAccessSubListcannotbecasttojava.util.ArrayList错误的问题》当你尝试将RandomAccessSubList... 目录Java.util.RandomAccessSubList cannot be cast to java.

Elasticsearch 的索引管理与映射配置实战指南

《Elasticsearch的索引管理与映射配置实战指南》在本文中,我们深入探讨了Elasticsearch中索引与映射的基本概念及其重要性,通过详细的操作示例,我们了解了如何创建、更新和删除索引,... 目录一、索引操作(一)创建索引(二)删除索引(三)关闭索引(四)打开索引(五)索引别名二、映射操作(一

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no