redis哨兵模式准备----Raft算法
2022-09-20 14:40:11 0 举报
redis哨兵模式准备----Raft算法
作者其他创作
大纲/内容
a收到两票,当选为leader节点
这个过程叫:日志复制
leader
Leader为每个Follower记录了一个nextIndex标记,nextIndex初始化为Leader最后一个日志项的Index+1
AppendEntry RPC
还可以用单节点变更算法
candidate
RequestVote RPC
节点失联,收不到leader心跳,从而不断增大自己的term,这种情况怎么办?
心跳消息复用日志消息的格式,但是不带任何内容。
如果在这个选举周期内,其他节点还没有进行投票,就会把票投给candidate
C
follower
1、设置Term=1;2、投票给自己;3、向其他节点请求选票;
日志不一致
通过nextIndex保证
a节点等待大部分节点将a写入自己节点的entry中。
如果有两个同时成为candidate呢?如何选举呢
7、从节点收到心态信息后,会重置自己的选举超时时间
PreVote算法
1.假设B节点首先过了选举超时时间则B节点变成candidate节点
选举超时
A
如果follower日志确实该怎么办?
Node aTerm:0
联合共识算法:1、集群扩容时,可能新上线机器配置和线上的配置不一致,则会出现两个leader的情况;2、raft先将集群切换至过渡配置阶段(joint consistent),一旦joint consistent,则系统会全部切换至新配置;
B
Node cTerm:0
面试题:1、raft如何解决脑裂问题(分区的时候会出现脑裂问题)?----选举一个区域的leaderhttps://www.jianshu.com/p/072380e12657?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes2、raft如何优化?--批量发送,并行发送https://pingcap.com/zh/blog/optimizing-raft-in-tikv
系统中所有的改变都需要先经过leader
在选举超时时间内,没有收到leader节点的心跳,则变成candidate节点
Node bTerm:0
将5复制到其他节点
6、B会每隔一段时间发送信息给A,C
A,C回复B的信息,并且重置选举超时时间。
Raft(实现分布式一致性的协议)算法目的:保证分布式下的数据一致性
如何向集群写入数据?
涉及三个RPC
负责选票
这个间隔时间就叫:“心跳超时”时间
联合共识模式需要满足三个条件
a通知其他节点:5这个entry的状态已经变更成“已提交”
如果follower节点没有收到leader心跳,则自己变成candidate状态,假设a首先变成candidate状态
leader初始化后,会存在两个条目:nextIndex[]:下一次发送日志的索引;matchIndex[]:已经提交到服务器的条目最高索引;
然后向其他节点申请选票
成员变更如何保证不出现两个leader呢?
开始新的投票周期
InstallSnapshot RPC
节点会有三种状态:
5、晋升为leader
2、发选票
选举超时时间来控制
Leader 在向 Follower 发送 AppendEntries 消息时会发现一致性问题,一旦不一致,那么 NextIndex 减 1
两个超时时间控制选举
这个选举超时时间是随机的一般150ms~200ms之间
a将log entry的状态变成“已提交”
1、candidate节点请求其他节点投票;2、其他节点投票。3、candidate节点如果收到大部分选票,就会晋升为leader节点。
集群中一次加入一个节点
利用“选举超时”时间来控制谁先到达candidate状态。
各个节点重置自己的“选举超时”时间
以上过程是“”Leader 选举“”
所有的节点一开始都是follower状态
假设B断开连接诶
3、A和C一看,在新的投票周期Term=1内,自己还没有投票,于是投票给B;同时更新自己的投票周期
Node aTerm:0Vote Count:null
1、选举超时;2、心跳超时;
其他节点写入成功后,发送消息给leader节点
只能响应leader的消息
利用preVote算法能解决
1、a收到5;2、a将5保存在当前节点的log entry中;3、5这个log entry的状态是“未提交”
假设此时B断开连接了,则A,C在‘心跳超时时间’内收不到B发来的追加entry信息了,那么A和C就会有一个率先过了“选举超时时间”,晋升为candidate节点。新一轮选举开始,选举周期Term=2,A和C必有一个获得两票成为leader。
Raft算法过程
至此:集群保证了数据一致性。
D
follower可以生成属于自己的快照,这不违背一致性;
使用联合共识算法
选举超时之后:follower节点会变成candidate节点,然后开始一个新的选举周期,首先投票给自己。
set 5 给a
0 条评论
回复 删除
下一页