Redis主从复制
该模式下具有高可用性且读写分离, 会采用增量同步跟全量同步两种机制。
全量同步
Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份:
- slave连接master,发送psync命令。
- master接收到psync命名后,开始执行bgsave命令生成RDB文件并使用缓冲区记录此后执行的所有写命令。
- master发送快照文件到slave,并在发送期间继续记录被执行的写命令。
- slave收到快照文件后丢弃所有旧数据,载入收到的快照。
- master快照发送完毕后开始向slave发送缓冲区中的写命令。
- slave完成对快照的载入,开始接收命令请求,并执行来自master缓冲区的写命令。
增量同步
也叫指令同步,就是从库重放在主库中进行的指令。Redis会把指令存放在一个环形队列当中,因为内存容量有限,如果备机一直起不来,不可能把所有的内存都去存指令,也就是说,如果备机一直未同步,指令可能会被覆盖掉。 Redis增量复制是指Slave初始化后开始正常工作时master发生的写操作同步到slave的过程。增量复制的过程主要是master每执行一个写命令就会向slave发送相同的写命令。
Redis主从同步策略:
- 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
- slave在同步master数据时候如果slave丢失连接不用怕,slave在重新连接之后丢失重补。
- 一般通过主从来实现读写分离,但是如果master挂掉后如何保证Redis的高可用(HA:High Availability)呢?引入Sentinel进行master的选择。