主从复制:
- 一个 master 可以有多个 slave
- 一个 slave 只能有一个 master
- 数据流向是单项的,master 到 slave
主从复制的配置方式:
1、slaveof 命令:异步执行
- 开始主从复制:slaveof host port,使用该命令会清空redis之前存在的数据并从master做一次全量复制
- 取消复制:slaveof no one
2、配置:
slaveof ip port
slave-read-only yes
全量复制与部分复制
全量复制过程:
全量复制开销:
- bgsave 时间
- rdb 文件传输时间
- slave 节点清空数据时间
- slave 节点加载 rdb 文件的时间
- 可能的 aof 重写时间
部分复制的过程:
开发与运维中可能出现的问题
开发与运维中可能出现的问题:
- 读写分离
- 主从配置不一致
- 规避全量复制
- 规避复制风暴
1、读写分离:读流量分摊到从节点
可能遇到的问题:
- 复制数据延迟
- 读到过期数据
- 从节点故障
2、配置不一致
- 如 maxmemory 不一致:可能导致数据丢失
- 数据结构优化参数(如 hash-max-ziplist-entries ):内存不一致
3、规避全量复制
全量复制出现的时机:
- 第一次全量复制:第一次的全量复制不可避免,尽量选取流量低峰期进行复制
- 节点 ID 不一致:
- 比如主节点重启(运行 ID 发生变化)
- 故障转移:例如哨兵或集群
- 复制积压缓冲区不足
- 网络中断,部分复制无法满足
- 增大复制缓冲区配置 rel_backlog_size,网络“增强”
4、规避复制风暴
- 单主节点复制风暴
- 发生原因:主节点重启,多从节点复制
- 解决:更换复制拓扑
- 单机器复制风暴:
- 如下图,机器宕机后,大量全量复制
- 解决:主节点分散多机器