配置项作用 #
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%) │
│ ↓ │
│ ❌ 不允许分配 │
│ (现有分片迁移到其他节点) │
└────────────────────────────────┘
典型配置组合 #
| 场景 | low | high | 说明 |
|---|---|---|---|
| 标准生产 | 85% | 90% | 默认配置 |
| 高利用率 | 90% | 95% | 最大化磁盘使用 |
| 保守策略 | 75% | 80% | 提前保护 |
| 小磁盘节点 | 80% | 85% | 磁盘容量较小时 |
| 大磁盘节点 | 90% | 95% | 磁盘容量充裕时 |
注意事项 #
必须低于高水位线: 配置的低水位线必须低于高水位线,否则配置验证会失败。
动态更新: 此配置支持动态更新,修改后立即影响分片分配决策。
字节值一致性: 使用字节值时,确保各节点磁盘大小相近。
现有分片保护: 超过低水位线后,现有分片不会被迁移,只是阻止新分片分配。
未分配的主分片: 即使超过低水位线,未分配的主分片仍会被分配到节点上(因为没有其他选择)。
监控建议: 设置监控在接近低水位线时告警,提前处理磁盘空间问题。
定期检查: 建议定期检查磁盘使用趋势,避免突然达到水位线。





