配置项作用 #
cluster.routing.allocation.disk.watermark.enable_for_single_data_node 配置项用于控制当集群中只有一个数据节点时,是否强制启用磁盘水位线检查。
配置项属性 #
- 配置路径:
cluster.routing.allocation.disk.watermark.enable_for_single_data_node - 数据类型:
boolean - 默认值:
false - 是否可选: 是
- 弃用状态: ⚠️ 将在 v9 版本中移除
配置项详解 #
工作机制 #
集群数据节点数量检测
│
↓
数据节点数量 <= 1?
│
├──────── 是
│ │
│ ├─ enable_for_single_data_node = false(默认)
│ │ ↓
│ │ 跳过磁盘水位线检查
│ │ 允许所有分片分配
│ │ ↓
│ │ Decision: YES(只有一个数据节点)
│ │
│ └─ enable_for_single_data_node = true
│ ↓
│ 严格应用磁盘水位线
│ ↓
│ 根据磁盘使用率决定
│
└──────── 否(多个数据节点)
↓
正常应用磁盘水位线检查
两种模式对比 #
禁用模式(enable_for_single_data_node = false,默认) #
单节点集群(磁盘使用率 95%)
数据节点
│
├── 已有分片: 80GB
├── 磁盘总量: 100GB
└── 使用率: 95% (> 90% 高水位线)
新分片分配请求
│
↓
检测到只有一个数据节点
↓
跳过磁盘水位线检查
↓
✅ 允许分配(即使超过高水位线)
启用模式(enable_for_single_data_node = true) #
单节点集群(磁盘使用率 95%)
数据节点
│
├── 已有分片: 80GB
├── 磁盘总量: 100GB
└── 使用率: 95% (> 90% 高水位线)
新分片分配请求
│
↓
强制应用磁盘水位线检查
↓
❌ 拒绝分配(磁盘使用率超过高水位线)
配置建议 #
单节点开发/测试环境 #
cluster.routing.allocation.disk.watermark.enable_for_single_data_node: false
建议: 保持默认值 false。在单节点部署中,没有其他节点可以分散分片,强制水位线检查会阻碍索引正常工作。
单节点生产环境 #
cluster.routing.allocation.disk.watermark.enable_for_single_data_node: false
建议: 保持默认值 false。即使是生产环境,单节点集群也需要确保数据可写入,应该通过其他方式监控磁盘空间。
多节点生产环境 #
cluster.routing.allocation.disk.watermark.enable_for_single_data_node: true
建议: 可以设置为 true。在多节点集群中,如果某个节点磁盘满,分片可以被分配到其他节点。
代码示例 #
easysearch.yml 配置 #
cluster:
routing:
allocation:
disk:
watermark:
enable_for_single_data_node: false # 默认值
low: 85%
high: 90%
flood_stage: 95%
启用严格检查 #
cluster:
routing:
allocation:
disk:
watermark:
enable_for_single_data_node: true # 强制启用检查
low: 85%
high: 90%
动态更新 #
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.watermark.enable_for_single_data_node": true
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
cluster.routing.allocation.disk.watermark.low | 磁盘低水位线 | 85% |
cluster.routing.allocation.disk.watermark.high | 磁盘高水位线 | 90% |
cluster.routing.allocation.disk.watermark.flood_stage | 磁盘洪水阶段水位线 | 95% |
cluster.routing.allocation.disk.threshold_enabled | 是否启用磁盘阈值检查 | true |
决策逻辑 #
多节点集群 #
数据节点数量 > 1
↓
正常应用磁盘水位线
↓
┌─────────────┬─────────────┬─────────────┐
│ 使用率 < 85% │ 85% ≤ 使用率 < 90% │ 使用率 ≥ 90% │
│ ↓ │ ↓ │ ↓ │
│ 允许分配 │ 不分配新分片 │ 迁移现有分片 │
└─────────────┴─────────────┴─────────────┘
单节点集群(默认配置) #
数据节点数量 = 1
↓
跳过磁盘水位线检查
↓
✅ 始终允许分配
单节点集群(启用检查) #
数据节点数量 = 1
↓
强制应用磁盘水位线
↓
同多节点集群的决策逻辑
版本说明 #
⚠️ 重要提示: 此配置项计划在 Easysearch v9 版本中被移除。
// 代码中的版本检查
assert Version.CURRENT.major < 9 : "remove enable_for_single_data_node in 9";
使用场景 #
推荐保持 false 的场景 #
- 单节点部署: 开发、测试或小型生产环境
- 边缘节点: 只有一个节点的边缘计算场景
- 紧急恢复: 集群故障只剩一个节点时的紧急操作
推荐设置为 true 的场景 #
- 严格要求: 需要严格控制磁盘使用的环境
- 多节点集群: 虽然有多个节点,但想确保即使只剩一个节点也应用限制
- 测试验证: 验证磁盘水位线配置是否正确
注意事项 #
版本兼容: 此配置将在 v9 版本中移除,未来版本行为可能会改变。
单节点可用性: 设置为
false可以确保单节点集群的索引始终可写,但需要通过其他方式监控磁盘空间。磁盘监控: 在单节点环境中,应使用外部监控工具(如 Prometheus、Grafana)监控磁盘使用情况。
动态更新: 此配置支持动态更新,可以在运行时修改。
与阈值启用配合: 只有当
cluster.routing.allocation.disk.threshold_enabled为true时,此配置才会生效。索引不可写警告: 当磁盘超过洪水阶段水位线(95%)时,即使单节点跳过检查,索引也可能变为只读状态。





