mysql为什么不用raft_对Raft的理解

最近刚读完Raft 的paper,所以趁热打铁,来一篇读后感。

1、Raft是做什么的?

简单说Raft是一套共识算法,解决分布式系统中多个副本的一致性问题,通过多副本来进行容错,以此在提高系统可用性。通常在单机数据库场景中,如MySQL通过主从节点同步binlog,从节点挂掉后,主从切换保证主的高可用,不过大家都知道MySQL的复制机制(多采用异步或者半同步)很难保证主从切换后数据是无损的。为了解决这个问题,MySQL5.7.12版本推出来组复制,其中另一套共识算法paxos。Raft是paxos的一个变种,共识算法是构建强一致分布式系统的基石,Raft是共识算法中的佼佼者。

2、Raft如何解决一致性问题?

Raft将一致性问题分解为三个相对独立的子问题

(1)Leader election

(2)Log replication

(3)Safety(leader变更时的安全性)

3、Raft协议的关键点?

选举安全特性:Raft 协议保证了在任意一个term内,最多只有一个 leader,leader节点拥有所有已提交的日志。

多数派副本间要么自己选为了leader,要么别人成了leader,要么没有选出leader。对于没有选出leader的情况,为了避免一直出现选不出leader的情况出现。Raft采用一种简单的方法:为每个Candidate的election timeout从150ms-300ms之间随机取分配一个值,那么第一个超时的Candidate就可以发起新一轮的选举,然后成为leader。

日志匹配原则:Raft保证每个副本日志append的

你可能感兴趣的:(mysql为什么不用raft)