首页/数据/Redis 进阶速查/cluster-node-timeout 的作用

cluster-node-timeout 的作用

节点间心跳超时判定:超过该时长未收到某节点消息,就标记为疑似下线(PFAIL),进一步多数确认后升级为 FAIL,触发从节点提升。

Redis 进阶速查数据更新于 2026-10-13

故障判定的时间基准

cluster-node-timeout 决定集群里多久收不到某个节点消息就认为它可疑:超过这个时长未收到对方消息,就把它标记为疑似下线,再由其他主节点确认、多数派达成一致后升级为确定下线,触发其从节点竞选。它同时参与判断某个从节点是否因为断链过久而失去被提升的资格。

基本信息

默认值15000 毫秒
作用故障发现节奏、以及从节点提升资格判定
相关参数cluster-replica-validity-factor,与超时值相乘得到从节点断链上限
生效要求全集群节点取值应保持一致

典型使用场景

  • 估算恢复时间:从节点失联到触发提升的耗时是这个值的函数
  • 跨机房部署调参:链路抖动大时需要放大,避免抖动被当作故障
  • 排查误切:短时间内反复发生切换,先核对本参数与链路质量
  • 评估从节点资格:断链太久的从节点不会被提升,需要与数据同步能力一起看

查看与调整

查看与调整
redis-cli -p 7000 CONFIG GET cluster-node-timeout          # 查看当前值(毫秒)
redis-cli -p 7000 CONFIG SET cluster-node-timeout 30000    # 跨机房时适当放大
redis-cli -p 7000 CLUSTER NODES | grep -E 'fail|pfail'     # 是否有节点被标记
redis-cli -p 7000 CLUSTER INFO | grep -E 'state|slots_fail' # 集群整体状态
redis-cli -p 7000 CLUSTER FAILOVER                         # 需要主动切换时不必等超时

取值建议

场景取值取向理由
同机房内网可沿用默认 15000链路抖动小,误判概率低
跨机房或跨云放大到 20000 到 30000容忍链路抖动与临时丢包
要求快速切换谨慎调小,例如 5000 到 8000切换更快但误判风险上升,需先在真实链路验证
链路质量不稳定不要盲目调小反复判定下线会引发无谓提升与数据回退
从节点能否被提升还受 cluster-replica-validity-factor 约束:它与 node-timeout 相乘,得到从节点与主库断链多久后就失去提升资格的上限,因子为 0 表示忽略这项检查、任何从节点都可参与竞选。
它与 cluster-require-full-coverage 是两个维度:前者管多久判定节点故障,后者管有槽没有归属时整个集群是否停止服务(默认停止)。排障时不要混为一谈,集群整体不可用往往查的是后者。
抖动引发的误判会带来实际损失:原主恢复后会发现自己的槽已被接管,它会清空自身数据并转为从库重新同步,期间写入的那部分数据可能永久丢失。

易错点

  • 为了切换快把超时调得很小:链路抖动被当成故障,反复提升会造成数据回退,代价高于多等几秒
  • 只在一台节点上修改该参数:各节点判定节奏不一致会让故障状态在集群里摇摆,必须全集群统一
  • 跨机房沿用默认 15 秒:网络抖动频繁触发疑似下线,故障报告被噪音淹没,真正的故障反而被忽略
  • 误以为调大超时能彻底避免误判:它只改变判定时间窗,链路持续丢包该切还是会切

数据来源与参考

  • Redis 官方文档:cluster-node-timeout 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌