级联复制是什么
级联复制(链式复制)指从库再挂从库:主 → 从A → 从B。从A 既应用主库的数据,又继续把数据下发给从B,从而把主库的 fork 开销与同步带宽分摊到中间层,适合副本数量多或跨机房的部署。
基本信息
| 建立方式 | 在从B上执行 REPLICAOF <从A地址> 6379,或在配置文件里写 replicaof |
|---|---|
| 拓扑形态 | 主库 → 中间从库 → 下游从库,可以多层 |
| 影响半径 | 中间节点故障或重启会波及下游,主库不受影响 |
| 常用查看 | INFO replication 的 role、master_link_status、connected_slaves |
典型使用场景
- 跨机房同步:机房内先落一个从库,再由它下发给同机房其他副本,减少跨机房出口带宽
- 副本数量多:主库 fork 与网络出口压力过大时,用中间层分摊下发
- 备份隔离:在链路末端挂一个专做快照备份的从库,避免备份动作影响主库
- 验证环境:被级联的从库用来跑新版本或新配置的只读验证
搭建与核对
搭建与核对
# 在从B上指向从A,而不是直接指向主库
redis-cli REPLICAOF 10.0.0.12 6379 # 从A 的地址与端口
redis-cli INFO replication | grep -E 'role|master_host|master_link_status'
redis-cli -h 10.0.0.12 INFO replication | grep -E 'connected_slaves|slave[0-9]'
redis-cli INFO replication | grep -E 'master_repl_offset|slave_repl_offset'链路排查读法
| 字段 | 含义 | 关注点 |
|---|---|---|
| role | 本节点角色 | 逐级确认角色没串,中间层应为从库且带下游 |
| master_link_status | 与上游的连接状态 | down 表示上行断开,下游很快也会落后 |
| master_repl_offset | 本节点处理到的偏移量 | 长期不增长说明同步已经停止 |
| connected_slaves | 下游副本数量 | 中间层显示 0 说明下游没连上 |
| slaveN 中的 lag | 该副本的延迟秒数 | 逐层累加,越往下越大 |
链路延迟是叠加的:下游的落后量等于中间层已经落后的量再加上这一跳的传输时间;对读取新鲜度敏感的业务不要放在过深的链路上。
中间节点如果关闭了持久化,重启后本地没有数据,会先与上游做一次全量同步;下游又可能因为上游复制标识变化被连带全量同步一次,网络与磁盘 IO 会在同一时间被占满。