更换ES集群版本后设置密码时遇到的错误及解决方案

在日常的Elasticsearch运维中,升级集群版本是一个常见且必要的操作。本文将分享我在将Elasticsearch从7.10.1版本升级到7.14.2版本过程中,遇到并解决的一个密码设置错误。希望能为遇到类似问题的同仁提供参考。

升级背景

在我们的生产环境中,Elasticsearch集群一直运行在7.10.1版本。为了利用新版本带来的性能优化和安全增强,我们决定将集群升级到7.14.2版本。升级过程中,我们按照文档的指导,逐步完成了版本迁移。然而,在完成升级后,尝试使用elasticsearch-setup-passwords interactive命令设置内置用户密码时,遇到了以下错误:

复制代码
[es@VM-64-10-tencentos /es/elasticsearch-7.14.2]$ bin/elasticsearch-setup-passwords interactive

Failed to authenticate user 'elastic' against http://172.16.10.11:9200/_security/_authenticate?pretty
Possible causes include:
 * The password for the 'elastic' user has already been changed on this cluster
 * Your elasticsearch node is running against a different keystore
   This tool used the keystore at /es/elasticsearch-7.14.2/config/elasticsearch.keystore

ERROR: Failed to verify bootstrap password

问题分析

通过错误信息,我们可以初步判断问题可能出在以下两个方面:

  1. elastic用户的密码已被更改 :这意味着集群中elastic用户的密码可能已经被初始化或修改过。
  2. Keystore路径不一致:工具使用的keystore路径与Elasticsearch进程实际使用的keystore路径不同,导致认证失败。

为了进一步排查问题,我检查了Elasticsearch进程的启动参数,确认工具和进程都指向了相同的keystore路径:

复制代码
[es@VM-64-10-tencentos /es/elasticsearch-7.14.2]$ ps -ef | grep elasticsearch
es       28776     1 37 00:04 pts/2    00:01:34 /es/elasticsearch-7.14.2/kona11.0.9.1.b1/bin/java -Des.path.conf=/es/elasticsearch-7.14.2/config ...

同时,查看了elasticsearch.yml的配置文件,发现以下配置项:

复制代码
path.data: /data/emr/es/data

这让我联想到一个关键点:在升级过程中,path.data指向了与之前版本相同的数据目录 。由于Elasticsearch在启用X-Pack Security后,会在数据目录中生成.security索引来存储安全相关的信息,包括用户密码。如果新版本与旧版本的数据目录相同,旧版本的安全配置可能与新版本不兼容,导致密码设置工具无法正常工作。

解决方案

1. 修改path.data路径

为避免与旧版本的数据目录冲突,可以修改elasticsearch.yml中的path.data路径,使其指向一个全新的目录。例如:

复制代码
path.data: /data/emr/es/data_new

修改后,保存配置文件并重启Elasticsearch集群:

复制代码
./bin/elasticsearch -d

然后再次尝试设置密码:

复制代码
bin/elasticsearch-setup-passwords interactive

2. 清空旧的数据目录

如果确认当前环境是测试环境,且不需要保留旧的数据,可以选择清空旧的数据目录。这将删除所有索引和安全配置,因此务必确保数据已备份或不再需要

执行以下命令备份并清空数据目录:

复制代码
# 备份数据目录
cp -r /data/emr/es/data /data/emr/es/data_backup

# 清空数据目录
rm -rf /data/emr/es/data/*

重启Elasticsearch集群:

复制代码
./bin/elasticsearch -d

然后再次运行密码设置工具:

复制代码
bin/elasticsearch-setup-passwords interactive

此时,Elasticsearch会认为这是一个全新的集群,允许你初始化内置用户(如elastic)的密码。

关键原因

通过上述步骤,我们发现**path.data指向旧版本的数据目录导致旧的安全配置与新版本冲突**,从而导致elasticsearch-setup-passwords工具无法正常设置密码。这是因为旧版本的.security索引中已经存在elastic用户的密码信息,新版本在尝试进行密码设置时,检测到密码已经被更改过,导致认证失败。

总结与建议

在进行Elasticsearch版本升级时,尤其是涉及到不同版本之间的安全功能更新,务必注意以下几点:

  1. 数据目录的兼容性:不同版本的Elasticsearch在数据目录结构和安全配置上可能存在差异。确保升级前阅读官方的升级指南,了解版本间的兼容性和需要迁移的数据配置。

  2. 备份重要数据:在进行任何破坏性操作(如清空数据目录)前,务必备份重要数据,以防数据丢失。

  3. 分阶段升级:如果可能,尽量进行逐步升级,并在每个阶段验证集群的健康状态和功能是否正常。

  4. 配置文件审查 :升级后,仔细检查elasticsearch.yml中的配置项,确保所有配置都符合新版本的要求,并避免配置冲突。

  5. 监控与日志检查:通过监控工具和日志文件,及时发现和排查集群运行中的异常,确保集群的稳定性和安全性。

通过此次升级经历,我深刻认识到在Elasticsearch集群升级过程中,配置管理和数据兼容性的重要性。希望本文的分享能帮助大家在升级过程中少走弯路,顺利完成版本迁移。

相关推荐
摇滚侠3 小时前
ElasticSearch 教程入门到精通,测试工具、倒排索引、索引创建查询删除,笔记6、7、8、9
大数据·笔记·elasticsearch
若水不如远方3 小时前
告别 RestHighLevelClient:Elasticsearch Java 新客户端实战与源码浅析
java·elasticsearch
武子康4 小时前
大数据-177 Elasticsearch 聚合实战:指标聚合 + 桶聚合完整用法与 DSL 解析
大数据·后端·elasticsearch
码农阿豪4 小时前
用 Rust 构建 Git 提交历史可视化工具
git·elasticsearch·rust
玉离骚4 小时前
ElasticSearch 安装教程
大数据·elasticsearch
铭毅天下4 小时前
Elasticsearch 9.X 官方文档大变样了!
大数据·elasticsearch·搜索引擎·全文检索
leijmdas4 小时前
git操作命令
大数据·git·elasticsearch
Adellle5 小时前
windows安装ES(8.14.x版本)
大数据·windows·elasticsearch
摇滚侠5 小时前
ElasticSearch 是什么,ES 是什么?
大数据·elasticsearch·搜索引擎
摇滚侠5 小时前
ElasticSearch 教程入门到精通,条件分页排序查询,多条件范围查询,完全匹配高亮查询,聚合查询,映射关系,笔记13、14、15、16、17
大数据·笔记·elasticsearch