结论/安全关停步骤:1. 逐步下线从节点:使用 redis-cli --cluster del-node 命令安全移除从节点,避免数据丢失。2. 进入谨慎模式:设置 cluster-require-full-coverage yes 和 cluster-migration-barrier 3,确保故障时不自动迁移槽位。3. 主节点故障处理:手动 failover,使用 cluster failover 命令从从节点提升为主,避免脑裂。4. 完整关停:redis-cli --cluster create --cluster-replicas 0 重新搭建或逐步 shutdown 保存数据。监控 replication lag < 1s 再操作。
阿里云文档
在Redis集群的维护窗口内进行关停操作前,需要将集群切换到谨慎模式。具体操作如下:登录RDS控制台,进入对应的实例详情页,点击“性能优化”选项卡,在“参数设置”页面搜索cluster-migration-barrier参数,将参数值设置为3,然后重启实例生效。同时设置cluster-node-timeout参数为15000ms。
腾讯云开发者社区
Redis Cluster在遇到故障时,会自动迁移部分Hash槽到其他健康的节点上,保持集群可用性。但在谨慎模式下,Redis Cluster需要至少migration-barrier个健康的主节点才能进行自动故障转移。如果集群中没有足够的健康主节点,Redis Cluster将进入fail-safe模式,停止所有的写操作。
华为云最佳实践
关停前执行:redis-cli -p 6379 -c -a password cluster nodes 检查集群状态,确保所有节点在线且无故障。然后逐个对从节点执行:redis-cli --cluster del-node host:port node_id。主节点关停前提升从节点:redis-cli -h slave_host -p slave_port -c cluster failover。
CSDN博客经验分享
进入谨慎模式的关键配置:cluster-require-full-coverage yes,这会让集群在槽位覆盖不完整时拒绝写请求,避免数据丢失。结合cluster-migration-barrier 2-5,根据节点数调整。故障时手动干预:使用cluster setslot {slot} importing/migrating/node_id 恢复槽位。
知乎高赞回答
安全关停Redis集群:先停止应用写入,等待所有AOF/RDB持久化完成。然后从边缘节点开始 shutdown,逐步向中心收敛。使用 redis-cli --cluster check ip:port 验证集群健康。谨慎模式下,故障恢复优先手动failover,避免自动迁移导致数据不一致。
官方Redis文档摘录
Redis Cluster fail-safe mode: When a majority of masters are down, and cluster-require-full-coverage is set to yes, the cluster switches to a read-only mode, and clients that try to execute write commands will get a -CLUSTERDOWN error. This prevents data loss during partial outages.
GitHub issue讨论
在关停前,设置 config set cluster-migration-barrier 5;如果节点数少,设为1。处理故障:如果主节点down,选lag最小的slave执行 failover,但确保quorum满足。关停顺序:slave先,master后,全量备份后再shutdown save。
FAQ
Q: 什么是Redis集群谨慎模式?
A: 谨慎模式通过设置cluster-migration-barrier和cluster-require-full-coverage参数,避免故障时自动槽位迁移导致数据丢失或脑裂。
Q: 关停集群会丢失数据吗?
A: 不会,只要开启AOF/RDB持久化,并在关停前等待同步完成,逐步下线节点。
Q: 主节点故障怎么处理?
A: 手动在从节点执行cluster failover命令,确保复制延迟低。
Q: 如何检查集群是否安全关停?
A: 用cluster nodes和cluster info命令检查所有槽位覆盖、主从状态正常。