您好,登錄后才能下訂單哦!
本篇內容主要講解“zk中leader和follower啟動時信息交互分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“zk中leader和follower啟動時信息交互分析”吧!
QuorumPeer中讀取節點狀態信息,不同狀態下設置不同角色
1 Leader啟動Follower接收器LearnerCnxAcceptor
LearnerCnxAcceptor負責接收非leader連接請求,線程中創建LearnerHandler處理器
2 Learner發起和leader的連接
Follower.followLeader()
Observer.observeLeader()
3 leader啟動時會創建LearnerHandler
每個learnerHandler實例都對應一個leader和learner之間的連接,負責消息通信和
數據同步
4 向leader注冊
learner和leader連接后。會向leader注冊,即learner服務器基礎信息
LearnerInfo zxid,sid發送給leader服務器
5 leader 接收到learner信息 服務器算出最新epoch
@Override public long getEpochToPropose(long sid, long lastAcceptedEpoch) throws InterruptedException, IOException { synchronized (connectingFollowers) { if (!waitingForNewEpoch) { return epoch; } if (lastAcceptedEpoch >= epoch) { epoch = lastAcceptedEpoch + 1; } if (isParticipant(sid)) { connectingFollowers.add(sid); } QuorumVerifier verifier = self.getQuorumVerifier(); if (connectingFollowers.contains(self.getId()) && verifier.containsQuorum(connectingFollowers)) { waitingForNewEpoch = false; self.setAcceptedEpoch(epoch); connectingFollowers.notifyAll(); } else { long start = Time.currentElapsedTime(); if (sid == self.getId()) { timeStartWaitForEpoch = start; } long cur = start; long end = start + self.getInitLimit() * self.getTickTime(); while (waitingForNewEpoch && cur < end && !quitWaitForEpoch) { connectingFollowers.wait(end - cur); cur = Time.currentElapsedTime(); } if (waitingForNewEpoch) { throw new InterruptedException("Timeout while waiting for epoch from quorum"); } } return epoch; } }
到此,相信大家對“zk中leader和follower啟動時信息交互分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。