【Zookeeper讀書筆記-5】服務端啓動過程

1. 預啓動

    1. 統一由QuorumPeerMain作爲啓動類。無論單機或集羣,在zkServer.cmd和zkServer.sh中都配置了QuorumPeerMain作爲啓動入口類。

    2. 解析配置文件zoo.cfg。zoo.cfg配置運行時的基本參數,如tickTime、dataDir、clientPort等參數。

    3. 創建並啓動歷史文件清理器DatadirCleanupManager。對事務日誌和快照數據文件進行定時清理。

    4. 判斷當前是集羣模式還是單機模式啓動。若是單機模式,則委託給ZooKeeperServerMain進行啓動。

                     4.1 如何判斷是單機模式還是集羣模式?

                             

 

單機版本啓動,observers是HashMap結構,其元素個數是0,因此本地配置的servers中的HashMap結構元素是1,即localhost,因此,此處將servers中的數據清除。

以下是QuorumPeerConfig中parseProperties方法中的部分代碼。

因此,此處下文中的config.serves.size()個數是0,即if條件不滿足,轉入ZookeeperServerMain.main(args),執行單機版本。

args是配置的zoo.cfg路徑。

 

    5. 再次進行配置文件zoo.cfg的解析。

    6. 創建服務器實例ZooKeeperServer。Zookeeper服務器首先會進行服務器實例的創建,然後對該服務器實例進行初始化,包括連接器、內存數據庫、請求處理器等組件的初始化。

2. 初始化

    1. 創建服務器統計器ServerStats。ServerStats是Zookeeper服務器運行時的統計器。

    2. 創建Zookeeper數據管理器FileTxnSnapLog。FileTxnSnapLog是Zookeeper上層服務器和底層數據存儲之間的對接層,提供了一系列操作數據文件的接口,如事務日誌文件和快照數據文件。Zookeeper根據zoo.cfg文件中解析出的快照數據目錄dataDir和事務日誌目錄dataLogDir來創建FileTxnSnapLog。

    3. 設置服務器tickTime和會話超時時間限制。

    4. 創建ServerCnxnFactory。通過配置系統屬性zookeper.serverCnxnFactory來指定使用Zookeeper自己實現的NIO還是使用Netty框架作爲Zookeeper服務端網絡連接工廠。

    5. 初始化ServerCnxnFactory。Zookeeper會初始化Thread作爲ServerCnxnFactory的主線程,然後再初始化NIO服務器。

    6. 啓動ServerCnxnFactory主線程。進入Thread的run方法,此時服務端還不能處理客戶端請求。

    7. 恢復本地數據。啓動時,需要從本地快照數據文件和事務日誌文件進行數據恢復。

    8. 創建並啓動會話管理器。Zookeeper會創建會話管理器SessionTracker進行會話管理。

    9. 初始化Zookeeper的請求處理鏈。Zookeeper請求處理方式爲責任鏈模式的實現。會有多個請求處理器依次處理一個客戶端請求,在服務器啓動時,會將這些請求處理器串聯成一個請求處理鏈。

    10. 註冊JMX服務。Zookeeper會將服務器運行時的一些信息以JMX的方式暴露給外部。

    11. 註冊Zookeeper服務器實例。將Zookeeper服務器實例註冊給ServerCnxnFactory,之後Zookeeper就可以對外提供服務。

  至此,單機版的Zookeeper服務器啓動完畢。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章