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

配置项作用 #

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

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

  • 不允许在该节点上分配新的分片
  • 现有的分片会被迁移到其他节点

这是防止磁盘空间被完全占用的关键保护机制。

配置项属性 #

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

配置项详解 #

工作机制 #

磁盘使用率监控

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

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

决策逻辑 #

场景 1:节点已超过高水位线 #

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

新分片分配请求
    ↓
❌ 拒绝分配

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

场景 2:分配会导致超过高水位线 #

节点当前使用率: 88%
新分片大小: 3GB
节点可用空间: 2.4GB

分配后预期使用率: 91% (> 90%)

新分片分配请求
    ↓
❌ 拒绝分配(会导致超过高水位线)

场景 3:节点在高水位线以下 #

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

新分片分配请求
    ↓
✅ 允许分配

配置建议 #

生产环境(标准) #

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

建议: 保持默认值 90%。这是经过验证的标准配置,平衡了磁盘利用率和安全性。

高磁盘利用率需求 #

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

建议: 可以提高到 93%-95%。当需要最大化磁盘利用率时使用,但需要更密切的监控。

保守策略 #

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

建议: 降低到 82%-85%。当磁盘空间充裕且更关注安全时使用。

配合低水位线 #

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

代码示例 #

easysearch.yml 配置 #

cluster:
  routing:
    allocation:
      disk:
        watermark:
          high: 90%
          low: 85%
          flood_stage: 95%

使用字节值配置 #

cluster:
  routing:
    allocation:
      disk:
        watermark:
          high: 100gb   # 当剩余空间小于100GB时触发
          low: 150gb

混合配置 #

cluster:
  routing:
    allocation:
      disk:
        watermark:
          high: 90%     # 使用百分比
          low: 500mb    # 使用字节值(不推荐混合使用)

动态更新 #

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

相关配置 #

配置项作用默认值
cluster.routing.allocation.disk.watermark.low磁盘低水位线85%
cluster.routing.allocation.disk.watermark.flood_stage磁盘洪水阶段水位线95%
cluster.routing.allocation.disk.threshold_enabled是否启用磁盘阈值检查true

水位线关系 #

低水位线 < 高水位线 < 洪水水位线
   85%   <    90%     <     95%

配置时必须满足这个顺序,否则会报错

支持的格式 #

格式类型示例说明
百分比90%, 85.5%基于磁盘总量的百分比
字节值100gb, 500mb绝对字节数
字节值50GB, 20TB大小写均可

行为对比 #

磁盘使用率低于低水位线低水位线到高水位线超过高水位线
新分片分配✅ 允许❌ 不允许❌ 不允许
现有分片✅ 保留✅ 保留❌ 迁移

注意事项 #

  1. 必须高于低水位线: 配置的高水位线必须高于低水位线,否则无法生效。

  2. 动态更新: 此配置支持动态更新,修改后立即生效。

  3. 字节值限制: 使用字节值时,确保各节点磁盘大小相近,否则行为不一致。

  4. 分片迁移成本: 超过高水位线后触发分片迁移会消耗网络和IO资源。

  5. 监控建议: 建议设置监控,在接近高水位线时提前告警。

  6. 洪水阶段: 当超过洪水阶段水位线(默认95%)时,所有索引的写入操作将被阻止。

  7. 单节点集群: 在单节点集群中,如果 enable_for_single_data_node 为 false,此配置可能不生效。