Redis主从复制

2020-11-25  本文已影响0人  逍遥白亦

在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务去复制另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave)。

复制分为全部复制和部分复制。

1. 主从全部复制

具体步骤为:

上述过程如下图所示:


image

2. 主从部分复制

部分复制功能由以下三个部分构成:

2.1 复制偏移量

执行复制的双方----主服务器和从服务器会分别维护一个复制偏移量:

通过对比主从服务器的偏移量,可以很容易的直到主从服务器是否处于一致状态。

2.2 复制积压缓冲区

复制积压缓冲区是由主服务器维护的一个固定长度的先进先出队列,默认大小为1MB。

当主服务器进行命令传播时,它不仅会将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区里面,因此,主服务器的复制积压缓冲区里面会保存着一部分最近传播的写命令,并且复制积压缓冲区会为队列中的每个字节记录相应的复制偏移量。

当从服务器重新连上主服务器时,从服务器会通过PSYNC命令将自己的复制偏移量offset发送给主服务器,主服务器会根据这个复制偏移量来决定对从服务器执行何种同步操作∶

2.3 服务器的运行ID

服务器运行在服务器启动时自动生成,由40个随机的十六进制字符组成。

当从服务器对主服务器进行初次复制时,主服务器会将自己的运行ID 传送给从服务器,而从服务器则会将这个运行ID保存起来。

当从服务器断线并重新连上一个主服务器时,从服务器将向当前连接的主服务器发送之前保存的运行ID:

2.4 部分复制流程

复制流程图如下:


image

3. 复制功能的具体实现

复制的实现步骤:

  1. 设置主服务器的地址和端口
  2. 建立套接字连接
  3. 从服务器向主服务器发送PING命令
  4. 身份验证
  5. 向主服务器发送从服务器的监听端口号
  6. 同步
  7. 命令传播(写命令)

参考资料

  1. 《Redis设计与实现》
上一篇 下一篇

猜你喜欢

热点阅读