ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

对主从复的理解

对主从复的理解 1. 什么是主从复制作用是什么参考答案主从复制就是把主节点(master)的数据同步到从节点(slave/replica)。master负责接收写请求slave复制master数据一般只提供读服务。三大作用读写分离写走主读请求分摊到从节点提升读吞吐量。数据备份从节点保存一份副本防止单节点数据丢失。高可用基础主节点故障时可以把从节点提升为主节点故障转移。注意主从本身不自动故障转移自动切换需要哨兵Sentinel。2. Redis主从复制完整流程是什么参考答案Redis复制分为全量复制和增量复制。① 全量复制第一次建立复制、从库重启、replid不匹配时触发从节点向主节点发送PSYNC ? -1请求同步数据。master执行bgsave生成RDB快照。master把RDB文件发给从节点在生成RDB、传输RDB期间master新收到的写命令放到复制积压缓冲区repl‑backlog。从节点收到RDB清空本地旧数据加载RDB。加载完成后master把积压缓冲区里面新增的写命令发给从节点从节点回放执行追平数据。② 增量复制网络短暂断开重连从节点断线重连携带自己的replid和offset偏移量。master检查repl‑backlog缓冲区中是否还保存该offset之后的数据。如果还在直接把offset之后的命令发给从节点执行不需要全量RDB。如果缓冲区已经覆盖掉该offset只能触发一次全量复制。关键名词replid主节点唯一复制IDoffset复制偏移量主从各自维护代表已经同步到哪个位置repl‑backlog 复制积压缓冲区环形缓冲区。3. 什么是复制积压缓冲区 repl‑backlog作用参数参考答案复制积压缓冲区是master上一个环形固定大小缓冲区。 master执行写命令时除了发给从库同时把命令写入这个环形buffer。作用 从节点网络短暂断连恢复后不需要全量同步只需要根据offset拉取缓冲区后续命令做增量同步。环形写满会覆盖旧数据。如果断线时间太长offset对应数据已经被覆盖只能走全量复制。参数repl‑backlog‑size业务读多写少可以调小写压力大要调大避免频繁全量复制。4. 主从同步两种模式异步复制 / 半同步复制参考答案1异步复制Redis默认master执行完写命令立刻返回给客户端不等从节点复制完成。 优点性能很高 风险master刚写完还没同步到slave就宕机数据丢失。2半同步复制Redis叫min‑replicasMySQL叫semi‑syncmaster收到写请求至少等待N个从节点收到这条命令才返回成功给客户端。Redis配置min‑replicas‑to‑write/min‑replicas‑max‑lag。优点降低数据丢失概率 缺点延迟变大如果从节点全部卡住主节点写会被阻塞。注意半同步只是保证从节点收到命令不一定已经完全执行完。不是强一致。5. 主从复制会有什么问题问题1数据不一致、延迟主从延迟参考答案主从延迟主已经写完从还没有回放完这条数据读从库读到旧数据。 产生原因网络带宽、网络抖动master写压力大命令传输量大slave本身CPU慢回放命令跟不上master速度全量同步时RDB加载阶段从节点无法处理同步命令。解决思路对一致性要求高的读请求直接读主节点监控offset差值延迟过大把读请求切回主调大repl‑backlog‑size减少频繁全量同步。问题2全量复制风暴参考答案当大量从节点同时触发全量复制master多次执行bgsave生成RDB大量网络带宽传输RDB文件。 会打满master磁盘IO、网卡带宽拖垮主节点。解决方案不要所有从直接连主搭建从的从级联复制slave‑of another‑slave错开从节点重启时间避免同时全量同步自研KV可以支持快照文件离线分发。问题3主节点宕机数据丢失场景参考答案异步模式下master执行完写返回客户端数据还在内存尚未发送给slave此时master断电宕机。 这部分新数据完全丢失。半同步可以缓解但不能100%杜绝。6. 级联复制是什么好处和问题参考答案slave不仅可以复制masterslave下面还可以再接从节点形成树状拓扑。好处减轻master压力大量从节点的同步压力分摊给中间层从节点。缺点同步链路变长主从延迟逐级放大中间节点故障下游全部受影响。7. 主从复制 vs 哨兵Sentinel区别参考答案主从复制只负责数据同步没有故障检测、没有自动切换。主挂了需要人工操作提升从。Sentinel哨兵监控主从节点主故障自动选从提升为主通知客户端新主地址。 哨兵本身依赖底层主从复制。哨兵解决高可用不解决数据一致性。8. 主从复制和集群分片的区别参考答案主从复制全量数据复制。每个从都保存完整数据集解决读写分离、备份、高可用。数据不拆分。集群分片把数据hash拆分到多个master节点每个节点只存一部分数据解决数据容量水平扩展每个分片内部再做自己的主从。简单一句话分片解决存不下主从解决读压力和高可用。9. MySQL主从和Redis主从简单区别参考答案MySQL基于binlog二进制日志Redis复制是传播执行命令。MySQL支持GTIDRedis使用replidoffset。MySQL有statement/mixed/row格式Redis直接复制原始命令。MySQL半同步有after‑sync/after‑commit两种模式。❌避雷错误❌主从复制可以自动故障转移 ✅不能需要哨兵。❌半同步复制绝对不会丢数据 ✅只是降低概率网络异常依然可能丢。❌主从一定强一致 ✅默认异步是最终一致性存在主从延迟。❌复制积压缓冲区无限大 ✅环形缓冲区会覆盖旧数据断线太久触发全量。速记小结流程全量快照backlog回放增量offsetrepl‑backlog核心三要素replid复制ID、offset偏移量、repl‑backlog环形积压缓冲区同步模式异步高性能可能丢数据半同步至少N个从收到才返回典型故障主从延迟、全量复制风暴、脑裂、断线后全量同步哨兵负责自动故障切换主从只管数据同步分片解决容量主从解决读与高可用。参考链接 0voice · GitHub
返回列表