概念
- 如果把数据都存储到一台服务器上,当服务器出现宕机后,数据会丢失。而把数据备份到多台服务器上,那么当一台服务器发生故障后,其他服务器仍然可以继续提供服务。由于是多台服务器,所以服务器之间的
数据要保持一致性
。 于是Redis提供了主从复制模式,采用的是「读写分离」的方式。主服务器负责读写,从服务器一般只负责读
注意:第一次同步是全量同步的方式。
主从服务器同步流程
- 使用
replicaof(Redis 5.0 之前使用 slaveof)
命令形成主服务器和从服务器的关系。
# 服务器 B 执行这条命令,此时服务器 B 就会变成服务器 A 的「从服务器」
replicaof <服务器 A 的 IP 地址> <服务器 A 的 Redis 端口号>
主从服务器间的第一次同步的过程可分为三个阶段:
- 第一阶段是建立链接、协商同步;
- 第二阶段是主服务器同步数据给从服务器;
- 第三阶段是主服务器发送新写操作命令给从服务器。
具体流程
- 执行了
replicaof
命令后,从服务器就会给主服务器发送psync
命令,该命令包含主服务器的 runID(每个Redis服务器启动的唯一标识)
和复制进度 offset
。第一次同步runID="?",offset=-1
。 - 主服务器收到
psync
命令后,会用FULLRESYNC
(全增量)作为响应命令返回给对方。 - 主服务器会执行
bgsave
命令来fork
一个子进程生成 RDB 文件(异步的,不会阻塞主线程
),然后把文件发送给从服务器。 - 从服务器收到 RDB 文件后,会先清空当前的数据,然后载入 RDB 文件。
- 在此期间 写操作命令并没有记录到刚刚生成的 RDB 文件中,这时主从服务器