Elasticsearch 存储打满导致无法登录问题排查与解决_elasticsearch磁盘满了
Elasticsearch 存储打满导致无法登录问题排查与解决
问题现象
在日常运维中,遇到了一个看似“账号密码错误”,实则为“存储空间打满”导致的登录异常问题:
- Elasticsearch 未更改任何密码策略或用户信息
- Kibana、API 接口等均提示登录失败
- 使用
curl命令尝试基本鉴权也失败
原因分析
深入排查后确认,问题根源在于 Elasticsearch 的鉴权信息存储与磁盘水位线限制:
- 用户认证信息保存在
.security索引中 - 当磁盘使用量达到高水位线(默认 95%)后,Elasticsearch 会对所有索引施加只读限制(read-only block)
.security索引无法写入,导致新增或更新用户信息时失败,进而登录鉴权失效
日志中会出现类似报错:
index [.security-7] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];
graph LR A[明文密码] --> B[BCrypt哈希计算] B --> C[加盐处理] C --> D[写入.security索引]
处理过程
1. 扩容磁盘空间
- 根据集群所在环境(物理机、多云盘或云盘)扩充可用容量
- 确保扩容后操作系统以及 Elasticsearch 节点均能识别新增空间
2. 解除只读限制
扩容完成并挂载生效后,执行以下命令取消对所有索引的只读限制:
curl -X PUT \"http://:9200/_all/_settings\" -H \'Content-Type: application/json\' -d\'{ \"index.blocks.read_only_allow_delete\": null}\'
该操作会移除因水位线触发的只读标记。
3. 新增或修改用户
使用 Elasticsearch 内置用户管理工具新增超级用户,并验证登录:
# 新增超级用户 esadmin,密码为 test./bin/elasticsearch-users useradd esadmin -p test -r superuser# 使用 esadmin 登录验证curl -u esadmin:test \"http://:9200/_security/_authenticate?pretty\"
4. 清理旧数据
- 登录成功后,可针对
.security或其他使用率过高的索引执行数据清理或快照备份 - 定期排查高水位线警告及索引状态,预防重复发生
总结
- Elasticsearch 鉴权依赖
.security索引写入能力 - 磁盘使用达高水位线时,集群会对所有索引加只读限制,导致鉴权失效
- 处理思路:扩容磁盘 → 解除只读限制 → 新增/修改用户 → 清理数据
- 建议定期监控磁盘使用和索引状态,及时预警和扩容,确保鉴权服务正常运转。


