Open Source, Open Future!
  menu
107 文章
ღゝ◡╹)ノ❤️

Redis---主从复制

简介

将数据复制到多个Redis上,当一个Redis的数据更新后,自动数据同步到其他Redis上,多个Redis数据保持一致。

作用

主从复制、避免单点故障、容灾恢复

命令

| 命令 | 说明 | |
| - | - | - |
| INFO replication | 主/从复制信息 | |
| SLAVEOF host port | 将当前服务器设置为指定服务器的从机 | |
| SLAVEOF NO ONE | 将当前服务器的从机角色取消 | |

配置过程

有服务器3台:192.168.1.201、192.168.1.202、192.168.1.203

配置1主(192.168.1.201)2从(192.168.1.202,192.168.1.203)

  1. 使用命令 INFO replication查看节点的状态:
    image.png
    可以看到默认情况下节点的角色是master。
  2. 使用命令 SLAVEOF host port 设置从机;
    192.168.1.202上执行 SLAVEOF 192.168.1.201 6379,查看状态:
    image.png
    可以看到192.168.1.202的角色是slave。
  3. 192.168.1.203也执行 SLAVEOF 192.168.1.201 6379,切换为slave。
  4. 查询192.168.1.201的状态:
    image.png
    可以看到记录有两个slave的节点信息。

若master配置的有密码,则需要配置 masterauth:
image.png

特性

  1. slave启动时会丢弃旧数据,与master的数据保持同步。
  2. master数据的增删改操作,会同步给他的所有slave。
  3. slave可读不可写,写操作会报错:
    image.png
  4. master故障挂机后,slave的角色不会发生变更。
  5. master故障恢复后,依旧是master,主从关系不变。
  6. slave故障恢复后,需要再次使用命令 SLAVEOF host port重连master。

原理

  1. slave启动成功连接到master后会发送一个 SYNC命令;
  2. master收到 SYNC命令后,执行 BGSAVE命令,生成RDB文件,并使用一个缓冲区记录从现在开始的所有写命令操作;
  3. 当master的 BGSAVE命令执行完后,master将生成的RDB文件发送给slave;
  4. slave接收到文件后,丢弃之前的数据,将文件中的数据加载进内存;
  5. master将记录在缓冲区的写命令发送给slave,slave执行,将自己的状态与master保持一致;

流程图如下:
image.png