配置项作用 #
monitor.fs.health.enabled 配置项用于控制是否启用文件系统健康检查服务。
启用后,系统会定期在数据路径上创建和删除临时文件,检查文件系统的写入能力和同步(fsync)操作是否正常,同时监控 IO 操作的性能。
配置项属性 #
- 配置路径:
monitor.fs.health.enabled - 数据类型:
Boolean(布尔值) - 默认值:
true - 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 是(支持动态更新)
配置项详解 #
工作机制 #
文件系统健康检查流程
检查间隔: refresh_interval (默认 120 秒)
每次检查:
├── 在数据路径创建临时文件 (.es_temp_file)
├── 写入 UUID 数据到文件
├── 调用 fsync 确保数据写入磁盘
├── 删除临时文件
├── 记录操作耗时
└── 判断健康状态
健康状态判断:
所有路径正常 → HEALTHY ✅
部分路径异常 → UNHEALTHY ❌
服务被禁用 → HEALTHY (提示 "health check disabled")
性能监控 #
IO 操作性能监控
每次检查记录耗时:
├── 文件创建耗时
├── 数据写入耗时
├── fsync 耗时
├── 文件删除耗时
└── 总耗时
慢路径检测:
总耗时 > slow_path_logging_threshold (默认 5s)
│
↓
记录警告日志:
"health check of [path] took [Xms] which is above the warn threshold"
集成方式 #
FsHealthService 集成
Node 构造函数:
│
├── 创建 FsHealthService 实例
│ │
│ ├── 读取 monitor.fs.health.enabled
│ ├── 读取 monitor.fs.health.refresh_interval
│ └── 读取 monitor.fs.health.slow_path_logging_threshold
│
├── 启动定时任务 (scheduleWithFixedDelay)
│
└── 注册到 NodeHealthService
使用场景:
├── 协调节点选举过程
├── LeaderChecker 使用
├── FollowersChecker 使用
└── 集群健康状态监控
配置建议 #
生产环境(推荐) #
monitor:
fs:
health:
enabled: true # 默认值
建议: 保持默认值 true。及时发现文件系统问题。
开发环境 #
monitor:
fs:
health:
enabled: false # 禁用检查
建议: 设置为 false。减少不必要的检查。
高性能存储 #
monitor:
fs:
health:
enabled: true
refresh_interval: 30s # 更频繁检查
建议: 保持启用,降低检查间隔。
故障排查 #
monitor:
fs:
health:
enabled: true
refresh_interval: 60s
slow_path_logging_threshold: 2s # 降低阈值
建议: 保持启用,调整阈值便于发现问题。
代码示例 #
easysearch.yml 基础配置 #
monitor:
fs:
health:
enabled: true
禁用健康检查 #
monitor:
fs:
health:
enabled: false
高性能环境配置 #
monitor:
fs:
health:
enabled: true
refresh_interval: 30s
slow_path_logging_threshold: 3s
动态更新配置 #
PUT /_cluster/settings
{
"transient": {
"monitor.fs.health.enabled": false
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
monitor.fs.health.enabled | 是否启用健康检查 | true |
monitor.fs.health.refresh_interval | 检查间隔 | 120s |
monitor.fs.health.slow_path_logging_threshold | 慢路径日志阈值 | 5s |
性能影响分析 #
| enabled 设置 | 优点 | 缺点 |
|---|---|---|
| true | 及时发现问题 | 轻微 IO 开销 |
| false | 无额外开销 | 无法发现问题 |
IO 开销分析 #
健康检查的 IO 开销
refresh_interval = 120s (默认):
├── 检查频率: 每 2 分钟 1 次
├── 每次操作: 创建/写入/同步/删除
├── 单次开销: ~1-10ms
└── 每小时开销: ~30 次 = ~300ms ✅
refresh_interval = 30s:
├── 检查频率: 每 30 秒 1 次
├── 每小时开销: ~120 次 = ~1.2s
└── 更频繁监控 ⚠️
refresh_interval = 600s (10 分钟):
├── 检查频率: 每 10 分钟 1 次
├── 每小时开销: ~6 次 = ~60ms
└── 延迟发现问题
使用场景 #
推荐启用(默认)的场景 #
- 生产环境: 需要监控文件系统健康
- 数据安全: 重视数据完整性
- 故障预警: 需要提前发现问题
- 标准存储: 使用标准存储设备
推荐禁用的场景 #
- 开发环境: 开发测试环境
- 特殊存储: 已有其他监控方案
- 性能敏感: 对性能极度敏感
- 只读节点: 纯只读节点
健康状态说明 #
健康状态返回值
getHealth() 方法返回:
HEALTHY:
├── 所有路径检查通过 ✅
├── 可以正常读写
└── 系统运行正常
UNHEALTHY:
├── 部分或全部路径检查失败 ❌
├── 可能的问题:
│ ├── 磁盘空间不足
│ ├── 权限问题
│ ├── 文件系统错误
│ └── IO 响应超时
└── 列出所有不健康路径
HEALTHY (disabled):
├── 健康检查被禁用
├── 返回 HEALTHY 但有提示
└── "health check disabled"
故障处理 #
常见问题处理
问题 1: 磁盘空间不足
检查结果: UNHEALTHY
解决方案:
├── 清理旧数据
├── 扩容磁盘
└── 删除不必要的文件
问题 2: 权限问题
检查结果: UNHEALTHY
解决方案:
├── 检查数据路径权限
├── 修复权限设置
└── 确保运行用户有写权限
问题 3: IO 超时
检查结果: 慢路径警告
解决方案:
├── 检查存储设备健康
├── 检查网络存储(如 NFS)
├── 调整 slow_path_logging_threshold
└── 考虑更换存储设备
注意事项 #
默认值: 默认值为
true,建议生产环境保持启用。动态更新: 支持动态更新,修改后立即生效。
轻量开销: 健康检查的 IO 开销很小。
性能监控: 超过阈值会记录警告日志。
定时任务: 使用固定延迟策略调度。
数据路径: 检查所有配置的数据路径。
临时文件: 使用
.es_temp_file临时文件。测试覆盖: 有完整的单元测试覆盖。
监控建议: 配合其他监控工具使用。
故障排查: 禁用后会失去监控能力。
测试验证 #
测试覆盖场景
FsHealthServiceTests:
├── testPeriodicHealthCheck
│ └── 测试定时调度功能
├── testHealthCheckWithIOException
│ └── 测试 IO 异常处理
├── testLoggingOnHungIO
│ └── 测试慢 IO 日志记录
├── testSinglePathFailure
│ └── 测试单路径故障
└── testNodeLockFileCorruption
└── 测试节点锁文件损坏





