配置项概述 #
Zen 故障检测(Fault Detection,简称 FD)机制用于监控集群中节点的健康状态。当检测到节点故障时,会触发相应的恢复机制,如重新分配分片或选举新的主节点。
| 配置项 | 默认值 | 说明 |
|---|---|---|
discovery.zen.fd.ping_interval | 1s | Ping 间隔时间 |
discovery.zen.fd.ping_timeout | 30s | Ping 超时时间 |
discovery.zen.fd.ping_retries | 3 | Ping 重试次数 |
discovery.zen.fd.connect_on_network_disconnect | false | 网络断开时重连 |
discovery.zen.fd.register_connection_listener | true | 注册连接监听器 |
discovery.zen.fd.ping_interval #
配置项作用:控制故障检测器发送心跳 ping 请求的间隔时间。主节点和跟随节点都会定期向其他节点发送 ping 来检测其存活状态。
默认值:1s
配置类型:动态配置
取值范围:100ms ~ 正数时间值
配置格式:
# 默认配置
discovery.zen.fd.ping_interval: 1s
# 更频繁的检测
discovery.zen.fd.ping_interval: 500ms
# 较少频率的检测
discovery.zen.fd.ping_interval: 5s
推荐设置:
| 场景 | 推荐值 | 说明 |
|---|---|---|
| 默认 | 1s | 标准配置 |
| 高可用要求 | 500ms | 更快发现故障 |
| 稳定网络 | 3s | 减少网络开销 |
discovery.zen.fd.ping_timeout #
配置项作用:控制单次 ping 请求的超时时间。如果在此时间内未收到响应,该次 ping 计为失败。
默认值:30s
配置类型:动态配置
取值范围:1s ~ 正数时间值
配置格式:
# 默认配置
discovery.zen.fd.ping_timeout: 30s
# 更短的超时(快速检测故障)
discovery.zen.fd.ping_timeout: 10s
# 更长的超时(适应高延迟)
discovery.zen.fd.ping_timeout: 60s
故障判定时间:
实际故障判定时间 ≈ ping_timeout × ping_retries
例如:
- ping_interval = 1s
- ping_timeout = 30s
- ping_retries = 3
最坏情况下判定故障需要约 90 秒
discovery.zen.fd.ping_retries #
配置项作用:控制判定节点为故障前允许连续失败的 ping 次数。
默认值:3
配置类型:动态配置
取值范围:1 ~ 正整数
配置格式:
# 默认配置
discovery.zen.fd.ping_retries: 3
# 更宽松的策略
discovery.zen.fd.ping_retries: 5
# 更严格的策略
discovery.zen.fd.ping_retries: 2
discovery.zen.fd.connect_on_network_disconnect #
配置项作用:控制当检测到网络断开时是否尝试重新连接。
默认值:false
配置类型:动态配置
配置格式:
# 默认配置:不主动重连
discovery.zen.fd.connect_on_network_disconnect: false
# 启用自动重连
discovery.zen.fd.connect_on_network_disconnect: true
说明:
false:网络断开后不主动重连,等待对方重连true:网络断开后立即尝试重新建立连接
discovery.zen.fd.register_connection_listener #
配置项作用:控制是否注册连接监听器来监控节点连接状态的变化。
默认值:true
配置类型:动态配置
配置格式:
# 默认配置:注册监听器
discovery.zen.fd.register_connection_listener: true
# 不注册监听器
discovery.zen.fd.register_connection_listener: false
工作原理 #
┌─────────────────────────────────────────────────────────────────┐
│ 故障检测流程 │
└─────────────────────────────────────────────────────────────────┘
每间隔 ping_interval (默认 1s)
│
▼
发送 ping 请求到目标节点
│
├── 收到响应 → 节点健康,重置失败计数
│
└── 未收到响应 (等待 ping_timeout)
│
├── 失败计数++
│
├── 失败计数 < ping_retries
│ │
│ └── 继续监控
│
└── 失败计数 >= ping_retries
│
└── 判定节点故障
│
├── 如果是跟随节点 → 从集群移除
│ 触发分片重新分配
│
└── 如果是主节点 → 触发主节点选举
故障检测场景 #
场景 1:短暂网络抖动 #
时间线:
0s - 发送 ping
1s - 网络抖动,ping 丢失
2s - 发送 ping,收到响应
结果:节点健康(失败计数重置)
场景 2:长时间 GC #
时间线:
0s - 发送 ping
30s - 超时,失败计数 = 1
31s - 发送 ping
61s - 超时,失败计数 = 2
62s - 发送 ping
92s - 超时,失败计数 = 3
结果:判定节点故障(ping_retries = 3)
场景 3:节点宕机 #
时间线:
0s - 发送 ping
30s - 超时,失败计数 = 1
31s - 发送 ping
61s - 超时,失败计数 = 2
62s - 发送 ping
92s - 超时,失败计数 = 3
结果:判定节点故障,触发恢复机制
推荐配置指南 #
局域网环境(稳定) #
discovery.zen.fd.ping_interval: 1s
discovery.zen.fd.ping_timeout: 30s
discovery.zen.fd.ping_retries: 3
故障判定时间:约 90 秒
高可用要求环境 #
discovery.zen.fd.ping_interval: 500ms
discovery.zen.fd.ping_timeout: 10s
discovery.zen.fd.ping_retries: 2
故障判定时间:约 20 秒
跨地域部署(高延迟) #
discovery.zen.fd.ping_interval: 2s
discovery.zen.fd.ping_timeout: 60s
discovery.zen.fd.ping_retries: 5
故障判定时间:约 300 秒(5 分钟)
云环境(不稳定网络) #
discovery.zen.fd.ping_interval: 1s
discovery.zen.fd.ping_timeout: 30s
discovery.zen.fd.ping_retries: 5
故障判定时间:约 150 秒,提供更多容错
完整配置示例 #
示例 1:标准生产环境 #
# easysearch.yml
# Zen 故障检测配置
discovery.zen.fd.ping_interval: 1s
discovery.zen.fd.ping_timeout: 30s
discovery.zen.fd.ping_retries: 3
discovery.zen.fd.connect_on_network_disconnect: false
discovery.zen.fd.register_connection_listener: true
示例 2:高可用环境 #
# 快速故障检测
discovery.zen.fd.ping_interval: 500ms
discovery.zen.fd.ping_timeout: 10s
discovery.zen.fd.ping_retries: 2
discovery.zen.fd.connect_on_network_disconnect: true
discovery.zen.fd.register_connection_listener: true
示例 3:跨地域集群 #
# 适应高延迟
discovery.zen.fd.ping_interval: 2s
discovery.zen.fd.ping_timeout: 60s
discovery.zen.fd.ping_retries: 5
discovery.zen.fd.connect_on_network_disconnect: false
discovery.zen.fd.register_connection_listener: true
监控与验证 #
# 查看当前故障检测配置
GET /_cluster/settings?filter_path=*.discovery.zen.fd.*
# 查看集群健康状态
GET /_cluster/health
# 查看节点列表
GET /_cat/nodes?v
# 查看节点离开原因
GET /_cluster/state?filter_path=metadata.nodes
故障排查 #
问题:节点频繁被判定为故障
可能原因:
- ping_timeout 设置过短
- 网络不稳定
- 节点负载过高导致响应慢
解决方案:
# 增加超时和重试次数
discovery.zen.fd.ping_timeout: 60s
discovery.zen.fd.ping_retries: 5
问题:故障检测时间过长
可能原因:
- ping_retries 设置过多
- ping_timeout 设置过长
解决方案:
# 减少超时和重试次数
discovery.zen.fd.ping_timeout: 15s
discovery.zen.fd.ping_retries: 2
注意事项 #
- 动态配置:所有故障检测配置都是动态的,可在线修改
- 故障判定时间:实际判定时间 ≈ ping_timeout × ping_retries
- 网络延迟:应考虑实际网络延迟设置合理的超时时间
- GC 影响:长时间 GC 可能导致误判,增加 ping_retries 可提供容错
- 与其他配置配合:应与
cluster.fault_detection.*配置协调使用 - ping_interval:过短会增加网络开销,过长会影响故障检测速度





