单主复制

所有写入经主节点,副本异步或同步复制;实现简单、冲突少,是多数关系型数据库的默认形态,限制是写扩展能力与主节点故障切换风险。

单主复制是什么

单主复制把写入集中到主节点,副本按顺序重放主库的变更日志。实现简单、写入冲突天然不存在,是多数关系型数据库的默认形态;限制是写入无法横向扩展,主节点故障时需要切换,切换期间的可用性与数据完整性都要单独设计。

同步程度怎么选

同步复制在主库返回前等待副本确认,延迟高但不会丢数据;异步复制主库提交即返回,延迟低但故障切换可能丢失最近的写入;半同步要求至少一个副本确认,是延迟与丢数据窗口之间的折中。选择依据是业务能接受多大的恢复点,而不是哪种配置更常见。

复制模式

复制模式确认时机风险
同步复制等待副本确认后返回延迟高,副本故障会影响写入
异步复制主库提交即返回故障切换可能丢失最近写入
半同步至少一个副本确认折中:兼顾延迟与丢数据窗口

基本信息

副本用途读扩展、报表查询、备份与容灾
一致性异步复制下副本可能落后于主库
切换风险未同步到副本的写入在故障时丢失
常见部署一主多从,主库不承担在线读流量

典型使用场景

  • 读多写少业务:主库负责写,多副本分摊查询
  • 报表与离线分析:独立副本承担大查询,避免影响在线
  • 容灾与演练:副本可随时被提升为主库
  • 备份窗口:在副本上执行备份,避免影响主库性能
  • 地理就近读:把副本部署在离用户更近的区域
异步复制下的故障切换要明确可接受的数据丢失窗口,并与业务方确认;只写技术方案不确认业务容忍度,切换后才发现丢失的是关键交易记录。

易错点

  • 异步复制下启用自动切换,最近已确认的写入直接丢失
  • 从库延迟未纳入监控,报表与实时查询读到的数据口径不一致
  • 所有读流量都打到主库,主库既要写又要读,容量提前耗尽
  • 副本数量不断增加但未评估复制带宽与主库日志写入压力

数据来源与参考

  • 《数据密集型应用系统设计》(Kleppmann)第 5 章
  • MySQL 8.0 Reference Manual:Replication
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌