文章目录

  • 1. Raft协议
    • ①:Leader选举
    • ②:集群节点数据同步
    • ③:发生网络分区,出现脑裂如何处理?

1. Raft协议

Raft协议动态演示图

nacosCP架构是通过Raft协议来实现的,Raft协议和ZAB协议都是分布式一致性协议的实现,两者很类似,主要包括两部分:

  1. Leader选举(半数以上节点投票同意)
  2. 集群节点写入数据同步(两阶段提交,半数以上节点写入成功)

①:Leader选举

集群中各节点有三种状态可以切换:跟随者(Follower)、领导者(Leader)、候选者(Candidater

  • 在进行leader选举时,所有的节点都从跟随者(Follower)状态开始

  • 这些跟随者(Follower)如果没有收到其他leader的心跳,那么他们会变成候选者(Candidater)状态

  • 当然,跟随者(Follower)在成为候选者(Candidater)状态时,并不是只要没接收到Leader心跳就会变换状态,这样是不合理的! Raft协议规定了Follower成为Candidater之前所等待的时间被随机分配在150毫秒至300毫秒之间,尽可能的避免多个节点同时发起投票,造成多节点选票一致的情况。如果出现了多节点选票一致的情况,那么此次选举作废,重新随机分配等待时间,重新发起选举,直到选举成功!

  • 变成候选者(Candidater)的B节点开始向其他节点开始发起投票!

  • 其他节点在接收到B节点的投票请求时,分别给B投一票,并重新为自己随机分配一个150 - 300毫秒的选举时间!

  • B节点获取了大于集群节点一半的选票,变成了领导者Leader

  • 后续B作为Leader会给其他节点发送心跳验证节点存活、同步数据。其他节点接受心跳后会重置变成候选者(Candidater)状态的时间。

  • 如果B节点宕机,A、C节点会通过150 - 300毫秒的随机时间后变为候选者(Candidater)节点,并在AC中选举新的Leader节点!由于C节点收到了A和C(自身)节点的选票,同时 2 > 1.5,所以C变为新的Leader

②:集群节点数据同步

  • 首先客户端集群写数据时,只能向Leader节点中写

  • Leader接收到数据时,并不是马上在Leader节点内部保存数据,并给客户端回应。而是把数据传输给其他节点。

  • 其他节点接收到数据后给Leader返回响应,Leader接收到大多数(可配置,一般为半数以上)Flower节点的响应后,数据才在Leader节点提交,写入Leader节点内部,并响应给客户端写数据成功!

  • Leader响应给客户端写数据成功,然后再通过心跳把数据更新到其他Flower节点下

③:发生网络分区,出现脑裂如何处理?

  • 当多个节点发生了网络分区,就会出现多个Leader,也就是俗称的脑裂现象!
  • 由于Raft协议规定:更新数据时Leader要与Flower节点通信,且必须收到大多数(默认半数)节点的响应才能更新数据成功,下图由于网络分区把5个节点的集群变成了两个分区,分区之间无法通信:
    • B节点作为Leader在他自己的分区内最多接受1个节点响应,1=1(半数),并没有大于半数1,所以无法更新数据,进而无法给客户端更新成功的响应,可以无法对外提供服务,该分区不可用!
    • 而C节点作为Leader在他自己的分区内可以接受2个节点响应,2>1.5(半数),大于半数节点1.5,所以在当前分区内可以正常更新数据,正常给客户端发送成功的响应!
    • 通过这个半数机制,保证即使发生了脑裂,也能保证数据的一致性!
  • 当网络分区恢复后,Leader节点B由于看到Leader节点C拥有更多的选票,就把自己的Leader身份下掉,变为Leader节点C的Flower节点!并回滚自己之前未提交的数据 SET 3。然后通过心跳从Leader节点C同步最新的数据!

分布式一致性协议:Raft协议相关推荐

  1. [分布式一致性协议] ------ raft协议的解释与理解

    前言 在分布式系统中,为了保证容错性,一般会维护多个副本集群,提高系统的高可用,但与之带来的问题就是多个副本的一致性(consensus)问题. 我们认为,对于一个具有一致性的的集群中,同一时刻所有节 ...

  2. 分布式一致性之raft算法

    文章目录 一句话简介ratf算法 分布式一致性的难点 CAP理论 分布式一致性:Raft算法 选举过程 新官上任 根正苗红 仍需努力 一句话简介ratf算法 没听过不要紧,我原先也没听过. Raft ...

  3. 分布式一致性算法Raft简介(上)

    最近看了Ongaro在2014年的博士论文<CONSENSUS: BRIDGING THEORY AND PRACTICE>的部分章节,对raft有了初步的理解.其中论文中提到用于教学的u ...

  4. 分布式一致性算法Raft原理图释

    什么是分布式一致性算法Raft 分布式一致性算法Raft:指在分布式场景下实现集群数据同步的解决方案 掌握了这个算法,就可以较容易地处理绝大部分场景的容错和数据一致性需求 Raft三大角色 跟随者(F ...

  5. 分布式一致性算法Raft

    导语 | 对于很多工程人员来说,Paxos算法不容易理解和落地实现.因此斯坦福学者提出了一个更易理解和实现的共识算法Raft.本文主要介绍Raft的基本原理.算法流程以及和Paxos的区别. 一.Ra ...

  6. 分布式一致性算法Raft简介(下)

    slide 15: 这一节开始讲leader changes,即leader的变更过程中如何保证log的一致性: 1)需要明白的是,新leader上任后,各个server的log状态很可能是不一致的: ...

  7. 浅谈分布式一致性:Raft 与 SOFAJRaft

    简介: SOFAJRaft已开源 作者 | 家纯 来源 | 阿里技术公众号 一 分布式共识算法 (Consensus Algorithm) 1 如何理解分布式共识? 多个参与者针对某一件事达成完全一致 ...

  8. 【Raft】分布式一致性算法Raft和zab、paxos

    目录 前言 Raft算法 Raft动画教程 Raft手动设置模拟 Raft协议说明 Raft和zab区别 paxos算法 前言 开发面试Zookeeper肯定要问,Zab协议逃不掉,那么和 Raft ...

  9. 浅谈分布式一致性算法raft

    前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...

  10. 22张图,带你入门分布式一致性算法Raft

    前言 单点系统的数据是天然一致的,但为了避免单点故障问题,我们引入了分布式系统. 将数据以副本的形式保存在多个节点上,可以有效避免单点故障造成的服务不可用以及数据丢失的情况. 但如何去保证多个节点的一 ...

最新文章

  1. 网络表述学习经典论文——DeepWalk
  2. C#写的NoSQL开源项目/系统(系列)
  3. Kubernetes — kubectl 的基本使用
  4. 不错的东西: AutoMapper
  5. i5 11300H和i5 10300H 的区别
  6. TensorFlow(八)激活函数
  7. ubuntu安装python_ubuntu18.04下源码编译安装最新版本Python3
  8. php文件夹转换网页,PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本...
  9. 再也不怕SVN冲突:轻松解决SVN冲突
  10. 13产品经理要懂的-人性的恶要怎么利用
  11. fscanf不读取_NCNN-Breakdown(3) 读取网络的proto信息
  12. Python画图实战之画K线图【附带自动下载股票数据】
  13. 企业信息化政务信息化浙里办
  14. 请你相信心有多大,舞台就会有多大
  15. 佩服的一个阿里 P9 大佬,离职了...
  16. Canvas绘制抽奖转盘
  17. czl蒻蒟的OI之路8
  18. VLAN trunk扩展 MUXVLAN 原理与实验
  19. 企业名称登记管理规定
  20. oracle数据库scn是什么

热门文章

  1. win10安装python3_win10 64位肿么安装python3.x
  2. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...
  3. js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
  4. JS实现前端动态分页码
  5. webstorm vue代码修改后不更新问题
  6. 纷享逍客宣布完成E+轮融资 长山兴资本领投
  7. LoadRunner解决“服务器正在运行中”方法
  8. MySQL到MsSQL的迁移工具——SSMA
  9. ubuntu 10.04 CTS 环境搭建
  10. 如何将sinaweibo demo project 加入到 Three20UI中