📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

cluster.routing.allocation.disk.watermark.low 配置项用于设置磁盘使用率的低水位线

当一个节点的磁盘使用率超过此阈值时:

  • 不允许在该节点上分配新的分片
  • 已存在的分片可以继续保留在节点上

这是防止磁盘空间不足的第一道防线,在达到高水位线之前就开始保护系统。

配置项属性 #

  • 配置路径: cluster.routing.allocation.disk.watermark.low
  • 数据类型: string(百分比或字节值)
  • 默认值: 85%
  • 是否可选: 是
  • 是否动态: 是(支持动态更新)

配置项详解 #

工作机制 #

磁盘使用率监控

    0% ─────────────────────────────────── 100%
    │                                        │
    │              │                        │
    │           低水位线                     │
    │          (默认 85%)                   │
    │              │                        │
    │              │    高水位线            │
    │              │   (默认 90%)           │
    │              │    │                   │
    ├──────────────┼────┼───────────────────┤
    安全区        警告区  危险区
    │              │    │                   │
    └──────────────┴────┴───────────────────┘

    ↓              ↓    ↓
    正常分配      不分配  迁移分片
                 新分片

三阶段行为 #

阶段 1:安全区(使用率 < 低水位线) #

节点磁盘使用率: 75% (< 85%)

新分片分配请求
    ↓
✅ 允许分配
    ↓
新分片成功分配到此节点

阶段 2:警告区(低水位线 ≤ 使用率 < 高水位线) #

节点磁盘使用率: 87% (85% ≤ 87% < 90%)

新分片分配请求
    ↓
❌ 不允许分配

现有分片
    ↓
✅ 继续保留在节点上(不迁移)

阶段 3:危险区(使用率 ≥ 高水位线) #

节点磁盘使用率: 92% (≥ 90%)

新分片分配请求
    ↓
❌ 不允许分配

现有分片
    ↓
❌ 触发迁移到其他节点

配置建议 #

生产环境(标准) #

cluster.routing.allocation.disk.watermark.low: 85%

建议: 保持默认值 85%。这是与高水位线(90%)配合使用的标准配置。

高磁盘利用率需求 #

cluster.routing.allocation.disk.watermark.low: 90%
cluster.routing.allocation.disk.watermark.high: 95%

建议: 同时提高低水位线和高水位线。当需要最大化磁盘利用率时使用。

保守策略 #

cluster.routing.allocation.disk.watermark.low: 80%
cluster.routing.allocation.disk.watermark.high: 85%

建议: 同时降低低水位线和高水位线。当磁盘空间充裕且更关注安全时使用。

快速增长的索引 #

cluster.routing.allocation.disk.watermark.low: 75%
cluster.routing.allocation.disk.watermark.high: 80%

建议: 设置更保守的水位线。当索引数据增长迅速时,提前触发保护机制。

代码示例 #

easysearch.yml 配置 #

cluster:
  routing:
    allocation:
      disk:
        watermark:
          low: 85%    # 低水位线
          high: 90%   # 高水位线(必须高于低水位线)
          flood_stage: 95%

使用字节值配置 #

cluster:
  routing:
    allocation:
      disk:
        watermark:
          low: 150gb   # 当剩余空间小于150GB时停止分配
          high: 100gb  # 当剩余空间小于100GB时迁移分片

动态更新 #

# 通过 API 动态更新低水位线
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "87%"
  }
}

查看当前配置 #

GET _cluster/settings?flat_settings=true

相关配置 #

配置项作用默认值
cluster.routing.allocation.disk.watermark.high磁盘高水位线90%
cluster.routing.allocation.disk.watermark.flood_stage磁盘洪水阶段水位线95%
cluster.routing.allocation.disk.threshold_enabled是否启用磁盘阈值检查true
cluster.routing.allocation.disk.reroute_interval重路由间隔60s

水位线关系 #

必须满足: 低水位线 < 高水位线 < 洪水水位线

错误示例:
low: 90%, high: 85%  ❌ (低水位线不能高于高水位线)

正确示例:
low: 85%, high: 90%  ✅
low: 80%, high: 90%  ✅
low: 85%, high: 95%  ✅

支持的格式 #

格式类型示例说明
百分比85%, 82.5%基于磁盘总量的百分比
字节值150gb, 500mb绝对字节数
字节值200GB, 1TB大小写均可

分配决策流程 #

新分片分配请求
    ↓
检查节点磁盘使用率
    ↓
┌────────────────────────────────┐
│ 使用率 < 低水位线(85%)        │
│              ↓                 │
│         ✅ 允许分配             │
└────────────────────────────────┘
    ↓
┌────────────────────────────────┐
│ 低水位线 ≤ 使用率 < 高水位线    │
│              ↓                 │
│         ❌ 不允许分配           │
│         (现有分片保留)          │
└────────────────────────────────┘
    ↓
┌────────────────────────────────┐
│ 使用率 ≥ 高水位线(90%)        │
│              ↓                 │
│         ❌ 不允许分配           │
│    (现有分片迁移到其他节点)     │
└────────────────────────────────┘

典型配置组合 #

场景lowhigh说明
标准生产85%90%默认配置
高利用率90%95%最大化磁盘使用
保守策略75%80%提前保护
小磁盘节点80%85%磁盘容量较小时
大磁盘节点90%95%磁盘容量充裕时

注意事项 #

  1. 必须低于高水位线: 配置的低水位线必须低于高水位线,否则配置验证会失败。

  2. 动态更新: 此配置支持动态更新,修改后立即影响分片分配决策。

  3. 字节值一致性: 使用字节值时,确保各节点磁盘大小相近。

  4. 现有分片保护: 超过低水位线后,现有分片不会被迁移,只是阻止新分片分配。

  5. 未分配的主分片: 即使超过低水位线,未分配的主分片仍会被分配到节点上(因为没有其他选择)。

  6. 监控建议: 设置监控在接近低水位线时告警,提前处理磁盘空间问题。

  7. 定期检查: 建议定期检查磁盘使用趋势,避免突然达到水位线。