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 秒是最常见的折中方案。


暂无评论内容