本文主要对ZooKeeper服务端集群模式的启动过程进行简要说明。
整个集群的启动是由QuorumPeerMain这个类负责执行的。在该类的main方法中执行initialzeAndRun()方法,代码如下
protected void initializeAndRun(String[] args)
throws ConfigException, IOException, AdminServerException
{
QuorumPeerConfig config = new QuorumPeerConfig();
if (args.length == 1) {
config.parse(args[0]);
}
// 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()) {
runFromConfig(config);
} else {
LOG.warn("Either no config or no quorum defined in config, running "
+ " in standalone mode");
// there is only server in the quorum -- run as standalone
ZooKeeperServerMain.main(args);
}
}
通过解析配置文件获取服务器的地址,判断本次启动过程是单机模式还是集群模式。如果是集群模式,会执行QuorumPeerMain的runFromConfig()开始集群模式的启动过程。与单机模式不同的是,单机模式的启动,在这里会由ZooKeeperServerMain这个类负责执行,而集群模式,会继续由QuorumPeerMain负责。
至此,整个启动过程已经完成了:
- 创建并且启动一个历史文件清理器DatadirCleanupManager
runFromConfig()方法的代码如下: