持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情
副本(replica):每个存储数据库完整数据集的节点。当存在多副本,不可避免产生问题:如何确保所有数据落在了所有副本?
每次向DB的写操作都需传播到所有副本,否则副本就会不一致。最常见的解决方案是基于主节点的复制(也称 主动/被动或主/从复制),如图-1。
主从复制原理
- 指定某副本为主副本或称为主节点。当客户端向DB写时,必须将请求发给主副本,主副本会将新数据写入其本地存储
- 其他副本称为从副本或只读副本,从节点,热备(hot-standby) i。每当主节点将新数据写入本地存储后,也会将数据变更发给所有的追随者,称为复制日志(replication log) 记录或变更流(change stream) 。每个从副本获得更改日志之后将其应用到本地,且严格保持与主副本相同的写入顺序
- 客户端从DB读数据时,可在主节点或从节点上执行查询。 但只有主节点才能接受写请求。客户端角度,从节点都是只读)
[i] 不同的对 热(hot) ,温(warm) ,冷(cold) 备份服务器有不同的定义。 如PostgreSQL中,热备(hot standby) 指的是能接受客户端读请求的副本。而 温备(warm standby) 只是追随领导者,但不处理客户端的任何查询。
这种复制模式是许多关系数据库的内置功能,如PostgreSQL(9.0版本开始)、MySQL、Oracle Data Guard和SQL Server的AlwaysOn Availability Groups。 而一些非关系数据库如MongoDB、RethinkDB和Espresso也支持主从复制。 主从复制不仅限于DB:像Kafka、RabbitMQ这样的分布式消息代理也使用。