脚本宝典收集整理的这篇文章主要介绍了raft简单回答,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。@H_304_0@1. 三个状态:⼀个节点任⼀时刻处于三者之⼀
1,leader(领导者): 主节点,与客户端的通讯,还有与follower从节点的的数据同步与心跳机制的维护。
2,follower(追随者):从节点,转发客户端的请求到leader节点,保持与leader节点的数据同步。
3,candidate(候选者):候选人,该节点状态下表示现在是选举主从节点的时间点,作为候选人,既有可能成为leader,也有可能成为follower。
term属性表示投票的轮数,vote属性就是代表各个节点投票的时候,该节点选择投的那个节点。
log日志每个节点都持有一份,每个日志文件包含: index索引号,term任期号,以及term任期号下的数据信息
raft和zookeePEr一样都采用 过半选举 的机制,所以我们推荐raft的实现同ookeeper一样,也是奇数个节点部署。
假设abc三个节点
1.三个节点进行启动的时候, 首先进入candidate(候选者)的状态 ,然后进行投票选举,所有的节点都会在本地创建一个 term属性,并且初始化值为0 ,然后每个节点都会设置一个 随机数的倒计时(150~300ms) ,那个节点先结束倒计时,他就会先给自己投一票且设置自己的term=1,即携带(vote = 自己)的投票请求给其他两个节点。
2.假设C先结束,这个时候节点A和B还没有结束倒计时,A和B在收到C的投票请求之后,首先会比较收到的term和自己的term作比较,比自己的大就投给C投票,然后响应投票请求。
3.当C节点只收到过半投自己的票的响应,C就成为learder节点,剩下节点就会 从candidate(候选者)状态转为follower(追随者)。
4.为了防止learder主节点发生单点故障问题,就是每个follower节点在和leader节点维持心跳的时候,都会设置一个 超时时间(timeout) ,当follower节点在等待leader节点的心跳请求的时候如果超过了这个超时时间,就会认为leader出现了异常,进而会 重新进入candidate状态 ,然后重新选举。
如果客户端请求先发送到了follower节点,会先转发到leader。
1.leader先对follower节点进行两阶段提交,看每个follower节点能不能同步。
2.leader判断过半的节点都可以进行同步,leader先进行数据存储,并记录日志 ,直接返回给客户端成功的响应。
3.然后follower进行数据存储,并记录日志。
以上是脚本宝典为你收集整理的raft简单回答全部内容,希望文章能够帮你解决raft简单回答所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。