Zookeeper 原始碼分析 啟動

2021-09-02 03:48:45 字數 1452 閱讀 2920

本文主要介紹了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中獲取其他伺服器...