本文主要對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....