Appearance
主从复制
概述
主从复制是Redis高可用的基础,实现数据的读写分离和故障转移。
复制流程
1. 完整同步
主节点 -> bgsave -> 生成RDB -> 发送给从节点 -> 加载RDB2. 命令传播
同步完成后,主节点将写命令传播给从节点。
psync机制
两种同步方式
| 方式 | 说明 |
|---|---|
| 全量复制 | 首次同步,全部数据 |
| 增量复制 | 断线重连,仅同步offset差距 |
psync实现
c
// 复制偏移量
repl_offset:主节点已发送的字节数
repl_backlog_offset:从节点已接收的字节数触发条件
- 从节点首次连接
- 断线重连,offset在backlog中
- 主从offset差距过大
面试考点
Q: 主从复制原理?
- 从节点发送PSYNC请求
- 主节点判断使用全量还是增量
- 执行bgsave生成RDB
- 发送RDB文件
- 命令传播同步
Q: 为什么需要复制积压?
用于增量复制,保存最近的写命令。如果断线时间过长,超出积压范围,需要全量复制。
Q: 主从延迟如何优化?
- 网络优化:减少网络延迟
- 配置优化:调整repl-diskless-sync
- 架构优化:层级复制(主->从->从)
