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

配置项作用 #

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 的场景 #

  • 严格要求: 需要严格控制磁盘使用的环境
  • 多节点集群: 虽然有多个节点,但想确保即使只剩一个节点也应用限制
  • 测试验证: 验证磁盘水位线配置是否正确

注意事项 #

  1. 版本兼容: 此配置将在 v9 版本中移除,未来版本行为可能会改变。

  2. 单节点可用性: 设置为 false 可以确保单节点集群的索引始终可写,但需要通过其他方式监控磁盘空间。

  3. 磁盘监控: 在单节点环境中,应使用外部监控工具(如 Prometheus、Grafana)监控磁盘使用情况。

  4. 动态更新: 此配置支持动态更新,可以在运行时修改。

  5. 与阈值启用配合: 只有当 cluster.routing.allocation.disk.threshold_enabledtrue 时,此配置才会生效。

  6. 索引不可写警告: 当磁盘超过洪水阶段水位线(95%)时,即使单节点跳过检查,索引也可能变为只读状态。