一、概述
在redis中提供的集群方案共有三种:主从复制、哨兵模式、分片集群。 今天就来讲一下主从复制的集群方案。
二、什么是主从复制?
单节点redis的并发能力是有上限,要进一步提高redis的并发能力,就需要搭建主从集群,实现读写分离。
三、主从数据同步的原理
主从数据同步分为两个阶段:一阶段是全量同步、二阶段是增量同步。 全量同步发生在master同slave第一次同步的时候。剩下的是增量同步。
1、主从全量同步
名词解释
- Replication Id: 简称replid, 是数据集的标记,id一致则说明是同一数据集,每一个master都有唯一的replid, slave则会集成master节点的replid。
- offset:偏移量。随着记录在repl_backlog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。
- 全量同步的过程如上图所示。
- master如何判断是否为第一次同步呢?
- slave在向master发送请求数据同步时,会把replid一起发送过去。master判断slave发送过来的replid是否与自己的一致。如果不一致,则认为是第一次同步。如果一致,则认为之前已经同步过了。第一次同步时,master把自己的replid发送给slave,slave记录下来,后面的同步过程中使用。
- slave第二次、第三次...同步数据时,要从repl_backlog中读取多少数据呢?
- master只有在第一次同步时生成RDB文件,其他的同步master将repl_backlog文件中的数据发送给slave。第一次同步时,master会把offset传给slave。假如第一次同步后,slave记录的offset是50,但是master中的offset变成了80,那么50~80的这部分数据就是第二次要同步的。以此类推。
2、主从增量同步
主从增量同步发生在slave重启或者后期数据有变化的情况下。
四、主从复制的优缺点
- 缺点:只有一个master节点,一旦master节点宕机了,整个集群就不可用了。不满足高可用的特性。
- 优点:一主多从,读写分离,实现了高并发的特性。