vlambda博客
学习文章列表

【分布式设计】主从复制

北京伟达极数软件开发
专业互联网设计开发理念,坚定的从客户实际需求出发,定制解决方案。UI设计/APP开发/小程序开发/网站开发/区块链设计。
1篇原创内容
Official Account

【分布式设计】主从复制
【分布式设计】主从复制



【分布式设计】主从复制

一个可能出错的事物与一个不可能出错的事物之间的主要区别是,当一个不可能出错的事物出错了,通常也意味着不可修复

【分布式设计】主从复制  
【分布式设计】主从复制


为什么需要复制?

【分布式设计】主从复制


复制,也就是多台机器节点通过网络传输保存的数据,保持各个节点数据的一致性。
那为什么会需要复制呢?
首要的作用为了保证分布式系统的高可用性,当分布式中的一台机器发生故障时,整个系统可以保持可用。
其次,可以增加系统的吞吐性。数据的复制,使得分布式中的每个机房都可以保持同等的对外服务,可以提高系统服务的高伸缩性,提高吞吐量。
最后,也可以在一定程度上减少延迟。将同样的数据存储在距离用户最近的机房,在保持同等功能服务的同时,可以在一定程度上减少延迟。


在分布式使用中,我们常见的是三种多副本方案:主从复制、多主节点复制、无主节点复制。
主从复制,所有的客户端写操作都会发送到主节点,由主节点将更改数据分发复制到其他从节点。该模式下,所有节点都可以接收读请求,但只有主节点可以接收写请求。
多主复制,与主从复制的不同点在于,多主复制有多个主节点,每个主节点都可以接收写请求,该主节点会将更改数据分发复制到其他主节点和从节点。
无主复制,客户端会直接将写请求发送给多个节点,节点之间保持数据的一致性。

每种方法各有其利弊,其中主从同步是最流行的,我们也会在后续的文章中介绍这几种方案,并具体分析其利弊。


 
【分布式设计】主从复制


主从复制

【分布式设计】主从复制


对于主从复制模式,每个保存数据库完整数据的节点都是一个节点,其中会指定某一个副本作为主节点,其他副本则全部称为从节点。对于每一次的数据写入,从节点都会跟随主节点,保持所有数据的一致性。


【分布式设计】主从复制

主从复制基本工作原理

【分布式设计】主从复制

首先,指定某个副本作为主节点。当客户端有数据写入时,必须将写请求发送到主节点,主节点首先将数据存储到本地。
然后,对于其他副本则都是作为从节点。主节点将数据存储到本地后,会将数据更改作为复制操作的日志或者更改流发送给所有从节点。每个从节点都会接收到更改日志,并将更改日志按照与主节点相同的顺序写入到本地。
最后,主节点和从节点数据保持完全一致。客户端只能从主节点写入数据,在主从同步完成后,客户端可以从主节点和从节点查询数据,读到的数据是完全一致的。


【分布式设计】主从复制

同步复制与异步复制

【分布式设计】主从复制


在主从复制中,主节点会将变更数据发送给从节点,而发送的时机会对复制模型的效率和数据一致性产生较大影响。
同步复制下,主节点会在返回响应到客户端前确保数据已经成功发送给从节点,此时,如果用户接收的成功响应,那么主从多个节点就已经保持一致性。
而在异步复制下,主节点不会等待从节点成功,只要数据在主节点保存成功,就会返回成功响应给客户端。那么如果此时主节点发生故障,而主从未发生同步,那么这部分数据就会丢失。
在实践中,通常会采用半同步方式,也就是保证一部分的从节点已经发送成功,就可以响应到客户端。这样即使主节点发生故障,也可以保证一部分从节点的数据是完整的,从而保持高可用性。


【分布式设计】主从复制

节点失效

【分布式设计】主从复制



分布式中节点总是可能发生故障的,那么复制模式又是如何在节点发生故障时保证高可用性呢?
从节点失效:追赶式恢复
如果从节点发生故障,在节点恢复后,根据其日志,可以知道最后一次处理的消息offset,从节点连接到主节点后,可以从该offset之后的数据开始进行同步。当同步到最新数据后,该从节点也就完全恢复,保持与主节点数据的一致性。
主节点失效:故障转移
当主节点发生故障时,其中一个从节点就会成为一个新的主节点,接收客户端的写请求,同时保持与其他从节点的数据一致性。
一般性的故障转移流程为:
1. 确定主节点故障
2. 选举新的主节点
3. 重新配置的主节点生效。

分布式 专题,持续更新中 ~


点个在看你最好看

【分布式设计】主从复制

北京伟达极数软件开发
专业互联网设计开发理念,坚定的从客户实际需求出发,定制解决方案。UI设计/APP开发/小程序开发/网站开发/区块链设计。
1篇原创内容
Official Account