Redis 的主从同步(复制)
Redis 的主从同步(复制)
比奇小说网 https://m.biqi.org/什么是主从同步(复制)
假设有两个 redis 实例 ⇒ A 和 B
B 实例的内容与 A 实例的内容保持同步
那么称 A 实例是主数据库,B 实例是从数据库
这个过程称为主从同步
为什么要使用主从同步(复制)
- 防止发生单点故障
- 扩展内存
如何开启/关闭主从同步
开启同步
- 配置文件中加入
slaveof 主数据库地址 主数据库端口
- 在命令行中执行上述命令
redis> slaveof 主数据库地址 主数据库端口
- 在开启从服务器时执行命令
$ reids-server --port 6380 --slaveof 主数据库地址 主数据库端口
关闭同步,并成为主数据库
redis> slaveof no one
原理(实现)
复制分为连接建立,数据同步(sync)和命令传播(command propagate)三个阶段
连接建立这里不说,与复制原理无关
下面主要讲数据同步与命令传播两个阶段
redis 从 2.8 版本之后优化了复制功能,咱们先从旧版本的复制说起:
旧版复制过程
步骤 | 主服务器 | 从服务器 |
---|---|---|
同步流程 | ||
1 | 向主服务器发送 SYNC 命令 | |
2 | 收到 SYNC 命令,执行 BGSAVE 生成 RDB 文件 | |
3 | 使用缓冲区记录从现在的写命令 | |
4 | 将生成的 RDB 文件发送给从服务器 | |
5 | 将缓冲区内的写命令发给从服务器 | 接收并载入 RDB 文件 |
6 | 接收并执行主服务器发送来的写命令 | |
命令传播流程 | ||
1 | 发送客户端发过来的写命令 | |
2 | 执行主服务器发送过来的写命令 | |
断线重连 | 与同步流程一致 | 与同步流程一致 |