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

相关推荐
东华果汁哥10 小时前
【centos8 ES】Elasticsearch linux 龙晰8操作系统安装
linux·elasticsearch·jenkins
weixin_4373982113 小时前
Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作
java·大数据·spring boot·后端·学习·elasticsearch·全文检索
安的列斯凯奇13 小时前
Elasticsearch—索引库操作(增删查改)
大数据·elasticsearch·搜索引擎
淡黄的Cherry13 小时前
ELFK日志采集实战
elasticsearch
sleP4o16 小时前
Git的学习和常见问题
git·学习·elasticsearch
Elastic 中国社区官方博客17 小时前
Elasticsearch:使用 Playground 与你的 PDF 聊天
大数据·人工智能·elasticsearch·搜索引擎·ai·pdf·全文检索
张紫娃19 小时前
Git 的引用规格(refspec)语法
大数据·git·elasticsearch
SRETalk21 小时前
夜莺监控支持 ES 日志告警了
elasticsearch·日志监控·开源监控·夜莺监控·es监控