简介
将数据复制到多个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)
- 使用命令
INFO replication
查看节点的状态:
可以看到默认情况下节点的角色是master。 - 使用命令
SLAVEOF host port
设置从机;
192.168.1.202上执行SLAVEOF 192.168.1.201 6379
,查看状态:
可以看到192.168.1.202的角色是slave。 - 192.168.1.203也执行
SLAVEOF 192.168.1.201 6379
,切换为slave。 - 查询192.168.1.201的状态:
可以看到记录有两个slave的节点信息。
若master配置的有密码,则需要配置 masterauth:
特性
- slave启动时会丢弃旧数据,与master的数据保持同步。
- master数据的增删改操作,会同步给他的所有slave。
- slave可读不可写,写操作会报错:
- master故障挂机后,slave的角色不会发生变更。
- master故障恢复后,依旧是master,主从关系不变。
- slave故障恢复后,需要再次使用命令
SLAVEOF host port
重连master。
原理
- slave启动成功连接到master后会发送一个
SYNC
命令; - master收到
SYNC
命令后,执行BGSAVE
命令,生成RDB文件,并使用一个缓冲区记录从现在开始的所有写命令操作; - 当master的
BGSAVE
命令执行完后,master将生成的RDB文件发送给slave; - slave接收到文件后,丢弃之前的数据,将文件中的数据加载进内存;
- master将记录在缓冲区的写命令发送给slave,slave执行,将自己的状态与master保持一致;
流程图如下: