leader选举的源码分析

源码分析,最关键的是要找到一个入口,对于zk的leader选举,并不是由客户端来触发,而是在启动的时候会触发一次选举。因此我们可以直接去看启动脚本zkServer.sh中的运行命令

ZOOMAIN就是QuorumPeerMain。那么我们基于这个入口来看

QuorumPeerMain.main方法

main方法中,调用了initializeAndRun进行初始化并且运行

protected void initializeAndRun(String[] args) throws ConfigException, IOException{ 
	//这段代码比较简单,设置配置参数,如果args不为空,可以基于外部的配置路径来进行解析 
	QuorumPeerConfig config = new QuorumPeerConfig(); 
	if (args.length == 1) { 
		config.parse(args[0]); 
	} 
	// 这里启动了一个线程,来定时对日志进行清理,从命名来看也很容易理解 
	DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config.getDataDir(), config.getDataLogDir(), config.getSnapRetainCount(), config.getPurgeInterval()); 
	purgeMgr.start(); 
	// 如果是集群模式,会调用runFromConfig.servers实际就是我们在zoo.cfg里面配置的集群节点 
	if (args.length == 1 && config.servers.size() > 0) { 
		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); 
	} 
}

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/112971584