同步過程
leader接收到的來自某個follower封包一定是FOLLOWERINFO,該封包告知了該服務器保存的數(shù)據(jù)id.之后根據(jù)這個數(shù)據(jù)id與本機保存的數(shù)據(jù)進行比較:
- 如果數(shù)據(jù)完全一致,則發(fā)送DIFF封包告知follower當前數(shù)據(jù)就是最新的了.
- 判斷這一階段之內(nèi)有沒有已經(jīng)被提交的提議值,如果有,那么:
- 如果有部分數(shù)據(jù)沒有同步,那么會發(fā)送DIFF封包將有差異的數(shù)據(jù)同步過去.同時將follower沒有的數(shù)據(jù)逐個發(fā)送COMMIT封包給follower要求記錄下來.
- 如果follower數(shù)據(jù)id更大,那么會發(fā)送TRUNC封包告知截除多余數(shù)據(jù).
- 如果這一階段內(nèi)沒有提交的提議值,直接發(fā)送SNAP封包將快照同步發(fā)送給follower.
以上消息完畢之后,發(fā)送UPTODATE封包告知follower當前數(shù)據(jù)就是最新的了,再次發(fā)送NEWLEADER封包宣稱自己是leader,等待follower的響應.