節(jié)點(diǎn)總是處于以下三種狀態(tài)之一:跟隨者、候選人或領(lǐng)導(dǎo)者。所有節(jié)點(diǎn)最初都是作為跟隨者開(kāi)始的。在這種狀態(tài)下,他們可以接受來(lái)自領(lǐng)導(dǎo)者的日志條目(如果其中一個(gè)已經(jīng)當(dāng)選),或者為領(lǐng)導(dǎo)者投票。如果在一段時(shí)間內(nèi)沒(méi)有接收到日志條目或心跳(例如,5 秒),節(jié)點(diǎn)將自己提升到候選狀態(tài)。在候選狀態(tài)中,節(jié)點(diǎn)從其他節(jié)點(diǎn)請(qǐng)求選票。如果候選人獲得法定人數(shù)的選票,那么他就被提升為領(lǐng)導(dǎo)者。領(lǐng)導(dǎo)者必須接受新的日志條目并將其復(fù)制到跟隨者。
快照:
如果一個(gè)排序節(jié)點(diǎn)宕機(jī),它如何在重新啟動(dòng)時(shí)獲得它丟失的日志?
雖然可以無(wú)限期地保留所有日志,但是為了節(jié)省磁盤空間,Raft 使用了一個(gè)稱為 “快照” 的過(guò)程,在這個(gè)過(guò)程中,用戶可以定義日志中要保留多少字節(jié)的數(shù)據(jù)。這個(gè)數(shù)據(jù)量將決定區(qū)塊的數(shù)量(這取決于區(qū)塊中的數(shù)據(jù)量。注意,快照中只存儲(chǔ)完整的區(qū)塊)。
例如,假設(shè)滯后副本 R1 剛剛重新連接到網(wǎng)絡(luò)。它最新的區(qū)塊是 100。領(lǐng)導(dǎo)者 L 位于第 196 塊,并被配置為快照 20 個(gè)區(qū)塊。R1 因此將從 L 接收區(qū)塊 180,然后為區(qū)塊 101 到 180 區(qū)塊 分發(fā) 請(qǐng)求。然后 180 到 196 的區(qū)塊將通過(guò)正常 Raft 協(xié)議復(fù)制到 R1。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.