logo
Database Design

database复制

主从复制与主主复制

Replication 是一种在多个冗余资源(比如多套 database)之间同步信息的过程,用来提升 reliability、fault-tolerance 或 accessibility。

Master-Slave Replication

Master 负责 reads 和 writes,把 writes 复制到一个或多个 slave;slaves 只负责 reads。slaves 还可以继续复制给下一级 slave,形成 tree-like 的拓扑。若 master 下线,系统可以以只读模式继续工作,直到某个 slave 被提升为 master 或新的 master 被 provision。

master-slave-replication

优点

  • 备份整库对 master 的影响较小。
  • 应用可以从 slave(s) 读取,不影响 master。
  • 可以把 slave 临时下线再同步回 master,不需要 downtime。

缺点

  • 复制需要更多硬件和额外复杂度。
  • master 宕机会带来 downtime,甚至数据丢失。
  • 在 master-slave 架构里,所有 writes 都必须到 master。
  • read slaves 越多,replication 量越大,replication lag 越明显。

Master-Master Replication

两个 master 都可以提供 reads/writes,并相互协调。如果其中一个 master 挂了,系统仍能继续处理 reads 和 writes。

master-master-replication

优点

  • 应用可以从两个 masters 读取。
  • 写入负载分摊到两个 master nodes。
  • failover 更简单、自动且迅速。

缺点

  • 部署与配置比 master-slave 更复杂。
  • 要么是最终一致,要么要付出更高 write latency 来同步。
  • 写节点越多、latency 越大,conflict resolution 越复杂。

Synchronous vs Asynchronous replication

同步 replication 的特点是:数据写入 primary storage 的同时也写入 replica,因此 primary 与 replica 应该一直保持 synchronized。

异步 replication 则是:数据先写入 primary storage,之后再复制到 replica。虽然复制可能接近实时,但更常见的是按 schedule 执行,而且成本更低。

相关练习题

database复制

暂无相关练习题