☰
对主从复的理解
2026/10/3 2:26:26 网站建设 项目流程

1. 什么是主从复制?作用是什么?

参考答案:主从复制就是把主节点(master)的数据,同步到从节点(slave/replica)。

  • master:负责接收写请求;
  • slave:复制master数据,一般只提供读服务。

三大作用:

  1. 读写分离:写走主,读请求分摊到从节点,提升读吞吐量。
  2. 数据备份:从节点保存一份副本,防止单节点数据丢失。
  3. 高可用基础:主节点故障时,可以把从节点提升为主节点(故障转移)。

注意:主从本身不自动故障转移,自动切换需要哨兵Sentinel。

2. Redis主从复制完整流程是什么?

参考答案:Redis复制分为全量复制和增量复制。

① 全量复制(第一次建立复制、从库重启、replid不匹配时触发)

  1. 从节点向主节点发送PSYNC ? -1请求同步数据。
  2. master执行bgsave,生成RDB快照。
  3. master把RDB文件发给从节点;
  4. 在生成RDB、传输RDB期间,master新收到的写命令,放到复制积压缓冲区(repl‑backlog)。
  5. 从节点收到RDB,清空本地旧数据,加载RDB。
  6. 加载完成后,master把积压缓冲区里面新增的写命令发给从节点,从节点回放执行,追平数据。

② 增量复制(网络短暂断开重连)

  1. 从节点断线重连,携带自己的replid和offset偏移量。
  2. master检查:repl‑backlog缓冲区中是否还保存该offset之后的数据。
  3. 如果还在:直接把offset之后的命令发给从节点执行,不需要全量RDB。
  4. 如果缓冲区已经覆盖掉该offset:只能触发一次全量复制。

关键名词:

  • replid:主节点唯一复制ID;
  • offset:复制偏移量,主从各自维护,代表已经同步到哪个位置;
  • repl‑backlog 复制积压缓冲区:环形缓冲区。

3. 什么是复制积压缓冲区 repl‑backlog?作用?参数?

参考答案:复制积压缓冲区是master上一个环形固定大小缓冲区。 master执行写命令时,除了发给从库,同时把命令写入这个环形buffer。

作用: 从节点网络短暂断连恢复后,不需要全量同步,只需要根据offset拉取缓冲区后续命令,做增量同步。

  • 环形,写满会覆盖旧数据。
  • 如果断线时间太长,offset对应数据已经被覆盖,只能走全量复制。
  • 参数repl‑backlog‑size;业务读多写少可以调小;写压力大要调大,避免频繁全量复制。

4. 主从同步两种模式:异步复制 / 半同步复制

参考答案:

1)异步复制(Redis默认)

master执行完写命令,立刻返回给客户端,不等从节点复制完成。 优点:性能很高; 风险:master刚写完,还没同步到slave就宕机,数据丢失。

2)半同步复制(Redis叫min‑replicas,MySQL叫semi‑sync)

master收到写请求,至少等待N个从节点收到这条命令,才返回成功给客户端。

Redis配置min‑replicas‑to‑write/min‑replicas‑max‑lag。

优点:降低数据丢失概率; 缺点:延迟变大,如果从节点全部卡住,主节点写会被阻塞。

注意:半同步只是保证从节点收到命令,不一定已经完全执行完。不是强一致。

5. 主从复制会有什么问题?

问题1:数据不一致、延迟(主从延迟)

参考答案:主从延迟:主已经写完,从还没有回放完这条数据,读从库读到旧数据。 产生原因:

  1. 网络带宽、网络抖动;
  2. master写压力大,命令传输量大;
  3. slave本身CPU慢,回放命令跟不上master速度;
  4. 全量同步时RDB加载阶段,从节点无法处理同步命令。

解决思路:

  • 对一致性要求高的读请求直接读主节点;
  • 监控offset差值,延迟过大把读请求切回主;
  • 调大repl‑backlog‑size减少频繁全量同步。

问题2:全量复制风暴

参考答案:当大量从节点同时触发全量复制:master多次执行bgsave生成RDB,大量网络带宽传输RDB文件。 会打满master磁盘IO、网卡带宽,拖垮主节点。

解决方案:

  1. 不要所有从直接连主,搭建从的从(级联复制),slave‑of another‑slave;
  2. 错开从节点重启时间,避免同时全量同步;
  3. 自研KV可以支持快照文件离线分发。

问题3:主节点宕机,数据丢失场景

参考答案:异步模式下,master执行完写返回客户端,数据还在内存,尚未发送给slave,此时master断电宕机。 这部分新数据完全丢失。半同步可以缓解,但不能100%杜绝。

6. 级联复制是什么?好处和问题?

参考答案:slave不仅可以复制master,slave下面还可以再接从节点,形成树状拓扑。

好处:减轻master压力,大量从节点的同步压力分摊给中间层从节点。

缺点:同步链路变长,主从延迟逐级放大;中间节点故障,下游全部受影响。

7. 主从复制 vs 哨兵Sentinel区别?

参考答案:

  • 主从复制:只负责数据同步,没有故障检测、没有自动切换。主挂了需要人工操作提升从。
  • Sentinel哨兵:监控主从节点;主故障自动选从提升为主;通知客户端新主地址。 哨兵本身依赖底层主从复制。

哨兵解决高可用,不解决数据一致性。

8. 主从复制和集群分片的区别

参考答案:

  • 主从复制:全量数据复制。每个从都保存完整数据集,解决读写分离、备份、高可用。数据不拆分。
  • 集群分片:把数据hash拆分到多个master节点,每个节点只存一部分数据,解决数据容量水平扩展;每个分片内部再做自己的主从。

简单一句话:分片解决存不下;主从解决读压力和高可用。

9. MySQL主从和Redis主从简单区别

参考答案:

  1. MySQL基于binlog二进制日志;Redis复制是传播执行命令。
  2. MySQL支持GTID;Redis使用replid+offset。
  3. MySQL有statement/mixed/row格式;Redis直接复制原始命令。
  4. MySQL半同步有after‑sync/after‑commit两种模式。

❌避雷错误

  1. ❌主从复制可以自动故障转移 ✅不能,需要哨兵。
  2. ❌半同步复制绝对不会丢数据 ✅只是降低概率,网络异常依然可能丢。
  3. ❌主从一定强一致 ✅默认异步是最终一致性,存在主从延迟。
  4. ❌复制积压缓冲区无限大 ✅环形缓冲区,会覆盖旧数据,断线太久触发全量。

📝速记小结

  1. 流程:全量(快照+backlog回放);增量(offset+repl‑backlog)
  2. 核心三要素:replid复制ID、offset偏移量、repl‑backlog环形积压缓冲区
  3. 同步模式:异步(高性能可能丢数据);半同步(至少N个从收到才返回)
  4. 典型故障:主从延迟、全量复制风暴、脑裂、断线后全量同步
  5. 哨兵负责自动故障切换;主从只管数据同步;分片解决容量,主从解决读与高可用。

参考链接 :0voice · GitHub

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询