Redis主从复制原理介绍
主从复制配置
主从配置
主服务器配置
# 允许远程访问
protected-mode yes
# 监听所有端口
bind 0.0.0.0
从服务器配置
临时配置
通过 redis-cli
终端执行命令:
# slaveof 命令是异步执行
slaveof <masterip> <masterport>
注意:该种方式配置,重启后失效,自动升级为主服务器。
永久性配置
编辑redis配置文件
replicaof <masterip> <masterport>
注意:从服务器通常默认是read-only模式
取消从服务器
slaveof no one
主从复制概述
主从复制,将一台服务器数据复制到另外一台或者多台服务器中。前者称为:Master,后者称为:Slave。复制数据流向必须是Master->Slave。
主从复制作用
- 数据备份
- 读写分离
- 故障转移
主从复制原理
Redis 2.8之前和之后的复制有较大区别
Redis 2.8 之前复制原理
- 当从节点连接上主节点后,从节点会发送
sync
命令 - 主节点接受到
sync
命令后,将执行bgsave
命令生成 RDB 文件,并使用复制缓冲区记录新的写命令 - 当主节点执行
bgsave
命令完毕后,主节点会将 RDB 文件发送给从节点,从节点接受后并载入内存 - 主节点将复制缓冲区写命令发送给从节点执行一遍
sync主从同步流程图
注意:无论
初次复制
还是断线后重复制
,从节点发送sync
命令,主节点始终需要执行bgsave
操作进行全量同步
Redis 2.8 之后复制原理
为了解决旧版复制功能在处理断线重复制情况时的低效问题,Redis从2.8版本开始,使用
psync
命令代替sync
命令来执行复制时的同步操作。
psync 同步模式
-
完整同步(full resynchronization)
psync的完整同步同sync同步过程一致
-
部分同步(partialresynchronization)
从服务器在断线后重新连接主服务器后,通过
runId
(运行ID) 和offset
(偏移量)来确定
psync主从同步流程图
部分同步实现原理
首先部分同步功能主要由三个部分构成:
- 主节点和从节点增加了 -
复制偏移量
- 主节点增加了 -
复制积压缓冲区
- Redis服务器增加了 -
runnId
复制偏移量
主从节点各自维护着复制偏移量这个标识:
- 主节点每次向从节点传播N个字节时,那么主节点的复制偏移量将加上N
- 从节点每次收到N个字节,那么从节点将加上N
有了复制偏移量,只要对比主从节点的这两个数值是否一致就能判断出主从节点数据是否一致。
复制积压缓冲区
复制积压缓冲区是由主服务器维护的一个固定长度(fixed-size)先进先出(FIFO)队列,默认大小为1MB。
注意:因缓冲区大小固定,所以当空间满了之后有新的元素插入队尾后将自动从队头弹出一个。
由图得知,主节点发生写操作时,会写入复制积压缓冲区,然后分发给各个从节点。
runId
主从节点启动自动生成且唯一的一个字符串