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

配置项作用 #

cluster.routing.allocation.disk.reroute_interval 配置项用于控制磁盘阈值监控器触发重路由(reroute)操作的最小间隔时间。

当节点磁盘使用率超过高水位线或从低水位线恢复时,系统会触发分片重路由。此配置确保重路由操作不会过于频繁,避免系统不稳定。

配置项属性 #

  • 配置路径: cluster.routing.allocation.disk.reroute_interval
  • 数据类型: TimeValue(时间值)
  • 默认值: 60s(60秒)
  • 是否可选: 是
  • 是否动态: 是(支持动态更新)

配置项详解 #

工作机制 #

时间线
    │
    │  检测到磁盘超过高水位线
    ↓
    ├─────────────────────→ 触发重路由
    │
    │  (等待 reroute_interval)
    │
    │  再次检测到超过高水位线
    ↓
    ├─────────────────────→ 跳过(间隔未到)
    │                       记录调试日志
    │
    │  (继续等待)
    │
    │  距离上次重路由已超过 60 秒
    ↓
    └─────────────────────→ 触发新的重路由

触发场景 #

重路由会在以下两种情况下触发:

  1. 超过高水位线: 节点磁盘使用率超过配置的高水位线(默认 90%)
  2. 恢复到低水位线下: 节点从高水位线恢复到低水位线(默认 85%)以下

间隔保护机制 #

每次重路由后
    │
    ↓
设置 lastRerouteTimestamp = 当前时间
    │
    ↓
下次检测时检查
    │
    ├──────── 如果 (当前时间 - lastRerouteTimestamp) >= reroute_interval
    │                  ↓
    │             允许触发重路由
    │
    └──────── 如果 (当前时间 - lastRerouteTimestamp) < reroute_interval
                       ↓
                  跳过,记录调试日志

配置建议 #

生产环境(标准) #

cluster.routing.allocation.disk.reroute_interval: 60s

建议: 保持默认值 60s。这是经过验证的合理间隔,平衡了响应速度和系统稳定性。

磁盘压力大的环境 #

cluster.routing.allocation.disk.reroute_interval: 30s

建议: 减少到 30s-45s。当磁盘使用率增长迅速时,需要更频繁地触发重路由以快速释放空间。

稳定环境 #

cluster.routing.allocation.disk.reroute_interval: 120s

建议: 增加到 90s-120s。当磁盘使用率变化缓慢时,可以延长间隔以减少集群元数据更新频率。

小型集群 #

cluster.routing.allocation.disk.reroute_interval: 90s

建议: 增加到 90s。小型集群中重路由操作影响相对较大,适当延长间隔可以减少对集群的影响。

代码示例 #

easysearch.yml 配置 #

cluster:
  routing:
    allocation:
      disk:
        reroute_interval: 60s
        watermark:
          low: 85%
          high: 90%

动态更新配置 #

# 通过 API 动态更新重路由间隔
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.reroute_interval": "45s"
  }
}

快速响应配置 #

cluster:
  routing:
    allocation:
      disk:
        reroute_interval: 30s  # 更快响应磁盘问题
        watermark:
          low: 80%
          high: 85%

相关配置 #

配置项作用默认值
cluster.routing.allocation.disk.watermark.low磁盘低水位线85%
cluster.routing.allocation.disk.watermark.high磁盘高水位线90%
cluster.routing.allocation.disk.threshold_enabled是否启用磁盘阈值检查true

配置配合 #

磁盘使用率超过高水位线
    ↓
触发重路由(设置 lastRerouteTimestamp)
    ↓
等待 reroute_interval
    ↓
如果仍超过高水位线 → 再次触发重路由
如果已低于低水位线 → 触发恢复重路由

间隔设置指南 #

环境推荐间隔说明
标准60s默认值,适合大多数场景
磁盘压力大30-45s快速响应,防止磁盘满
磁盘稳定90-120s减少不必要的重路由
小集群90s减少对集群的影响

性能与稳定性权衡 #

reroute_interval 设置优点缺点
较短(30s)快速响应磁盘问题频繁重路由可能影响集群稳定性
中等(60s)平衡响应速度和稳定性标准设置
较长(120s)减少集群元数据更新频率磁盘问题响应较慢

调试日志 #

当重路由因间隔未到而被跳过时,会记录调试日志:

[DEBUG] [disk-throttle] skipping reroute as reroute interval (60s) has not elapsed since last reroute

可以通过设置日志级别为 DEBUG 来查看这些信息。

注意事项 #

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

  2. 频率控制: 重路由操作会更新集群状态,过于频繁会影响集群性能。

  3. 与水位线配合: 此配置与磁盘水位线配置协同工作,共同控制分片迁移行为。

  4. 监控建议: 监控磁盘使用率和重路由事件频率,根据实际情况调整间隔。

  5. 初始触发: 首次检测到超过高水位线时会立即触发重路由,不受此间隔限制。

  6. 恢复场景: 当节点从高水位线恢复到低水位线以下时,也会检查此间隔。