标签:term zookeeper nacos leader follower euaka raft 节点
1.SpringCloud Alibaba 微服务架构(十四)- Nacos集群部署原理解析
https://thinkingcao.blog.csdn.net/article/details/109776410
2. raft算法以及nacos中的实现
学习资料:https://blog.csdn.net/microGP/article/details/114261089nacos是基于raft算法是实现的,raft算法是分布式系统一致性算法, Raft算法的头号目标就是容易理解(UnderStandable),这从论文中就可以看出来。当然,Raft增强了可理解性,在性能、可靠性、可用性方面是不输于Paxos的。建议大家拜读下作者的论文Raft论文。
一.选取主节点
raft协议中,一个节点任一时刻处于以下三个状态之一:
leader:主节点
follower:从节点
candidate:候选节点
可以看出所有节点启动时都是follower状态;在一段时间内如果没有收到来自leader的心跳,从follower切换到candidate,发起选举;如果收到N/2+1的赞成票(含自己的一票)则切换到leader状态;如果发现其他节点已经是leader,则主动切换到follower。

term:
关于term,网上没有什么特别好的解释,这里暂且认为是一个逻辑计数,用来证明谁是最新的,越大就说明节点数据越新,越应该成为leader。
以nacos选举为例,具体讲下选举过程:
1.三个节点刚启动的时候,此时都是follower,nacos先从缓存中加载数据,默认term是0
masterTask 是follower长时间没收到心跳就选举的定时任务,设置的是500ms一次
heartbeatTask 是心跳定时任务 500ms秒一次

MasterElection实现了Runnable方法,满足条件下,进行sendVote

sendVote
超过半数,设置成leader


2.与其他节点比较的代码
判断本地的term值和远程的term值,谁大则选谁

3.如果第一次没有N/2+1个以上的ip选举成功,0.5s后发起另外一次请求,前面说过,每个节点发起投票的时候是不一样的,所以term增加的值是不一样的,所以总是会出现某个term较大,选举成功。一直不成功的概念极小。

二.数据同步 日志同步
当系统有了leader后,系统就进入对外工作期了。客户端的一切请求来发送到leader,leader来调度这些并发请求的顺序,并且保证leader与followers状态的一致性。在 raft 集群中,所有日志都必须首先提交至 leader 节点。leader 在每个 heartbeat 向 follower 同步日志。

在nacos中的实现:
raft算法首先要把信息同步给leader,由leader分发给所有follower

具体流程可见 https://www.processon.com/view/5e25b762e4b04579e409e81f
https://blog.csdn.net/liyanan21/article/details/89320872
三.safety:安全实现的保障机制
上面讲的都是正常情况下,对于异常情况,也需要有对应的处理策略。
好像并没有,通过客户端的心跳检测机制,自动恢复数据
标签:term,zookeeper,nacos,leader,follower,euaka,raft,节点 来源: https://www.cnblogs.com/kelelipeng/p/16625183.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。