1. 程式人生 > >Zookeeper-Zookeeper啟動過程

Zookeeper-Zookeeper啟動過程

在上一篇,我們瞭解了zookeeper最基本的配置,也從中瞭解一些配置的作用,那麼這篇文章中,我們將介紹Zookeeper的啟動過程,我們在瞭解啟動過程的時候還要回過頭看看上一篇中各個配置引數在啟動時的位置。

Zookeeper的啟動入口在org.apache.zookeeper.server.quorum.QuorumPeerMain。

在這個類的main方法裡進入了zookeeper的啟動過程,首先我們會解析配置檔案,即zoo.cfg和myid。

這樣我們就知道了dataDir和dataLogDir指向哪兒了,然後就可以啟動日誌清理任務了(如果配置了的話)。

DatadirCleanupManager purgeMgr = new
DatadirCleanupManager(config .getDataDir(), config.getDataLogDir(), config .getSnapRetainCount(), config.getPurgeInterval()); purgeMgr.start();

接下來會初始化ServerCnxnFactory,這個是用來接收來自客戶端的連線的,也就是這裡啟動的是一個tcp server。在Zookeeper裡提供兩種tcp server的實現,一個是使用java原生NIO的方式,另外一個是使用Netty。預設是java nio的方式,一個典型的Reactor模型。因為java nio程式設計並不是本文的重點,所以在這裡就只是簡單的介紹一下。

//首先根據配置建立對應factory的例項:NIOServerCnxnFactory 或者 NettyServerCnxnFactory
ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
//初始化配置 cnxnFactory.configure(config.getClientPortAddress(),config.getMaxClientCnxns());

建立幾個SelectorThread處理具體的資料讀取和寫出。

先是建立ServerSocketChannel,bind等

this.ss =  ServerSocketChannel.open();
ss.socket().setReuseAddress(
true); ss.socket().bind(addr); ss.configureBlocking(false);

然後建立一個AcceptThread執行緒來接收客戶端的連線。

這一部分就是處理客戶端請求的模組了,如果遇到有客戶端請求的問題可以看看這部分。

接下來就進入初始化的主要部分了,首先會建立一個QuorumPeer例項,這個類就是表示zookeeper叢集中的一個節點。初始化QuorumPeer的時候有這麼幾個關鍵點:

1. 初始化FileTxnSnapLog,這個類主要管理Zookeeper中的操作日誌(WAL)和snapshot。

2. 初始化ZKDatabase,這個類就是Zookeeper的目錄結構在記憶體中的表示,所有的操作最後都會對映到這個類上面來。

3. 初始化決議validator(QuorumVerifier->QuorumMaj) (其實這一步,是在配置)。這一步是從zoo.cfg的server.n這一部分初始化出叢集的成員出來,有哪些需要參與投票(follower),有哪些只是observer。還有決定half是多少等,這些都是zookeeper的核心。在這一步,對於每個節點會初始化一個QuorumServer物件,並且放到allMembers,votingMembers,observingMembers這幾個map裡。而且這裡也對參與者的個數進行了一些判斷。

4. leader選舉 這一步非常重要,也是zookeeper裡最複雜而最精華的一部分。

到這裡,我們的zookeeper就啟動完成了。後面我將會分三部分進一步深入理解zookeeper:

1. leader選舉

2. 儲存

3. 處理客戶端請求

相關推薦

Zookeeper詳解(七):Zookeeper集群啟動過程和Leader選舉

文件 信息 accep upm ron factory 通信 pan actor Zookeeper集群啟動過程預啟動統一由QuorumPeerMain作為啟動類讀取zoo.cfg配置文件創建並啟動歷史文件清理器DatadirCleanupManager判斷當前是集群模式還

zookeeper原始碼分析之一服務端啟動過程

zookeeper簡介      zookeeper是為分散式應用提供分散式協作服務的開源軟體。它提供了一組簡單的原子操作,分散式應用可以基於這些原子操作來實現更高層次的同步服務,配置維護,組管理和命名。zookeeper的設計使基於它的程式設計非常容易,若我們熟悉目錄樹結構的檔案系統,也會很容易使用zoo

Zookeeper-Zookeeper啟動過程

在上一篇,我們瞭解了zookeeper最基本的配置,也從中瞭解一些配置的作用,那麼這篇文章中,我們將介紹Zookeeper的啟動過程,我們在瞭解啟動過程的時候還要回過頭看看上一篇中各個配置引數在啟動時的位置。 Zookeeper的啟動入口在org.apache.zookeeper.server.quorum

Telnet 測試zookeeper是否啟動成功

linux telnet zookeeper kafka 在linux環境下,有些情況下,我們想看下是否成功啟動了Zookeeper,可以才用telnet的方式Steps: login in the linux os input the command: telnet localhost

ZK—zookeeper無法啟動,報“Unable to load database on dis”

zookeeper問題描述:部署zookeeper的服務器磁盤滿了,引起服務異常,將zookeeper進程殺掉之後,重新啟動zookeeper啟動的時候顯示成功了: [root@slave-2 bin]# ./zkServer.sh start ZooKeeper JMX enabled by default

Zookeeper叢集啟動錯誤

1.錯誤提示 ERROR [main:[email protected]] - Invalid config, exiting abnormally [[email protected] bin]# ./zkServer.sh status ZooKeepe

kafka叢集與zookeeper叢集 配置過程

Kafka的叢集配置一般有三種方法,即     (1)Single node – single broker叢集;     (2)Single node – multiple broker叢集;    (3)Multiple node – multiple broker叢集。     前兩種方法官網上有配置過

zookeeper叢集啟動報錯ZooKeeper JMX enabled by default...解決方案

1. 上傳zookeeper到linux伺服器,並解壓縮/opt/install中 2. zookeeper_home/conf    zoo_sample.cfg 改名 成 zoo.cfg    cp zoo_sample.cfg zoo.cfg 3. 修改zoo.cfg

Linux下配置zookeeper開機啟動

第一種:直接修改/etc/rc.d/rc.local檔案 在/etc/rc.d/rc.local檔案中需要輸入兩行,其中export JAVA_HOME=/usr/java/jdk1.8.0_112是必須要有的,否則開機啟動不成功,大家根據自己JDK安裝的位置自

HA 模式下的 Hadoop+ZooKeeper+HBase 啟動順序

一. 背景 1.1 網路上的大部分教程的順序 1. 啟動順序 Hadoop ZooKeeper HBase 第二個HMaster 2. 停止順序 第二個 HMaster,kill-9 刪除 Hbase ZooKeeper Hadoop Note:網上

zookeeper選主過程(轉)

大致為: 假如一共五臺機器 A B C D E分別的id為 1 2 3 4 5 啟動了A時,A投給自己一票。A總票數1,未滿足一半以上,機器狀態looking 又啟動了C時, A投給C一票,C投給自己一票。A票數為0,C票數為2,未滿足一半以上,機器狀態looking 又啟動了

解決Zookeeper無法啟動的問題

今天在啟動zookeeper叢集的單個zookeeper節點時總是報如下錯誤 [[email protected] zookeeper-3.4.5]# bin/zkServer.sh status JMX enabled by default Using co

myid檔案缺失導致zookeeper無法啟動(myid file is missing)

myid檔案缺失 現象 :zookeeper無法啟動; 異常 :$dataDir/myid file is missing; 原因 :zk叢集中的節點需要獲取myid檔案內容來標識該節點,缺失

linux系統下zookeeper啟動異常:Error contacting service. It is probably not running.

原來異常資訊: 網上對於這個異常的解答眾說紛紜,現在總結一下我的解決方案: 因為我用的zookeeper的版本是zookeeper-3.4.6,然後我原來的jdk用的是jdk-8u191-linux-x64.tar.gz,我解除安裝之後重新安裝了一個jdk,這次的版本是jdk-7u79-

redis,dubbo安裝方式,zookeeper啟動方式

1.redis啟動方式,直接啟動bin目錄下的 2.zookeeper啟動方式 3.dubbo啟動方式 下載https://github.com/alibaba/dubbo 進入dubbo的下載包進行執行命令達成war包 執行命令 mvn install

zookeeper叢集啟動時報Connection refused錯誤

zookeeper叢集啟動時報錯 Cannot open channel to 3 at election address zk03/192.168.128.103:3888 java.net.ConnectException: Connection refused    

zookeeper節點啟動失敗

環境:zookeeper版本號:3.4.6,三個節點。 有一臺伺服器重啟了,用zkServer.sh  start 啟動是出錯,資訊如下: [2016-10-11 10:47:49,715] ERROR Unable to load database on disk (o

linux zookeeper開機啟動

1、在zkEnv.sh中指定當前使用者jdk環境變數 export JAVA_HOME=/usr/local/src/jdk1.7.0_55/ 2、在/etc/rc.d/init.d資料夾下建立zookeeper檔案 內容: #!/bin/bash #chkconfig:2345 20 90 case $1

Zookeeper , storm 啟動

http://blog.csdn.net/kongxx/article/details/41015817 http://blog.csdn.net/kongxx/article/details/41015817 http://blog.csdn.net/kongxx/art

zookeeper 叢集啟動時 出現 Error contacting service. It is probably not running 的解決辦法

在 zookeeper 叢集配置成功後,啟動時顯示正常啟動個,但是輸入命令檢視狀態時報錯!!! 錯誤資訊:Error contacting service. It is probably not