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

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

ImportError: cannot import name ‘print_log‘ from ‘logging‘

mmcv升级到2.+后删除了很多 解决 查FAQ文档,找到 添加到mmcv.utils下即可

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso