主从复制系统设计

举报
JavaEdge 发表于 2022/06/26 21:38:00 2022/06/26
【摘要】 副本(replica):每个存储数据库完整数据集的节点。当存在多副本,不可避免产生问题:如何确保所有数据落在了所有副本?每次向DB的写操作都需传播到所有副本,否则副本就会不一致。最常见的解决方案是基于主节点的复制(也称 主动/被动或主/从复制),如图-1。 1.1 主从复制原理指定某副本为主副本或称为主节点。当客户端向DB写时,必须将请求发给主副本,主副本会将新数据写入其本地存储其他副本称为...

副本(replica):每个存储数据库完整数据集的节点。当存在多副本,不可避免产生问题:如何确保所有数据落在了所有副本?

每次向DB的写操作都需传播到所有副本,否则副本就会不一致。最常见的解决方案是基于主节点的复制(也称 主动/被动或主/从复制),如图-1。

1.1 主从复制原理

  1. 指定某副本为主副本或称为主节点。当客户端向DB写时,必须将请求发给主副本,主副本会将新数据写入其本地存储
  2. 其他副本称为从副本或只读副本,从节点,热备(hot-standby)[^i]。每当主节点将新数据写入本地存储后,也会将数据变更发给所有的追随者,称为复制日志(replication log) 记录或变更流(change stream)。每个从副本获得更改日志之后将其应用到本地,且严格保持与主副本相同的写入顺序
  3. 客户端从DB读数据时,可在主节点或从节点上执行查询。 但只有主节点才能接受写请求。客户端角度,从节点都是只读)

[^i]: 不同的对 热(hot)温(warm)冷(cold) 备份服务器有不同的定义。 如PostgreSQL中,热备(hot standby) 指的是能接受客户端读请求的副本。而 温备(warm standby) 只是追随领导者,但不处理客户端的任何查询。

图-1 主从复制

这种复制模式是许多关系数据库的内置功能,如PostgreSQL(9.0版本开始)、MySQL、Oracle Data Guard和SQL Server的AlwaysOn Availability Groups。 而一些非关系数据库如MongoDB、RethinkDB和Espresso也支持主从复制。 主从复制不仅限于DB:像Kafka、RabbitMQ这样的分布式消息代理也使用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。