--- title: "节点健康检查失败异常 (node_health_check_failure_exception) 错误排查与解决" date: 2026-01-16 lastmod: 2026-01-16 description: "node_health_check_failure_exception 表示节点文件系统健康检查失败,通常由磁盘故障、磁盘空间不足或文件系统损坏引起。" tags: ["节点", "磁盘健康", "文件系统"] summary: "为什么这个错误发生 # node_health_check_failure_exception 表示节点的文件系统健康检查失败。当 FsHealthService 报告文件系统不健康时,该节点需要从集群中移除。 这个错误可能由以下原因引起: 磁盘故障:物理磁盘故障或损坏 磁盘空间不足:磁盘使用率超过配置的阈值 磁盘 IO 错误:磁盘读写错误 文件系统损坏:文件系统元数据损坏 只读文件系统:文件系统变为只读状态 磁盘错误过多:超过允许的磁盘错误阈值 挂载点问题:磁盘挂载点出现问题 RAID 故障:RAID 阵列故障或降级 NFS/网络存储问题:网络存储连接问题 磁盘控制器故障:磁盘控制器硬件故障 如何修复这个错误 # 1. 检查磁盘空间 # # 查看磁盘使用情况 df -h # 查看数据目录的磁盘使用 du -sh /path/to/easysearch/data # 查看 inode 使用情况 df -i 2. 检查磁盘健康状态 # # 使用 smartctl 检查磁盘健康 sudo smartctl -a /dev/sdX # 查看磁盘错误 sudo smartctl -l error /dev/sdX # 执行磁盘自检 sudo smartctl -t long /dev/sdX 3." --- ## 为什么这个错误发生 `node_health_check_failure_exception` 表示节点的文件系统健康检查失败。当 FsHealthService 报告文件系统不健康时,该节点需要从集群中移除。 这个错误可能由以下原因引起: 1. **磁盘故障**:物理磁盘故障或损坏 2. **磁盘空间不足**:磁盘使用率超过配置的阈值 3. **磁盘 IO 错误**:磁盘读写错误 4. **文件系统损坏**:文件系统元数据损坏 5. **只读文件系统**:文件系统变为只读状态 6. **磁盘错误过多**:超过允许的磁盘错误阈值 7. **挂载点问题**:磁盘挂载点出现问题 8. **RAID 故障**:RAID 阵列故障或降级 9. **NFS/网络存储问题**:网络存储连接问题 10. **磁盘控制器故障**:磁盘控制器硬件故障 ## 如何修复这个错误 ### 1. 检查磁盘空间 ```bash # 查看磁盘使用情况 df -h # 查看数据目录的磁盘使用 du -sh /path/to/easysearch/data # 查看 inode 使用情况 df -i ``` ### 2. 检查磁盘健康状态 ```bash # 使用 smartctl 检查磁盘健康 sudo smartctl -a /dev/sdX # 查看磁盘错误 sudo smartctl -l error /dev/sdX # 执行磁盘自检 sudo smartctl -t long /dev/sdX ``` ### 3. 清理磁盘空间 ```bash # 删除旧的索引 DELETE / # 删除旧的快照 DELETE /_snapshot// # 清理日志文件 sudo rm /path/to/easysearch/logs/easysearch.log.* ``` ### 4. 检查文件系统 ```bash # 检查文件系统错误 sudo fsck /dev/sdX # 查看挂载点 mount | grep easysearch # 重新挂载文件系统 sudo mount -o remount,rw /path/to/easysearch/data ``` ### 5. 检查磁盘读写 ```bash # 测试磁盘写入 dd if=/dev/zero of=/path/to/easysearch/data/test.img bs=1M count=100 # 测试磁盘读取 dd if=/path/to/easysearch/data/test.img of=/dev/null bs=1M # 清理测试文件 rm /path/to/easysearch/data/test.img ``` ### 6. 查看系统日志 ```bash # 查看内核日志中的磁盘错误 dmesg | grep -i "error\|i/o error" # 查看 syslog grep -i "disk\|i/o" /var/log/syslog | tail -50 # 查看 Easysearch 日志 grep -i "fs.*health\|disk.*error" /path/to/easysearch/logs/easysearch.log | tail -100 ``` ### 7. 检查 RAID 状态 ```bash # 查看 RAID 状态 cat /proc/mdstat # 查看 RAID 详细信息 sudo mdadm --detail /dev/mdX # 查看磁盘阵列状态 sudo megacli -AdpAllInfo -aAll # 对于 LSI RAID 卡 ``` ### 8. 调整磁盘水位线配置 ```bash # 查看当前配置 GET /_cluster/settings?flat_settings=true # 调整磁盘水位线 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.disk.watermark.low": "90%", "cluster.routing.allocation.disk.watermark.high": "95%", "cluster.routing.allocation.disk.watermark.flood_stage": "98%" } } # 使用绝对值 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.disk.watermark.low": "100gb", "cluster.routing.allocation.disk.watermark.high": "50gb", "cluster.routing.allocation.disk.watermark.flood_stage": "10gb" } } ``` ### 9. 解除洪水阶段水印 ```bash # 如果索引被设置为只读,需要解除 PUT //_settings { "index.blocks.read_only_allow_delete": null } # 对所有索引解除 PUT /_all/_settings { "index.blocks.read_only_allow_delete": null } ``` ### 10. 迁移分片到其他节点 ```bash # 排除问题节点 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.exclude._name": "problem_node" } } # 等待分片迁移完成后重启节点 GET /_cat/shards?v ``` ### 11. 重启节点 ```bash # 排除节点后重启 sudo systemctl restart easysearch # 或 sudo service easysearch restart # 重启后恢复节点 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.exclude._name": null } } ``` ### 12. 更换故障磁盘 ```bash # 如果磁盘物理故障,需要更换 # 1. 备份数据 # 2. 将数据迁移到其他节点 # 3. 关闭节点 # 4. 更换磁盘 # 5. 重建 RAID(如适用) # 6. 重启节点 ``` ### 13. 检查网络存储(如适用) ```bash # 对于 NFS,检查挂载状态 mount | grep nfs # 测试 NFS 连接 showmount -e # 重新挂载 NFS sudo umount /path/to/nfs/mount sudo mount -t nfs :/path /path/to/nfs/mount ``` ### 14. 禁用磁盘分配决策器(临时) ```bash # 仅用于紧急情况,不推荐长期使用 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } } # 完成修复后重新启用 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.disk.threshold_enabled": true } } ``` ### 15. 监控磁盘健康 ```bash # 配置磁盘监控 # 使用 tools 如 collectd, prometheus, 或 nagios # 查看节点统计信息 GET /_nodes/stats/fs?human ``` ### 预防措施 - 定期检查磁盘健康状态 - 配置磁盘空间告警 - 保持至少 20-30% 的磁盘空闲空间 - 使用 RAID 提高容错能力 - 实施磁盘监控和自动告警 - 定期清理旧数据和日志 - 配置合理的磁盘水位线 - 使用专用的数据磁盘 - 避免将系统盘用于数据存储 - 实施磁盘备份策略 - 监控磁盘 IO 性能