【es】解决es报错failed to authenticate user [elastic]
1.背景
某天使用接口查询es数据时出现报错,没有返回数据。想到是测试环境的es因为没内存又挂了,于是上服务器重启服务。
但是重启后等待一段时间再次查询es,还是同样报错,显示连接拒接。于是lsof -i:9200查看端口,端口没起来。
查看日志,显示
org.elasticsearch.action.UnavailableShardsException: at least one primary shard for the index [.security-7] is unavailable"
failed to authenticate user [elastic]
2.分析
索引.security-7因为没有分片成功,索引不可用,无法对elastic用户进行鉴权,进而导致服务不可用。
3.解决方案
- 新建用户,删除.security-7相关索引,重新设置elastic用户密码
- 新建用户,备份.security-7相关索引快照,恢复索引。
方案一简单快捷,但是会导致原来设置的鉴权用户信息丢失。方案二则最大程度恢复原来的环境。
因为是测试环境,于是采用方案一进行处理。
4.操作步骤
4.1 创建restore_user用户
bash
./bin/elasticsearch-users useradd restore_user -p xxxxx -r superuser
这个命令用于创建一个名为restore_user的Elasticsearch用户。
-p xxxxx 指定了用户的密码,实际应用中需要将 xxxxx 替换为实际的密码。
-r superuser 指定了用户角色为超级用户,即具有系统的最高权限。
4.2 删除.security相关索引
bash
curl -X DELETE "127.0.0.1:9200/.security-*" -u restore_user
通过curl命令发送HTTP请求,使用DELETE方法删除Elasticsearch中以.security-*开头的所有索引。
-u restore_user 表示使用之前创建的 restore_user 用户进行身份验证。
4.3重置用户密码
bash
./bin/elasticsearch-setup-passwords interactive
这个命令用于交互式地设置Elasticsearch的密码。
执行后系统会提示你输入各个内置用户的密码,包括 elastic、apm_system、kibana 等,以确保这些账户的密码得到设置。
5.备注
方案二没有尝试,如果有成功操作了的勇士,请反馈一下效果给我,谢谢~