ZooKeeper服務端啟動過程 集群模式

2021-08-21 09:48:23 字數 3129 閱讀 7607

本文主要對zookeeper服務端集群模式的啟動過程進行簡要說明。

整個集群的啟動是由quorumpeermain這個類負責執行的。在該類的main方法中執行initialzeandrun()方法,**如下

protected void initializeandrun(string args)

throws configexception, ioexception, adminserverexception

// start and schedule the the purge task

datadircleanupmanager purgemgr = new datadircleanupmanager(config

.getdatadir(), config.getdatalogdir(), config

.getsnapretaincount(), config.getpurgeinterval());

purgemgr.start();

if (args.length == 1 && config.isdistributed()) else

}

通過解析配置檔案獲取伺服器的位址,判斷本次啟動過程是單機模式還是集群模式。如果是集群模式,會執行quorumpeermain的runfromconfig()開始集群模式的啟動過程。與單機模式不同的是,單機模式的啟動,在這裡會由zookeeperservermain這個類負責執行,而集群模式,會繼續由quorumpeermain負責。

至此,整個啟動過程已經完成了:

runfromconfig()方法的**如下:

public void runfromconfig(quorumpeerconfig config)

throws ioexception, adminserverexception

catch (jmexception e)

log.info("starting quorum peer");

try

if (config.getsecureclientportaddress() != null)

quorumpeer = getquorumpeer();

quorumpeer.settxnfactory(new filetxnsnaplog(

config.getdatalogdir(),

config.getdatadir()));

quorumpeer.enablelocalsessions(config.arelocalsessionsenabled());

quorumpeer.enablelocalsessionsupgrading(

config.islocalsessionsupgradingenabled());

quorumpeer.setelectiontype(config.getelectionalg());

quorumpeer.setmyid(config.getserverid());

quorumpeer.setticktime(config.getticktime());

quorumpeer.setminsessiontimeout(config.getminsessiontimeout());

quorumpeer.setmaxsessiontimeout(config.getmaxsessiontimeout());

quorumpeer.setinitlimit(config.getinitlimit());

quorumpeer.setsynclimit(config.getsynclimit());

quorumpeer.setconfigfilename(config.getconfigfilename());

quorumpeer.setzkdatabase(new zkdatabase(quorumpeer.gettxnfactory()));

quorumpeer.setquorumverifier(config.getquorumverifier(), false);

if (config.getlastseenquorumverifier()!=null)

quorumpeer.initconfiginzkdatabase();

quorumpeer.setcnxnfactory(cnxnfactory);

quorumpeer.setsecurecnxnfactory(securecnxnfactory);

quorumpeer.setlearnertype(config.getpeertype());

quorumpeer.setsyncenabled(config.getsyncenabled());

quorumpeer.setquorumlistenonallips(config.getquorumlistenonallips());

// sets quorum sasl authentication configurations

quorumpeer.setquorumsaslenabled(config.quorumenablesasl);

if(quorumpeer.isquorumsaslauthenabled())

quorumpeer.setquorumcnxnthreadssize(config.quorumcnxnthreadssize);

quorumpeer.initialize();

quorumpeer.start();

quorumpeer.join();

} catch (interruptedexception e)

}

在runfromconfig中做的工作可以歸納如下

public

synchronized

void

start()

loaddatabase();

startservercnxnfactory();

try catch (adminserverexception e)

startleaderelection();

super.start();

}

在start()方法裡主要完成以下幾個工作

zookeeper 服務端配置詳解

1 datadir 用於存放記憶體資料庫快照的資料夾,同時用於集群的myid檔案也存在這個資料夾裡。2 datalogdir 用於單獨設定transaction log的目錄,transaction log分離可以避免和普通log還有快照的競爭。3 ticktime 心跳時間,為了確保client ...

服務端啟動流程

這一小節,我們來學習一下如何使用 netty 來啟動乙個服務端應用程式,以下是服務端啟動的乙個非常精簡的 demo public class nettyserver serverbootstrap.bind 8000 我們的最小化引數配置到這裡就完成了,我們總結一下就是,要啟動乙個netty服務端,...

ZooKeeper啟動過程

zookeeper啟動過程 zkserver.sh linux 或 zkserver.cmd windows 以zkserver.cmd為例 zkserver.sh中內容太多 能夠清晰的看出 呼叫了quorumpeermain這個類,傳的引數為 zoocfg 在zkenv.cmd中定義。就是zoo....