--- title: "单数据节点启用磁盘水位线检查配置" date: 2026-03-10 lastmod: 2026-03-10 description: "cluster.routing.allocation.disk.watermark.enable_for_single_data_node 配置项用于控制单数据节点集群是否启用磁盘水位线检查。" tags: ["磁盘分配", "单节点集群", "水位线", "已弃用"] summary: "配置项作用 # 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." --- ## 配置项作用 `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% 高水位线) 新分片分配请求 │ ↓ 强制应用磁盘水位线检查 ↓ ❌ 拒绝分配(磁盘使用率超过高水位线) ``` ## 配置建议 ## 单节点开发/测试环境 ```yaml cluster.routing.allocation.disk.watermark.enable_for_single_data_node: false ``` **建议**: 保持默认值 `false`。在单节点部署中,没有其他节点可以分散分片,强制水位线检查会阻碍索引正常工作。 ## 单节点生产环境 ```yaml cluster.routing.allocation.disk.watermark.enable_for_single_data_node: false ``` **建议**: 保持默认值 `false`。即使是生产环境,单节点集群也需要确保数据可写入,应该通过其他方式监控磁盘空间。 ## 多节点生产环境 ```yaml cluster.routing.allocation.disk.watermark.enable_for_single_data_node: true ``` **建议**: 可以设置为 `true`。在多节点集群中,如果某个节点磁盘满,分片可以被分配到其他节点。 ## 代码示例 ## easysearch.yml 配置 ```yaml cluster: routing: allocation: disk: watermark: enable_for_single_data_node: false # 默认值 low: 85% high: 90% flood_stage: 95% ``` ## 启用严格检查 ```yaml cluster: routing: allocation: disk: watermark: enable_for_single_data_node: true # 强制启用检查 low: 85% high: 90% ``` ## 动态更新 ```bash 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 版本中被移除。 ```java // 代码中的版本检查 assert Version.CURRENT.major < 9 : "remove enable_for_single_data_node in 9"; ``` ## 使用场景 ## 推荐保持 false 的场景 - **单节点部署**: 开发、测试或小型生产环境 - **边缘节点**: 只有一个节点的边缘计算场景 - **紧急恢复**: 集群故障只剩一个节点时的紧急操作 ## 推荐设置为 true 的场景 - **严格要求**: 需要严格控制磁盘使用的环境 - **多节点集群**: 虽然有多个节点,但想确保即使只剩一个节点也应用限制 - **测试验证**: 验证磁盘水位线配置是否正确 ## 注意事项 1. **版本兼容**: 此配置将在 v9 版本中移除,未来版本行为可能会改变。 2. **单节点可用性**: 设置为 `false` 可以确保单节点集群的索引始终可写,但需要通过其他方式监控磁盘空间。 3. **磁盘监控**: 在单节点环境中,应使用外部监控工具(如 Prometheus、Grafana)监控磁盘使用情况。 4. **动态更新**: 此配置支持动态更新,可以在运行时修改。 5. **与阈值启用配合**: 只有当 `cluster.routing.allocation.disk.threshold_enabled` 为 `true` 时,此配置才会生效。 6. **索引不可写警告**: 当磁盘超过洪水阶段水位线(95%)时,即使单节点跳过检查,索引也可能变为只读状态。