首页 > 体育 >

分布式强一致性数据库的灵魂-Raft 算法(3)

2018-06-01 22:14:30 网络整理 阅读:70 评论:0

Log Replication

一个新的Leader被选出来之后就会开始工作了,它会不停的去接收客户端发送过来的请求,这些请求都会通过log落地,而这些log一定要是单调递增,以保证数据的一致性。

之后log会被复制到其他的节点,绝大多数节点都接收到这个log后, Leader就认为该log是committed的。

Membership Change

对于分布式集群来说添加节点其实是分成困难的操作,最常见的做法是先更改配置中心,然后将新的配置同步到旧的节点。不过这样在同步配置的时候,就需要停止外部服务。而Raft采用了一种动态的成员节点变更,它会将新的节点到当作Raft log通过Leader传递给其他节点,这样其他节点就知道了这个新的节点的信息。不过这个过程中有可能会在某一阶段出现2个Leader的情况,为了避免这种情况就要每次只变更一个节点,而不进行多节点变更。

Raft也提供了一种多节点变更的算法,它是一种两阶段提交,,Leader在第一阶段会同时将新旧集群的配置同时当成一个Raft log发送给其他旧集群节点,当这些节点接收到数据后就会和新的集群节点进入join状态,所有的操作都要进过新旧集群的大多数节点同意才会执行,然后在新的join状态内重新提交新的配置信息,在配置被committed后新的节点会上线,旧的节点会下线。Optimization

Pre-Vote

在Follow处于网络抖动无法接受到Leader的消息的时候,它就会变成Candidate并且Term加一,但是其他集群其实还是在正常工作的,这样整个集群的就混乱了。

Pre-Vote机制会在Follow没有接收到Leader的消息并且开始投票之前进入Pre-Candidate状态,在想其他节点发送投票请求,并获得同意后才会进入Candidate状态。

Pipeline

相关文章