启动入口
记得在部署zookeeper服务器时候,我们在查看服务器状态时候,是通过jps来查看的
该类是zookeeper集群的启动类,Quorum意思是定额,法定人数,peer 对等的。quorumPeer表示的是每个集群启动后,zookeeper集群的数量已经是确认了,还记得我们在zoo.cfg配置的集群列表,如
server.1=127.0.0.1:2222:2225
server.2=127.0.0.1:3333:3335
server.3=127.0.0.1:4444:4445
所以,如果zookeeper机器需要增加机器来作扩展时,需要重新修改zoo.cf配置信息,重新启动集群机器。
QuorumPeerMain 作了什么?
public static void main(String[] args) {
QuorumPeerMain main = new QuorumPeerMain();
// 初始化配置信息
main.initializeAndRun(args);
}
具体 看下initializeAndRun具体处理什么?
protected void initializeAndRun(String[] args) throws ConfigException, IOException {
// 初始化QuorumPeer配置文件
QuorumPeerConfig config = new QuorumPeerConfig();
if (args.length == 1) {
//解析zoo.cfg配置文件信息
config.parse(args[0]);
}
// 启动清除任务
DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config.getDataDir(), config.getDataLogDir(), config.getSnapRetainCount(), config.getPurgeInterval());
purgeMgr.start();
//判断zookeeper是集群还是单体
if (args.length == 1 && config.servers.size() > 0) {
//集群
this.runFromConfig(config);
} else {
LOG.warn("Either no config or no quorum defined in config, running in standalone mode");
// 单体
ZooKeeperServerMain.main(args);
}
}
QuorumPeerMain大致流程是先初始化QuorumPeerConfig对象,解析zoo.cfg配置文件,映射到QuorumPeerConfig对象里,启动清除任务,在根据初始化的配置信息判断该zookeeper服务配置的是单体还是集群,如果是集群,则启动集群服务,否则启动单体服务。
附上大体的流程图