概述
主从复制,是指将一台Redis服务器的数据复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower);数据是从主节点复制到从节点的。其中,主节点负责写数据(当然有读的权限),从节点负责读数据(它没有写数据的权限)。默认的配置下,每个Redis都是主节点。
一个主节点可以有多个从节点,但一个从节点只能有一个主节点。即:主从节点是1对N的关系。
用处
1.数据冗余
主从复制实现了数据的备份,实际上提供了数据冗余的实现方式。
2.故障恢复
当主节点出现异常时,可以由从节点提供服务,实现快速的故障恢复,实际上提供了服务冗余的实现方式。
3.负载均衡
在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器的负载;在写少读多的业务场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
4.高可用
哨兵配合主从复制,可以实现Redis集群的高可用。
配置方式
1.在redis.conf配置文件中添加replicaof IP Port
2.在服务端添加slaveof IP Port
实现原理
Redis的主从复制可以分为两个阶段:sync阶段和command propagate阶段。当从节点启动后,会发送sync指令给主节点,要求全量同步数据,此为sync阶段;那么,如果后续Master节点接收到新的增删操作,也需要Slave节点接受同步的更新,这就是command propagate阶段。
从Redi2.8 开始,引入了psync指令来代替sync指令。psync指令会根据不同的情况,来确定全量重同步还是部分重同步。
全量重同步
当从节点第一次与主节点建立链接的时候,那么会执行全量重同步,这个同步过程与上面的sync阶段 + command propagate阶段一样。
部分重同步
从节点的复制偏移量无法在复制积压缓冲区中找相对应待同步的数据并且主节点与从节点不是第一次同步(根据Redis节点ID判断)
提示
1.主节点宕机后可通过重新启动主节点来恢复主从关系。