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

相关推荐
Elasticsearch3 小时前
最好的 LLM 只有 59% 的时间能写出正确的 Elasticsearch ES|QL。以下是另外 41% 出错的原因
elasticsearch
垚垚学技术_聚焦云原生3 小时前
Ansible Role 生产环境标准目录结构与规范化实践
java·elasticsearch·ansible
小林ixn3 小时前
从 MySQL 的 LIKE 到 ES 倒排索引:一次把全文检索和混合检索讲透
sql·elasticsearch·全文检索·agent·关键词
MayBaymax4 小时前
ES 基础总结
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客4 小时前
两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch
大数据·数据库·spring boot·elasticsearch·搜索引擎·全文检索·prometheus
SelectDB技术团队5 小时前
ELK 太占磁盘、ES 总报写入拒绝:从归因到可执行的优化清单
大数据·clickhouse·elk·elasticsearch·全文检索·复杂查询·实时更新
frjc15 小时前
数据库选型:如何从众多数据库中选出最理想的那一个
redis·mysql·clickhouse·elasticsearch
xbgRS1 天前
Elasticsearch的分词器
大数据·elasticsearch·搜索引擎
Wx-bishekaifayuan1 天前
springboot户外登山社交小程序19787-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·django·课程设计
Elasticsearch1 天前
两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch
elasticsearch