【Elasticsearch】磁盘警戒水位线机制

Elasticsearch 需要处理大量数据,因此磁盘空间管理非常重要。要避免磁盘空间耗尽导致集群崩溃,同时磁盘高读写可能导致系统性能问题。此外,访问磁盘是一个 “低效” 的过过程。总之,应尽可能减少磁盘 IO。

1.查看节点磁盘使用量

在 Elasticsearch 中查看节点磁盘使用量的命令主要有以下几种方式。

1.1 查看所有节点磁盘概览(简洁版)

GET _cat/nodes?v&h=name,disk.total,disk.used,disk.avail,disk.used_percent

输出示例:

在这里插入图片描述

  • disk.total:节点磁盘总容量。
  • disk.used:已用磁盘空间。
  • disk.avail:剩余可用空间。
  • disk.used_percent:磁盘使用百分比(关键监控指标)。

1.2 查看详细磁盘信息(含分片分布)

GET _cat/allocation?v

输出示例:

在这里插入图片描述

新增关键字段:

  • disk.indices:Elasticsearch 索引实际占用的磁盘空间(可能小于 disk.used,因包含系统文件)。
  • shards:该节点承载的分片数。

1.3 查看单个索引的磁盘占用

GET _cat/indices?v&h=index,store.size,pri.store.size

在这里插入图片描述

  • store.size:索引主分片+副本分片总大小。
  • pri.store.size:仅主分片大小。

1.4 高级监控(JSON 格式详细数据)

GET _nodes/stats/fs

在这里插入图片描述

返回关键数据:

  • total_in_bytes:磁盘总容量(字节)。
  • free_in_bytes:剩余空间。
  • available_in_bytes:可用空间(考虑系统预留)。

1.5 关键告警建议

  • 警戒阈值
    • 磁盘使用 ≥ 85 % ≥ 85\% 85%:触发清理或扩容。
    • 磁盘使用 ≥ 90 % ≥ 90\% 90%:Elasticsearch 会自动阻止写入(可通过 cluster.routing.allocation.disk.watermark 调整)。
  • 常见处理措施
    • 删除旧索引:DELETE /old_index-*
    • 强制段合并:POST /index/_forcemerge?max_num_segments=1
    • 扩容磁盘或增加节点。

通过以上命令可以全面掌握集群磁盘使用情况,建议定期监控并结合告警系统使用。

2.磁盘警戒水位线机制

磁盘警戒水位线Disk Watermark)是 Elasticsearch 用于防止节点 因磁盘空间不足导致故障 的重要保护机制,它会根据磁盘使用情况自动控制分片分配行为。

2.1 水位线机制的核心原理

当节点磁盘使用量达到特定阈值时,Elasticsearch 会自动触发以下保护措施:

  • 1️⃣ 停止向该节点分配新分片。
  • 2️⃣ 可能将现有分片迁移到其他节点。
  • 3️⃣ 极端情况下会阻止写入操作。

2.2 水位线的三种类型

2.2.1 低水位线(Low Watermark)

  • 作用:早期预警,开始调整分片分配。
  • 默认值 85 % 85\% 85%
  • 触发行为
    • 停止向该节点分配新的分片
    • 但不会主动迁移已存在的分片
  • 配置示例
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.disk.watermark.low": "85%"
      }
    }
    

2.2.2 高水位线(High Watermark)

  • 作用:紧急处理,主动迁移分片。
  • 默认值 90 % 90\% 90%
  • 触发行为
    • 开始将该节点上的分片迁移到其他节点
    • 优先迁移最近最少使用的分片
  • 配置示例
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.disk.watermark.high": "90%"
      }
    }
    

2.2.3 洪水水位线(Flood Stage Watermark)

  • 作用:最后防线,保护节点不崩溃。
  • 默认值 95 % 95\% 95%
  • 触发行为
    • 强制将所有索引设为只读read_only_allow_delete)。
    • 阻止新建索引和文档写入
    • 日志中会出现 blocked by: [FORBIDDEN/12/index read-only / allow delete (api)] 错误
  • 配置示例
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.disk.watermark.flood_stage": "95%"
      }
    }
    

2.3 实际应用场景示例

案例1:预防性维护

// 在数据量大的集群中设置更保守的水位线
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "75%",
    "cluster.routing.allocation.disk.watermark.high": "85%",
    "cluster.routing.allocation.disk.watermark.flood_stage": "90%"
  }
}

案例2:紧急恢复磁盘空间

当节点达到洪水水位线时:

# 1. 先删除部分数据释放空间
DELETE /old_logs-2023-*

# 2. 手动解除只读状态
PUT _all/_settings
{
  "index.blocks.read_only_allow_delete": null
}

2.4 水位线配置注意事项

  • 单位灵活性
    • 百分比: 85 % 85\% 85%
    • 绝对大小: 500 500 500 GB
  • 动态生效:修改后无需重启集群,设置会立即生效。
  • 监控建议
    # 查看节点磁盘使用情况
    GET _cat/nodes?v&h=name,disk.used_percent,disk.avail,disk.total
    
    # 检查是否有索引被阻塞
    GET _all/_settings?include_defaults&filter_path=*.blocks.read_only*
    
  • 特殊场景处理
    • 对于冷数据节点,可以适当调高水位线。
    • 对于热数据节点,建议设置更保守的值。

通过合理配置磁盘水位线,可以有效预防因磁盘空间不足导致的集群故障,是 Elasticsearch 运维中至关重要的保护机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值