本文主要介紹了zookeeper啟動的過程
執行zkserver.sh start命令可以啟動zookeeper。入口的main函式在類中quorumpeermain。
main函式主要呼叫了runfromconfig函式,建立了
quorumpeer物件,並且呼叫了start函式,從而啟動了zookeeper。
public class quorumpeermain
protected void initializeandrun(string args)
throws configexception, ioexception
public void runfromconfig(quorumpeerconfig config) throws ioexception catch (interruptedexception e)
}}
在quorumpeer的start函式中,先呼叫了
loaddatabase方法用於恢復資料。啟動與client互動的執行緒,並
@override
public synchronized void start() catch(ioexception ie)
cnxnfactory.start(); //用於處理與client的互動
startleaderelection();//開始選舉演算法
super.start();
}
呼叫loaddatabase從磁碟載入資料到記憶體
public long loaddatabase() throws ioexception
};long zxid = snaplog.restore(datatree,sessionswithtimeouts,listener);
initialized = true;
return zxid;
}
呼叫quorumpeer的run函式,按照peer的state做不同的處理
@override
public void run() catch (exception e)
break;
case observing:
try catch (exception e) finally
break;
case following:
try catch (exception e) finally
break;
case leading:
log.info("leading");
try catch (exception e) finally
setpeerstate(serverstate.looking);
}break;}}
} }
ZooKeeper原始碼分析
業餘時間學習了一下zookeeper distributed process coordination這本書的內容,對zookeeper實現的細節很好奇,所以順便把zookeeper原始碼看了一遍。看完之後想寫點內容做個筆記,確發現不好開始。由於zookeeper乙個完整的邏輯的 可能在多個執行緒,...
zookeeper的原始碼分析
閱讀本文可以帶著下面問題 1.zookeeper客戶端有幾部分組成?2.那個模組管理所有網路 io的模組?3.watcher是否允許多個 client 對乙個或多個 znode 進行監控?4.zookeeper例項被建立時,會隨之建立幾個執行緒,各自是什麼?5.真正處理網路 io的是那個執行緒?模組...
zookeeper領導者選舉原始碼分析
基於版本3.4.13 quorumcnxmanager主要負責和其他節點資料傳輸 sendqueue 選票傳送佇列,用於儲存待傳送的選票。recvqueue 選票接收佇列,用於儲存接收到的外部投票。workerreceiver 選票接收器。其會不斷地從quorumcnxmanager中獲取其他伺服器...