更换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集群升级过程中,配置管理和数据兼容性的重要性。希望本文的分享能帮助大家在升级过程中少走弯路,顺利完成版本迁移。

相关推荐
大志哥1237 小时前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
TableRow9 小时前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
醉颜凉13 小时前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
Ysouy13 小时前
Spring Data Elasticsearch 全流程学习教程
java·spring·elasticsearch
沪飘大军13 小时前
goldRush-专门分析黄金的投资理财agent
java·开发语言·elasticsearch
让学习成为一种生活方式14 小时前
samblaster v.0.1.26安装与使用--生信工具096
大数据·elasticsearch·搜索引擎
小马爱打代码15 小时前
Elasticsearch 容器化部署(单机版):从零搭建你的搜索和分析引擎
elasticsearch
西敏寺的乐章15 小时前
排序三阶段:粗排→精排→重排,把业务信号灌进 ES 排序管道
elasticsearch·搜索引擎
小马爱打代码15 小时前
Elasticsearch 集群容器化部署:构建 PB 级搜索与分析平台
大数据·elasticsearch·搜索引擎
二哈赛车手1 天前
新人笔记---idea索引失效问题解决方案
java·笔记·spring·elasticsearch·intellij-idea