Redis 主从复制
Redis 主从复制
主从复制的概念
就是将一台 redis 服务器的数据,复制到其他的 redis 服务器,前者为主节点(master/leader),后者称为从节点(slave/follower),数据的复制是单向的,只能从主节点到从节点,一般 master 以写为主,slave 以读为主。
Redis 全量同步和增量同步
Redis 主从复制可以根据是否是全量分为全量同步和增量同步
-
全量同步
Redis全量复制一般发生在 Slave 初始化阶段,这时 Slave 需要将 Master 上的所有数据都复制一份
具体步骤如下:
- 从服务器连接主服务器,发送 SYNC 同步命令;
- 主服务器接收到 SYNC 命名后,开始执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;
- 主服务器 BGSAVE 执行完后,向所有从服务器发送 RDB 快照文件,并在发送期间继续记录被执行的写命令;
- 从服务器收到 RDB 快照文件后丢弃所有旧数据,内存载入收到的 RDB 快照文件;
- 主服务器将 RDB 快照文件发送完毕后,开始向从服务器发送缓冲区中的写命令;
- 从服务器完成对 RDB 快照文件的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令
完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。
-
增量同步
Redis 增量同步是指 Slave 初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。
Redis主从复制策略
Redis 主从服务器刚刚连接的时候,会进行全量同步;全同步结束后,再进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。
主从复制的作用
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种服务的冗余
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写功能,由从节点提供读功能,分担服务器负载,尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量
高可用(HA)基石:主从复制还是哨兵和集群能够实施的基础