Redis Cluster网络恢复后,双数据中心节点数相同时的数据整合机制
Redis Cluster网络恢复后的数整合逻辑
当跨数据中心的Redis Cluster在网络分区恢复后,会按照以下步骤完成数据与拓扑的整合:
1. 集群身份校验:先认"合法主集群"
网络恢复后,所有节点通过Gossip协议重新建联并交换状态。Redis Cluster的核心判定逻辑是主节点法定人数——只有拥有超过半数主节点的分区,才会被认定为有效集群。你之前两个分区节点数一致,但主节点数量的占比才是关键,比如原集群有6个主节点,那必须有4个及以上主节点的分区才算合法。
- 非合法分区的所有节点会自动进入"待同步"状态,放弃自己的槽位控制权。
2. 槽位与角色自动修正
合法集群的主节点会持续广播自己的槽位所有权信息,整个集群的槽位映射表会快速统一:
- 原非合法分区的主节点,如果在合法集群中有对应的从节点(或者它本身是某个合法主节点的原从节点),会自动转为从节点角色;如果没有对应主节点,会成为待分配的空节点。
- 所有槽位最终会被合法集群的主节点接管,不会出现槽位冲突的情况。
3. 数据同步:以合法主节点数据为准
数据同步完全遵循Redis的主从复制逻辑:
- 转为从节点的原非法分区节点,会向对应的主节点发起同步请求。如果复制偏移量差距过大,主节点会生成RDB文件全量同步;差距小的话则同步增量命令流。
- 重点:非法分区期间产生的写数据会被完全丢弃,Redis Cluster没有多版本合并机制,所有从节点最终会和主节点数据完全一致。如果非法分区期间有人误写数据到这个分区,那部分数据会丢失,这是Redis Cluster的设计特性。
4. 集群状态收敛
当所有节点完成同步、槽位映射一致后,Gossip协议会把最终的拓扑状态同步到每个节点。此时集群回到正常工作状态,所有读写请求可以正常路由到对应槽位的主节点。
内容的提问来源于stack exchange,提问作者Артем Слепушко
相关产品推荐
相关产品推荐

