3主3从部署之后,如果有一台服务器down了怎么保证高可用
2025/12/21大约 2 分钟
3主3从部署之后,如果有一台服务器down了怎么保证高可用
面试口述要点(约 1 分钟)
3 主 3 从一般指 Redis Cluster 里每个主节点至少 1 个从节点。单台服务器宕机时想保证业务无感,需要做到:
- 拓扑反亲和:每个主的从必须在不同机器/机架(避免主从同机)。推荐 6 节点分布到 ≥3 台服务器,确保任一服务器宕机不同时损失主与其全部从。
- 自动故障转移:Cluster 节点间心跳与投票判定主 FAIL,由其从节点发起选举提升为主(满足复制偏移最新、配置纪元最大等)。客户端按 MOVED 刷新路由继续服务。
- 写入安全门槛:配置
min-replicas-to-write与min-replicas-max-lag,当从节点不足或复制延迟过大时主拒写,宁可降级以避免数据丢失。 - 槽覆盖策略:保持
cluster-require-full-coverage yes保证一致性;必要时在故障窗口可降级为no以维持其他槽服务。 - 扩容与重平衡:在恢复期通过
redis-cli --cluster add-node/reshard将热点槽迁移到健康主,尽快补齐从节点,恢复冗余。 - 事后治理:开启跨机架副本、定期演练故障转移、监控节点心跳与磁盘 SMART,避免“主从同故障”的单点风险。
相关高频面试题与简答
问:如何保证单机故障不影响某主的提升?
答:主从分散到不同服务器/机架(拓扑反亲和),每主至少 1 个跨机架从;故障发生时由存活从提升为主继续覆盖该槽。问:Cluster 的故障检测与转移触发条件是什么?
答:节点间 PING/PONG + Gossip 标记主为PFAIL/FAIL,多数主节点达成一致后确认 FAIL;合格从满足复制偏移最新与配置纪元竞选提升。问:客户端在主迁移或槽迁移时如何保持可用?
答:收到MOVED刷新槽映射;迁移过程中收到ASK需带ASKING临时重定向;客户端库需支持 Cluster 协议与自动路由更新。问:为什么需要
min-replicas-to-write?
答:主从异步复制下存在丢失窗口;当从不足或延迟过大时拒写以降低丢失风险,保障关键业务一致性优先于可用性。问:如果某主及其所有从都在同一台宕机服务器上怎么办?
答:这属于设计失误。短期可将cluster-require-full-coverage设为no维持其他槽;基于备份拉起新节点并reshard接管该槽,随后补齐跨机架从。问:如何在不停服的情况下补充从节点并重平衡?
答:add-node加入新节点为从,reshard迁移部分槽/Key,小批量迁移并让客户端跟随ASK;迁移完成后再调整主从角色。