> 技术文档 > Elasticsearch 存储打满导致无法登录问题排查与解决_elasticsearch磁盘满了

Elasticsearch 存储打满导致无法登录问题排查与解决_elasticsearch磁盘满了


Elasticsearch 存储打满导致无法登录问题排查与解决

问题现象

在日常运维中,遇到了一个看似“账号密码错误”,实则为“存储空间打满”导致的登录异常问题:

  • Elasticsearch 未更改任何密码策略或用户信息
  • Kibana、API 接口等均提示登录失败
  • 使用 curl 命令尝试基本鉴权也失败

原因分析

深入排查后确认,问题根源在于 Elasticsearch 的鉴权信息存储与磁盘水位线限制:

  1. 用户认证信息保存在 .security 索引
  2. 当磁盘使用量达到高水位线(默认 95%)后,Elasticsearch 会对所有索引施加只读限制(read-only block)
  3. .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 索引写入能力
  • 磁盘使用达高水位线时,集群会对所有索引加只读限制,导致鉴权失效
  • 处理思路:扩容磁盘 → 解除只读限制 → 新增/修改用户 → 清理数据
  • 建议定期监控磁盘使用和索引状态,及时预警和扩容,确保鉴权服务正常运转。

手机资讯动态