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://<es_host>: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://<es_host>:9200/_security/_authenticate?pretty"

4. 清理旧数据

  • 登录成功后,可针对 .security 或其他使用率过高的索引执行数据清理或快照备份
  • 定期排查高水位线警告及索引状态,预防重复发生

总结

  • Elasticsearch 鉴权依赖 .security 索引写入能力
  • 磁盘使用达高水位线时,集群会对所有索引加只读限制,导致鉴权失效
  • 处理思路:扩容磁盘 → 解除只读限制 → 新增/修改用户 → 清理数据
  • 建议定期监控磁盘使用和索引状态,及时预警和扩容,确保鉴权服务正常运转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值