Nacos的CP原则及master选举
2023-11-28 09:16:30 0 举报
Nacos的CP原则及master选举
作者其他创作
大纲/内容
peers.decideLeader(peer);
调用leader节点接口/raft/datum,批量获取信息并进行异步更新信息
peers.makeLeader(remote);设置leader节点
remote.term.get() <= local.term.get()如果小于自己的term就返回自己
GlobalExecutor.registerHeartbeat(new HeartBeat());
GlobalExecutor.registerMasterElection(new MasterElection());
参数为自己ip,并调用其他server的/raft/vote
HeartBeat
build data1、peer--》本地当前数据节点信息2、datums--》本地集群内所有节点信息key
local.heartbeatDueMs-= GlobalExecutor.TICK_PERIOD_MS;间隔时间小于0时,重置时间并可以进行投票
local.term.get() > remote.term.get()leader的term小则返回失败
遍历所有服务器信息,总结投票结果投票出现大于半数时设置leader
local.term.incrementAndGet()设置自己term加一并设置状态为CANDIDATE
broadcast调用其他服务节点的/raft/beat接口发送数据
设置本地为FOLLOWER状态,并投票给对方
peers.isReady()状态开关
是否为单机模式,或为leader节点只有leader节点才能发送心跳
executor.submit(notifier);开始定时任务运行
sendBeat();开始投票
deleteDatum(deadKey);如果本地有key没有进行读取,就是废key信息
RaftCore.init()初始化时
sendVote()开始投票
MasterElection
local.leaderDueMs -= GlobalExecutor.TICK_PERIOD_MS;间隔时间小于0时,重置时间并可以进行投票
remote.state != RaftPeer.State.LEADER不是leader发的信息返回失败
local.state != RaftPeer.State.FOLLOWER当前节点是否是FOLLOWER,如果不是则设置当前节点为FOLLOWER
异步处理ip更新与删除事件
0 条评论
回复 删除
下一页