建议在阅读本笔记之前先观看此网址的动画Raft 分布式共识算法动画演示

首先bRaft是实现分布式共识的协议,一个节点可以处于三种状态:Follower跟随者状态,Candidate候选者状态,Leader领导者状态。

而所有的节点都以跟随者状态开始,如果Follower没有收到Leader的来信,那么他们可以成为Candidate。然后,Candidate从其他节点请求投票,节点将以他们的投票进行回复。如果Candidate从多数节点获得选票,它将成为Leader,这个过程称为:Leader Election。

而系统的所有更改现在都要通过Leader,每次更改都将添加为节点日志中的条目。要提交条目,节点首先将其复制到Follower节点,然后Leader等待直到大多数节点都写了该条目。现在,条目已提交到Leader节点上,Leader就会通知Follower该条目已提交。此过程称为Log Replication日志复制。

在bRaft中,有两个超时设置可控制选举。首先是election timeout选举超时,指Follower跟随者成为Candidate之前所等待的时间(election timeout被随机分配在150ms~300ms之间)。在选举超时后,Follower成为Candidate并开始新的election term选举任期,向自己投票并向其他节点发送Request Vote请求投票消息。如果接收节点在这个term内还没有投票,那么它将投票给Candidate,并且节点将重置其election timeout选举超时。Leader开始向Follower发送Append Entries追加条目消息,这些消息以heartbeat timeout心跳超时指定的时间间隔发送,Follower然后响应每个Append Entries追加条目消息。此选举term将持续到Follower停止接收心跳并成为Candidate为止。

下面是对8200主机日志的解析:

初始化配置

I1128 10:04:08.378159  3109 /home/kim/braft/example/block/server.cpp:499] Succeed to add raft service
I1128 10:04:08.526701  3109 /home/kim/incubator-brpc/src/brpc/server.cpp:1070] Server[braft::RaftStatImpl+braft::FileServiceImpl+braft::RaftServiceImpl+example::BlockServiceImpl+braft::CliServiceImpl] is serving on port=8200.
I1128 10:04:08.538360  3109 /home/kim/incubator-brpc/src/brpc/server.cpp:1073] Check out http://ubuntu:8200 in web browser.
I1128 10:04:08.548694  3109 /home/kim/braft/example/block/server.cpp:509] Server started
I1128 10:04:08.548768  3109 /home/kim/braft/example/block/server.cpp:87] Create directory ./data
I1128 10:04:08.548804  3109 /home/kim/braft/example/block/server.cpp:94] Open ./data/data
I1128 10:04:08.548823  3109 /home/kim/braft/example/block/server.cpp:102] Parse configuration 127.0.1.1:8200:0,127.0.1.1:8201:0,127.0.1.1:8202:0,'
I1128 10:04:08.565145  3109 /home/kim/braft/src/braft/log.cpp:687] Use crc32c as the checksum type of appending entries
W1128 10:04:08.565195  3109 /home/kim/braft/src/braft/protobuf_file.cpp:91] open file failed, path: ./data/log/log_meta: FILE_ERROR_NOT_FOUND
W1128 10:04:08.565210  3109 /home/kim/braft/src/braft/log.cpp:698] ./data/log is empty
I1128 10:04:08.581316  3109 /home/kim/braft/src/braft/log.cpp:1150] log save_meta ./data/log/log_meta first_log_index: 1 time: 16072
I1128 10:04:08.581417  3109 /home/kim/braft/src/braft/snapshot.cpp:463] Deleting ./data/snapshot/temp
W1128 10:04:08.581487  3109 /home/kim/braft/src/braft/protobuf_file.cpp:91] open file failed, path: ./data/raft_meta/raft_meta: FILE_ERROR_NOT_FOUND
I1128 10:04:08.581509  3109 /home/kim/braft/src/braft/raft_meta.cpp:525] Loaded single stable meta, path ./data/raft_meta term 1 votedfor 0.0.0.0:0:0 time: 15
I1128 10:04:08.581525  3109 /home/kim/braft/src/braft/node.cpp:605] node Block:127.0.1.1:8200:0 init, term: 1 last_log_id: (index=0,term=0) conf: 127.0.1.1:8200:0,127.0.1.1:8201:0,127.0.1.1:8202:0 old_conf:

8200主机从Follower状态变为wakeup_a_candidate = 0

V89 1128 10:04:08.581534  3109 /home/kim/braft/src/braft/node.cpp:613] node Block:127.0.1.1:8200:0 term 1 start snapshot_timer
V89 1128 10:04:08.581818  3109 /home/kim/braft/src/braft/node.cpp:1759] node Block:127.0.1.1:8200:0 term 1 stepdown from FOLLOWER new_term 1 wakeup_a_candidate=0 //wake up candidate 0主机
V89 1128 10:04:08.581833  3109 /home/kim/braft/src/braft/node.cpp:3295] node Block:127.0.1.1:8200:0 reset ConfigurationCtx when stage is STAGE_NONE already

初始化raft node,Block start;

term 1 8200主机开始pre_vote,并收到8201主机PrevoteResponse,8200主机开始vote并且vote self(投了自己1票);

然后term 1 stop election_timer,此时8200主机的状态变为Candidate。

I1128 10:04:08.581844  3109 /home/kim/braft/example/block/server.cpp:118] Init raft node
I1128 10:04:08.581850  3109 /home/kim/braft/example/block/server.cpp:515] Block started
I1128 10:04:08.581855  3109 /home/kim/braft/example/block/server.cpp:516] Block service is running on 0.0.0.0:8200
I1128 10:04:14.154292  3115 /home/kim/braft/src/braft/node.cpp:3631] node.cpp:3631 ElectionTimer::run has been run
I1128 10:04:14.156661  3115 /home/kim/braft/src/braft/node.cpp:1032] node.cpp:1032 has been run
I1128 10:04:14.156766  3115 /home/kim/braft/src/braft/node.cpp:1050] empty_id 0.0.0.0:0:0
I1128 10:04:14.156832  3115 /home/kim/braft/src/braft/node.cpp:1055] node.cpp:1055 has been run
I1128 10:04:14.158257  3115 /home/kim/braft/src/braft/node.cpp:1056] after reset_leader_id empty_id is0.0.0.0:0:0status isLost connection from leader 0.0.0.0:0:0
I1128 10:04:14.158461  3115 /home/kim/braft/src/braft/node.cpp:1583] node Block:127.0.1.1:8200:0 term 1 start pre_vote
I1128 10:04:14.240395  3125 /home/kim/braft/src/braft/node.cpp:1508] node Block:127.0.1.1:8200:0 received PreVoteResponse from 127.0.1.1:8201:0 term 1 granted 1 rejected_by_lease 0 disrupted 0
I1128 10:04:14.240452  3125 /home/kim/braft/src/braft/node.cpp:1648] node Block:127.0.1.1:8200:0 term 1 start vote and grant vote self
V89 1128 10:04:14.240476  3125 /home/kim/braft/src/braft/node.cpp:1657] node Block:127.0.1.1:8200:0 term 1 stop election_timer

term 2开始进行vote,并start vote_timer;

8200主机收到8202主机的invalid PrevoteResponse、8201主机的RequestVoteResponse;

然后8200主机成为group 8200、8202、8202主机的Leader;

既然8200主机已经成为Leader,那么现在就要把8201和8202主机加入这个group。

V89 1128 10:04:14.240503  3125 /home/kim/braft/src/braft/node.cpp:1674] node Block:127.0.1.1:8200:0 term 2 start vote_timer
I1128 10:04:14.245972  3125 /home/kim/braft/src/braft/raft_meta.cpp:468] raft_meta.cpp:468 has been run
I1128 10:04:14.246001  3125 /home/kim/braft/src/braft/raft_meta.cpp:477] term 2
I1128 10:04:14.246067  3125 /home/kim/braft/src/braft/raft_meta.cpp:478] votedfor 127.0.1.1:8200:0
I1128 10:04:14.261737  3125 /home/kim/braft/src/braft/raft_meta.cpp:550] Saved single stable meta, path ./data/raft_meta term 2 votedfor 127.0.1.1:8200:0 time: 15623
W1128 10:04:14.265337  3129 /home/kim/braft/src/braft/node.cpp:1475] node Block:127.0.1.1:8200:0 received invalid PreVoteResponse from 127.0.1.1:8202:0 ctx_version 2 current_ctx_version 3
I1128 10:04:14.269894  3131 /home/kim/braft/src/braft/node.cpp:1399] node Block:127.0.1.1:8200:0 received RequestVoteResponse from 127.0.1.1:8201:0 term 2 granted 1 rejected_by_lease 0 disrupted 0
I1128 10:04:14.270289  3131 /home/kim/braft/src/braft/node.cpp:1901] node Block:127.0.1.1:8200:0 term 2 become leader of group 127.0.1.1:8200:0,127.0.1.1:8201:0,127.0.1.1:8202:0
V89 1128 10:04:14.270342  3131 /home/kim/braft/src/braft/node.cpp:1924] node Block:127.0.1.1:8200:0 term 2 add replicator 127.0.1.1:8201:0 //新加入一个节点
I1128 10:04:14.273728  3131 /home/kim/braft/src/braft/replicator.cpp:141] Replicator=2207613190149@127.0.1.1:8201:0 is started, group Block
V89 1128 10:04:14.279730  3131 /home/kim/braft/src/braft/replicator.cpp:571] node Block:127.0.1.1:8200:0 send HeartbeatRequest to 127.0.1.1:8201:0 term 2 prev_log_index 0 last_committed_index 0
V89 1128 10:04:14.280214  3131 /home/kim/braft/src/braft/node.cpp:1924] node Block:127.0.1.1:8200:0 term 2 add replicator 127.0.1.1:8202:0
I1128 10:04:14.280261  3131 /home/kim/braft/src/braft/replicator.cpp:141] Replicator=3307124817921@127.0.1.1:8202:0 is started, group Block

8200主机发送一个AppendEntriesRequest、心跳请求(HeartbeatRequest)分别给8201、8202主机,并收到了AppendEntriesRequest:prev_log_index 0 prev_log_term 0 count 0 success;

至此8200主机的日志分析结束,后面是重复发送心跳的过程。

V89 1128 10:04:14.280292  3131 /home/kim/braft/src/braft/replicator.cpp:571] node Block:127.0.1.1:8200:0 send HeartbeatRequest to 127.0.1.1:8202:0 term 2 prev_log_index 0 last_committed_index 0
V89 1128 10:04:14.300388  3118 /home/kim/braft/src/braft/replicator.cpp:460] node Block:127.0.1.1:8200:0 received AppendEntriesResponse from 127.0.1.1:8201:0 prev_log_index 0 prev_log_term 0 count 0 success
I1128 10:04:14.315370  3129 /home/kim/braft/src/braft/log.cpp:114] Created new segment `./data/log/log_inprogress_00000000000000000001' with fd=12
W1128 10:04:14.316049  3121 /home/kim/braft/src/braft/node.cpp:1366] node Block:127.0.1.1:8200:0 received invalid RequestVoteResponse from 127.0.1.1:8202:0 ctx_version 1 current_ctx_version 2 // ?
V89 1128 10:04:14.315390  3118 /home/kim/braft/src/braft/replicator.cpp:685] node Block:127.0.1.1:8200:0 send AppendEntriesRequest to 127.0.1.1:8201:0 term 2 last_committed_index 0 prev_log_index 0 prev_log_term 0 next_index 2 count 1
V89 1128 10:04:14.325486  3125 /home/kim/braft/src/braft/replicator.cpp:460] node Block:127.0.1.1:8200:0 received AppendEntriesResponse from 127.0.1.1:8202:0 prev_log_index 0 prev_log_term 0 count 0 success
V89 1128 10:04:14.327936  3125 /home/kim/braft/src/braft/replicator.cpp:685] node Block:127.0.1.1:8200:0 send AppendEntriesRequest to 127.0.1.1:8202:0 term 2 last_committed_index 0 prev_log_index 0 prev_log_term 0 next_index 2 count 1
V89 1128 10:04:14.339571  3128 /home/kim/braft/src/braft/replicator.cpp:460] node Block:127.0.1.1:8200:0 received AppendEntriesResponse from 127.0.1.1:8202:0 prev_log_index 0 prev_log_term 0 count 1 success
V89 1128 10:04:14.339615  3128 /home/kim/braft/src/braft/replicator.cpp:473] Group Block replicated logs in [1, 1] to peer 127.0.1.1:8202:0
I1128 10:04:14.346185  3122 /home/kim/braft/example/block/server.cpp:421] Configuration of this group is 127.0.1.1:8200:0,127.0.1.1:8201:0,127.0.1.1:8202:0
I1128 10:04:14.346858  3122 /home/kim/braft/src/braft/node.cpp:3300] node Block:127.0.1.1:8200:0 reset ConfigurationCtx, new_peers: 127.0.1.1:8200:0,127.0.1.1:8201:0,127.0.1.1:8202:0, old_peers: 127.0.1.1:8200:0,127.0.1.1:8201:0,127.0.1.1:8202:0
V89 1128 10:04:14.349476  3121 /home/kim/braft/src/braft/replicator.cpp:460] node Block:127.0.1.1:8200:0 received AppendEntriesResponse from 127.0.1.1:8201:0 prev_log_index 0 prev_log_term 0 count 1 success
V89 1128 10:04:14.349517  3121 /home/kim/braft/src/braft/replicator.cpp:473] Group Block replicated logs in [1, 1] to peer 127.0.1.1:8201:0
V89 1128 10:04:14.359150  3121 /home/kim/braft/src/braft/replicator.cpp:749] node Block:127.0.1.1:8201:0 wait more entries, wait_id 1

Braft--工作日记相关推荐

  1. 电信宽带服务器维护,电信网络维护部工作日记

    以下是无忧考网为大家整理的关于电信网络维护部工作日记的文章,希望大家能够喜欢! 6月22日 晴 期待已久的实习终于在今天开始了,由于沟通上的原因,崇明电信这边的工作人员晚了两天通知我去实习.我也迫不及 ...

  2. haimianjie工作日记:2023年6月

    只有坚持复盘,哪些吹过的牛逼方能完成 1.历史文章 我的工作日记:2023年3月 再见2022,你好2023:八年程序媛老兵的践行.思考与展望 我的工作日记:2023年4月 我的工作日记:2023年5 ...

  3. 工作日记 day01

    今天是我入职的第一天,我决定从今天开始写一写工作日记,记录一下日常,方便以后的学习和工作,希望我可以坚持下去,如果各位大佬比较闲还可以监督我! 早上七点五十上班,上午来了之后比较闲,人事小姐姐让填了入 ...

  4. 写作小课堂:用日记提升写作能力(三类内容非常值得写:工作日记、读书心得和特殊的经历。)

    文章目录 前言 I 第一类:工作日记 1.1 亚历山大·贝尔和格雷关于发明权的争议 II 第二类:读书的心得和收获 III 第三类:对特殊经历的感受,特别是失败的经历 IV 日记怎么写 4.1 首先, ...

  5. 速卖通描述 html,产品详细描述编写技巧-速卖通工作日记3

    产品详细描述编写技巧-速卖通工作日记3 本文发表于2014年3月,现在看来这篇文章还是实用的. 在16号的时候出单我的速卖通第一笔订单,虽然金额不大但是对自己是一个非常大的鼓励.这两天一直在研究产品的 ...

  6. 我的web前端工作日记1------web前端经验

    转载请注明出处:https://blog.csdn.net/dreamer_sen/article/details/82143519 在公司干坐了一天,觉得应该找点事做.所以,就有了记录自己前端工作的 ...

  7. haimianjie工作日记:2023年5月

    只有坚持复盘,哪些吹过的牛逼方能完成 1.历史文章 我的工作日记:2023年3月 再见2022,你好2023:八年程序媛老兵的践行.思考与展望 我的工作日记:2023年4月 2.计划与原则 2.1 元 ...

  8. 我的web前端工作日记11------在腾讯外包的这一年

    说在前面的话 本文只是大概说一下自己在腾讯做了一年前端外包的收获和一些心得感悟,希望自己能客观的描述,能给一些后来者参考取舍,看是否值得去腾讯做外包.写的没啥逻辑,都是想到啥就写啥,所以大家将就着看看 ...

  9. 微软雅黑console_【工作日记03】使用console输出网站logo彩蛋

    工作日记是笔者记录在日常工作中对负责的前端项目和任务的总结和提炼,在工作中寻乐趣,在代码中找灵魂,输出工作中有价值有意思的沉淀,分享知识,娱乐自己.wx:wxid_wdjyyo939vja22 相信大 ...

  10. 我觉的应该写工作日记了!

    已经工作一周多了!早应该写工作日记了! 第一天工作是正月19我也忘了是几好!第一天工作是去买电脑!虽然是个二手的但是配置却相当的高是我用过的最高 配置的电脑了!p43.2/512 533/128/相当 ...

最新文章

  1. ElasticSearch教程——汇总篇
  2. 全检体系结构风格浅谈
  3. JAVA的三种常量池
  4. MongoDB可视化工具--Robo 3T 使用教程
  5. SQL语句的添加、删除、修改多种方法
  6. 地图投影系列介绍(四)----投影坐标系
  7. 竞赛图 计算机网络 应用题,我校学子获2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛一等奖(图)...
  8. 【Git】Python项目依赖库过大无法提交的问题
  9. Hi3559av100安装linux,海思hi3559AV100开发板参数规格介绍
  10. 写作就像升级打怪,4个实战技巧让你“写什么都很棒”!
  11. 爱数助力国资委实现混合IT环境下的业务保护
  12. C++知识点(三)函数
  13. 计算机的实现的理论基础
  14. git源码安装后报错:bash: /usr/bin/git: No such file or directory
  15. matlab生成流程图,matlab做流程图
  16. 澳洲ASIC监管-AR牌照
  17. 舞蹈模特欣欣(六)棚拍私房 大家看看像小龙女(李若彤)吗?
  18. 实现权重抽奖算法(java)
  19. 解码 解密微信电脑版image文件夹下缓存的用户图片 dat文件解码解密查看方法
  20. 如何截取视频片段 批量截取片段的方法 1

热门文章

  1. SpringBoot搭建SSM框架项目,支持JSP页面
  2. Unity资产,特殊文件夹以及重要路径
  3. Caysn打印机IOS平台打印示例及接口说明文档 - 20161008
  4. 文献检索、筛选和阅读
  5. ewiews面板回归模型操作_Eviews如何完成回归分析?完成回归分析操作流程介绍
  6. SA-NET: SHUFFLE ATTENTION FOR DEEP CONVOLUTIONAL NEURAL NETWORKS
  7. html5 放鞭炮效果,flash制作鞭炮的爆炸效果(不需AS)
  8. oracle ra hcustomers,EBS 11i升级R12详解
  9. 安卓手机怎么设置禁止使用流量_安卓手机流量使用警告提醒关闭方法
  10. OKEx强势上线FILUSDT永续合约 Filecoin已成未来趋势