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。

主从复制作用

  1. 数据备份
  2. 读写分离
  3. 故障转移

主从复制原理

Redis 2.8之前和之后的复制有较大区别

Redis 2.8 之前复制原理

  1. 当从节点连接上主节点后,从节点会发送 sync 命令
  2. 主节点接受到 sync 命令后,将执行 bgsave 命令生成 RDB 文件,并使用复制缓冲区记录新的写命令
  3. 当主节点执行 bgsave 命令完毕后,主节点会将 RDB 文件发送给从节点,从节点接受后并载入内存
  4. 主节点将复制缓冲区写命令发送给从节点执行一遍

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

主从节点启动自动生成且唯一的一个字符串

psync 命令流程图

原文地址:https://www.cnblogs.com/zhanghuizong/p/12855987.html