配置项作用 #
cluster.follower_lag.timeout 配置项控制跟随节点(Follower Node)应用集群状态更新的超时时间。当主节点(Leader Node)发布了新的集群状态后,如果跟随节点在指定的时间内没有成功应用该状态,系统可能会将其从集群中移除,以防止集群长期处于不一致状态。
配置项类型 #
该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。
默认值 #
90000ms(90秒)
是否必需 #
可选配置项(有默认值)
取值范围 #
1ms ~ 正无穷
配置格式 #
# 默认配置
cluster.follower_lag.timeout: 90000ms
# 缩短超时时间
cluster.follower_lag.timeout: 30000ms
# 延长超时时间
cluster.follower_lag.timeout: 180000ms
# 自定义配置
cluster.follower_lag.timeout: 60s
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
cluster.follower_lag.timeout | 90000ms | 跟随节点延迟超时 |
cluster.fault_detection.follower_check.timeout | 10000ms | 跟随节点检查超时 |
cluster.fault_detection.leader_check.timeout | 10000ms | 主节点检查超时 |
工作原理 #
跟随节点延迟检测机制:
┌─────────────────────────────────────────────────────────────────┐
│ 跟随节点延迟检测 │
└─────────────────────────────────────────────────────────────────┘
主节点发布集群状态版本 N
│
├── 跟随节点 A 收到并应用 ✓
│
├── 跟随节点 B 收到并应用 ✓
│
└── 跟随节点 C 未确认
│
├── 启动延迟检测定时器
│ │
│ └── 等待 follower_lag.timeout
│ │
│ ├── 超时前节点 C 应用状态 → 取消检测
│ │
│ └── 超时后仍未应用
│ │
│ └── 触发 onLagDetected
│ │
│ └── 可能将节点 C 从集群中移除
│
└── 目的:防止集群长期不一致
延迟检测流程 #
延迟检测详细流程:
1. 集群状态发布完成
- 主节点已应用新状态
- 部分跟随节点可能还未应用
2. 启动延迟检测
- 识别未应用新状态的节点
- 为每个延迟节点启动检测定时器
3. 等待超时
- 在 follower_lag.timeout 时间内
- 等待节点确认应用状态
4. 超时处理
- 如果节点仍未应用状态
- 记录警告日志
- 触发延迟回调
- 可能将节点从集群中移除
5. 恢复检测
- 如果节点在超时前应用状态
- 取消延迟检测
- 节点正常工作
使用场景 #
1. 默认配置(推荐) #
cluster.follower_lag.timeout: 90000ms
适用于大多数集群配置,平衡了容错能力和响应时间。
2. 快速检测环境 #
cluster.follower_lag.timeout: 30000ms
适用场景:
- 需要快速检测故障节点
- 对集群一致性要求高
- 网络稳定的环境
3. 慢速网络环境 #
cluster.follower_lag.timeout: 180000ms
适用场景:
- 跨地域集群
- 网络延迟较高
- 节点负载较大
4. 最小超时 #
cluster.follower_lag.timeout: 5000ms
适用场景:
- 测试环境
- 高性能网络
- 快速故障切换
推荐设置建议 #
| 网络环境 | 推荐值 | 说明 |
|---|---|---|
| 本地网络 | 30-60s | 快速检测 |
| 标准网络 | 90s | 默认配置 |
| 跨地域 | 120-180s | 考虑延迟 |
| 不稳定网络 | 180s+ | 容错优先 |
超时时间影响分析 #
短超时(30s):
优点:
✓ 快速检测故障节点
✓ 快速恢复集群一致性
✓ 减少不一致时间窗口
缺点:
✗ 可能误判正常节点
✗ 网络抖动时容易误触发
✗ 需要更稳定的网络环境
长超时(180s):
优点:
✓ 容忍更长的网络延迟
✓ 减少误判风险
✓ 适合跨地域部署
缺点:
✗ 故障检测时间较长
✗ 集群恢复时间较长
✗ 可能影响数据一致性
故障检测相关配置对比 #
集群故障检测配置体系:
1. cluster.follower_lag.timeout (90s)
- 检测节点应用集群状态延迟
- 主要用于集群状态同步检测
- 节点可能被移除
2. cluster.fault_detection.follower_check.timeout (10s)
- 检测跟随节点是否存活
- 定期心跳检测
- 节点可能被标记为故障
3. cluster.fault_detection.leader_check.timeout (10s)
- 检测主节点是否存活
- 跟随节点定期检查主节点
- 可能触发重新选举
配置建议:
- follower_lag.timeout 应该远大于其他超时配置
- 给予节点足够时间处理集群状态更新
- 根据网络状况和节点负载调整
监控建议 #
# 查看当前配置
GET /_cluster/settings?filter_path=*.cluster.follower_lag.timeout
# 查看节点信息
GET /_cat/nodes?v
# 查看集群状态
GET /_cluster/state
# 查看节点统计信息
GET /_nodes/stats
# 检查是否有节点被移除
GET /_cluster/health
日志示例 #
正常情况日志:
[INFO ] [node-1] lag detection for version 1234 is unnecessary
延迟检测启动日志:
[DEBUG] [node-1] starting lag detector for version 1234: [NodeAppliedStateTracker{...}, ...]
节点延迟警告日志:
[WARN ] [node-1] node [node-3] is lagging at cluster state version [1230],
although publication of cluster state version [1234] completed [90000ms] ago
注意事项 #
- 静态配置:此配置为静态配置,需要重启节点生效
- 最小值限制:最小值为 1ms
- 与故障检测配合:与故障检测机制协同工作
- 网络考虑:根据网络延迟调整此配置
- 节点负载:节点负载高时可能需要更长的超时时间
- 集群规模:大规模集群可能需要更长的超时时间





