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

配置项作用 #

monitor.fs.health.refresh_interval 配置项用于控制文件系统健康检查的刷新间隔时间

FsHealthService 会按照此间隔定期检查文件系统的健康状况,通过在每个数据路径上创建临时文件来验证文件系统的写入能力。

配置项属性 #

  • 配置路径: monitor.fs.health.refresh_interval
  • 数据类型: TimeValue(时间值)
  • 默认值: 120s(120秒,2分钟)
  • 最小值: 1ms(1毫秒)
  • 最大值: 无明确限制
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 否(需要重启节点生效)

配置项详解 #

工作机制 #

定时健康检查

scheduleWithFixedDelay 策略:

上次检查完成
    │
    ↓ 等待 refresh_interval
    │
    ↓
触发本次检查
    │
    ├── 创建临时文件
    ├── 写入数据
    ├── fsync 同步
    ├── 删除临时文件
    └── 记录结果
    │
    ↓ 检查完成
    ↓
等待 refresh_interval
    │
    ↓ (循环)


示例 (refresh_interval = 120s):

00:00 ──→ 检查 1 开始
00:00 ──→ 检查 1 完成 (耗时 5ms)
00:00 ──→ 等待 120s
02:00 ──→ 检查 2 开始
02:00 ──→ 检查 2 完成 (耗时 8ms)
02:00 ──→ 等待 120s
04:00 ──→ 检查 3 开始
...

检查操作详解 #

单次健康检查流程

1. 遍历所有数据路径
   │
   ├── path1: /data1/easysearch
   ├── path2: /data2/easysearch
   └── path3: /data3/easysearch


2. 对每个路径执行检查
   │
   ├── 创建: /data1/easysearch/.es_temp_file
   ├── 写入: UUID 数据
   ├── fsync: 确保写入磁盘
   ├── 删除: 临时文件
   └── 记录: 耗时


3. 判断健康状态
   │
   ├── 全部成功 → HEALTHY ✅
   ├── 部分失败 → UNHEALTHY ❌
   └── 记录失败路径


4. 慢路径检测
   │
   ├── 耗时 > threshold
   └── 记录警告日志

时间间隔选择 #

不同间隔的检查频率

refresh_interval = 30s:
├── 每小时检查: 120 次
├── 发现延迟: 最多 30 秒
├── IO 开销: 高
└── 适合: 高可用环境


refresh_interval = 120s (默认):
├── 每小时检查: 30 次
├── 发现延迟: 最多 2 分钟
├── IO 开销: 低 ✅
└── 适合: 生产环境


refresh_interval = 600s (10 分钟):
├── 每小时检查: 6 次
├── 发现延迟: 最多 10 分钟
├── IO 开销: 很低
└── 适合: 低频监控


refresh_interval = 3600s (1 小时):
├── 每小时检查: 1 次
├── 发现延迟: 最多 1 小时
├── IO 开销: 极低
└── 适合: 长期监控

配置建议 #

生产环境(默认) #

monitor:
  fs:
    health:
      refresh_interval: 120s  # 默认值

建议: 保持默认值 120s。平衡监控频率和性能。

高可用环境 #

monitor:
  fs:
    health:
      refresh_interval: 30s  # 更频繁检查

建议: 设置为 30-60s。需要快速发现问题时使用。

低频监控 #

monitor:
  fs:
    health:
      refresh_interval: 600s  # 10 分钟

建议: 设置为 600-1800s。降低检查频率时使用。

高性能存储 #

monitor:
  fs:
    health:
      refresh_interval: 60s
      slow_path_logging_threshold: 2s

建议: 降低间隔,同时调整慢路径阈值。

代码示例 #

easysearch.yml 基础配置 #

monitor:
  fs:
    health:
      enabled: true
      refresh_interval: 120s

高可用配置 #

monitor:
  fs:
    health:
      enabled: true
      refresh_interval: 30s
      slow_path_logging_threshold: 3s

低频监控配置 #

monitor:
  fs:
    health:
      enabled: true
      refresh_interval: 10m
      slow_path_logging_threshold: 10s

禁用健康检查 #

monitor:
  fs:
    health:
      enabled: false

相关配置 #

配置项作用默认值
monitor.fs.health.enabled是否启用健康检查true
monitor.fs.health.refresh_interval检查间隔120s
monitor.fs.health.slow_path_logging_threshold慢路径日志阈值5s

性能影响分析 #

refresh_interval 设置优点缺点
30s快速发现问题IO 开销较高
60s较快发现问题IO 开销适中
120s(默认)平衡频率和开销标准设置
600s低 IO 开销发现延迟大

IO 开销对比 #

假设每次检查耗时 10ms

refresh_interval = 30s:
每小时检查: 3600 / 30 = 120 次
每小时开销: 120 × 10ms = 1.2 秒
占用率: 1.2 / 3600 = 0.033% ✅


refresh_interval = 120s (默认):
每小时检查: 3600 / 120 = 30 次
每小时开销: 30 × 10ms = 0.3 秒
占用率: 0.3 / 3600 = 0.008% ✅


refresh_interval = 600s:
每小时检查: 3600 / 600 = 6 次
每小时开销: 6 × 10ms = 0.06 秒
占用率: 0.06 / 3600 = 0.002% ✅

使用场景 #

推荐使用默认值的场景 #

  • 生产环境: 标准的生产运行环境
  • 平衡需求: 平衡监控及时性和性能
  • 常规存储: 使用稳定的存储设备

推荐增加检查频率的场景 #

  • 高可用要求: 需要快速发现问题
  • 关键业务: 数据极其重要
  • 不稳定存储: 存储设备不够稳定
  • 故障预警: 希望尽早发现故障

推荐减少检查频率的场景 #

  • 性能敏感: 对 IO 性能敏感
  • 稳定存储: 存储非常稳定可靠
  • 低频监控: 不需要频繁检查
  • 资源受限: 系统资源紧张

与其他配置的配合 #

配置组合建议

高可用配置:
enabled: true
refresh_interval: 30s
slow_path_logging_threshold: 2s
└── 快速发现,严格监控


标准配置:
enabled: true
refresh_interval: 120s
slow_path_logging_threshold: 5s
└── 平衡设置


低频配置:
enabled: true
refresh_interval: 600s
slow_path_logging_threshold: 10s
└── 降低开销,长期监控


禁用配置:
enabled: false
└── 完全禁用

发现延迟分析 #

故障发现延迟

refresh_interval = 30s:
故障发生在: 00:00
下次检查: 00:00 ~ 00:30
发现延迟: 最多 30 秒 ✅


refresh_interval = 120s (默认):
故障发生在: 00:00
下次检查: 00:00 ~ 02:00
发现延迟: 最多 2 分钟


refresh_interval = 600s:
故障发生在: 00:00
下次检查: 00:00 ~ 10:00
发现延迟: 最多 10 分钟 ❌

注意事项 #

  1. 默认值: 默认值为 120s,适用于大多数场景。

  2. 需要重启: 修改此配置需要重启节点。

  3. 固定延迟: 使用 scheduleWithFixedDelay 策略。

  4. 与阈值配合: 应与 slow_path_logging_threshold 配合。

  5. IO 开销: 检查频率越高,IO 开销越大。

  6. 发现延迟: 检查间隔越长,故障发现延迟越大。

  7. 时间单位: 支持秒、分钟等单位。

  8. 最小值: 最小值为 1ms,不建议设置过小。

  9. 监控建议: 监控检查耗时和失败率。

  10. 测试验证: 配置变更后应验证检查效果。

定时任务实现 #

定时任务技术细节

线程池: ThreadPool.Names.GENERIC

调度方式:
threadPool.scheduleWithFixedDelay(
    new FsHealthMonitor(),
    refreshInterval,
    ThreadPool.Names.GENERIC
)


FixedDelay 特点:
├── 上次任务完成后开始计时
├── 等待 refresh_interval
├── 执行下一次任务
└── 不会并发执行


与 FixedRate 对比:

FixedDelay (当前使用):
├── 任务完成后计时
├── 不受任务执行时间影响
└── 实际间隔 = refresh_interval + 执行时间


FixedRate:
├── 固定频率执行
├── 可能并发
└── 不适合健康检查