Redis的主从架构
主从模式
全量同步
- 首先主从同步过程第一步 会先比较
replication id
判断是否是第一次同步 - 假设为第一次同步 那么就会 启动
bgsave
异步生成RDB
同时fork子进程记录生成期间的新数据 - 发送RDB给从节点 清空本地数据写入RDB
增量同步
- 对比
ReplicationID
不同因此选择增量同步 - 在Reply_Buffer中有一个环形缓冲区 以及Offset偏移量
- 对比完主从直接的偏移量差距后就可以选择性的获取需要增量同步的新数据
- 同时有一个问题 :如果超
出了环形缓冲区
那么就需要进行一次全量同步在进行增量同步
哨兵模式
哨兵的主要作用:
监控、选主、通知
哨兵选选举过程:
- 首先通过心跳机制发Ping 如果没响应就会主观认为主节点下线
- 向其他Sentinel请求 进行半数选举 如果超过半数Sentinel认为节点下线就为客观下线
- 优先选举数据最全最合适的节点为主节点
集群模式
Cluster分片集群
分片集群将所有节点的存储分为16384
个槽位
所有要存储的数据根据Key值进行Hash
映射后分到具体的槽位
具体的映射算法:
Redis Cluster 是 Redis 实现“分布式+高可用”的集群方式,而 Sentinel 是在“单主结构”下提供“高可用”的方案。Cluster 更强,但也更复杂;Sentinel 更简单,但扩展性有限。
如果cluster出现故障 会自动选举主节点 故障转移 并且重新分配Hash槽位