cluster-node-timeout

cluster-node-timeout

基本概念

cluster-node-timeout 是 Redis Cluster 中最核心的计时参数,它定义了集群节点认为另一个节点不可达的超时时间。这个参数对集群的故障检测、故障转移和数据安全性都有直接影响。

配置方式

redis.conf 中配置:

cluster-node-timeout 15000  # 单位:毫秒,默认 15000(15 秒)

也可以在运行时动态修改:

CONFIG SET cluster-node-timeout 20000

cluster-node-timeout 的作用

1. 故障检测

这是最基本的用途。当节点 A 向节点 B 发送 PING 后,如果在 cluster-node-timeout 时间内没有收到 PONG 回复:

  • 节点 A 将节点 B 标记为 PFAIL(Possible Fail,疑似下线)
  • 后续通过 Gossip 协议将 PFAIL 状态传播给其他节点
  • 如果足够多的节点都认为 B 不可达(通常是半数以上主节点),PFAIL 升级为 FAIL

2. 故障转移触发

当一个主节点被标记为 FAIL 后,它的从节点在等待一段时间后发起选举:

从节点等待时间 = (节点排名 × 重试周期) + 随机偏移量

其中,重试周期与 cluster-node-timeout 有关。通常从节点会在检测到主节点 FAIL 后的 cluster-node-timeout × 2 时间内完成选举和晋升。

3. 数据安全保护

cluster-node-timeout 还有一个关键作用:当一个主节点在 cluster-node-timeout 时间内无法与半数以上的主节点通信时,它会停止接受写入操作

if (无法联系半数以上主节点  持续时间 > cluster-node-timeout) {
    拒绝写入请求;
    返回 CLUSTERDOWN The cluster is down 错误;
}

这是防止脑裂导致大量数据丢失的重要机制。

不同 timeout 值的影响

timeout 设置过小(如 1000ms = 1 秒)

优点:
– 故障检测速度快
– 故障转移响应迅速(几秒内完成切换)
– 脑裂期间数据丢失量小

缺点:
– 容易误判——短暂的网络抖动就会触发故障转移
– 不必要的频繁切换影响稳定性
– 额外的网络开销

timeout 设置过大(如 60000ms = 60 秒)

优点:
– 容错性强,网络抖动不会触发切换
– 系统更稳定,切换次数少

缺点:
– 故障发现慢,服务不可用时间长
– 脑裂窗口期长,可能丢失大量数据
– 客户端长时间得不到响应

推荐的 timeout 值

部署场景 推荐值 考虑因素
同机房内网 5000-15000ms 低延迟、高可靠网络
跨机房 15000-30000ms 有网络延迟和抖动
跨地域(不推荐) 30000-60000ms 高延迟,但依然不推荐 Cluster

与其他参数的关系

cluster-node-timeout 与 cluster-replica-validity-factor

从节点在尝试晋升时,如果从主节点断开的时间超过 cluster-node-timeout × cluster-replica-validity-factor,该从节点将放弃晋升。这个机制防止了数据严重过期的从节点成为主节点。

最大可晋升延迟时间 = cluster-node-timeout × cluster-replica-validity-factor

默认 cluster-replica-validity-factor 为 10,所以当 timeout=15000 时,从节点最多允许与主节点断开 150 秒。超过这个时间,即使主节点宕机,该从节点也不会晋升为主节点。

cluster-node-timeout 与 PING 频率

节点发送 PING 的频率也是基于 timeout 动态调整的:

  • 如果距离上次收到某个节点的 PONG 已经超过 cluster-node-timeout / 2,会立即发送 PING
  • 常规 PING 每秒发送一次(随机选择节点)

面试要点

  • cluster-node-timeout 是 Cluster 中最重要的计时器定义
  • 它有双重作用:故障检测 + 数据安全保护
  • 设置过小容易误判,设置过大影响故障恢复速度
  • 默认 15 秒是大多数场景的合理值
  • 当主节点超过 timeout 无法联系半数以上主节点时自动停止写入

总结

cluster-node-timeout 是 Redis Cluster 的”心跳节拍器”,它决定了集群对故障的敏感度和响应速度。合理配置这个参数需要在故障检测速度误判风险之间找到平衡点。默认值 15 秒是最常见的折中方案。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容