首页 / ZOOKEEPER / ZooKeeper启动过程
ZooKeeper启动过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ZooKeeper启动过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1710字,纯文字阅读大概需要3分钟。
内容图文
ZooKeeper启动过程
1.如何启动
zkServer.sh【Linux】或 zkServer.cmd【Windows】
以zkServer.cmd为例(zkServer.sh中内容太多):
可以清晰的看出:调用了QuorumPeerMain这个类,传的参数为%ZOOCFG%【在zkEnv.cmd中定义,就是zoo.cfg】。
到QuorumPeerMain类中一看,果然有个main方法,且接受一个参数【配置文件路径】:
当然,接受的参数不是一个也没关系,只不过就不能集群了,只能以单机模式运行。仅当接受一个参数作为配置文件路径,且此配置文件没有设置为单机模式,才会开启ZooKeeper集群启动过程【上图120行,runFromConfig】。
2.启动过程源码分析
runFromConfig:
可以看出,程序转移到了QuorumPeer,首先设置一系列zoo.cfg中的属性值,而后start,QuorumPeer继承了Thread类,自然转到了QuorumPeer.run()。
run方法太长了,精简了一下,只留了骨架:
- @Override
- public void run() {
- /// JMX...
- try {
- /*
- * Main loop
- */
- while (running) {
- switch (getPeerState()) {
- case LOOKING:
- /// ...
- setCurrentVote(makeLEStrategy().lookForLeader());
- /// ...
- break;
- case OBSERVING:
- try {
- setObserver(makeObserver(logFactory));
- observer.observeLeader();
- } catch (Exception e) {
- } finally {
- observer.shutdown();
- setObserver(null);
- updateServerState();
- }
- break;
- case FOLLOWING:
- try {
- setFollower(makeFollower(logFactory));
- follower.followLeader();
- } catch (Exception e) {
- } finally {
- follower.shutdown();
- setFollower(null);
- updateServerState();
- }
- break;
- case LEADING:
- try {
- setLeader(makeLeader(logFactory));
- leader.lead();
- setLeader(null);
- } catch (Exception e) {
- } finally {
- if (leader != null) {
- leader.shutdown("Forcing shutdown");
- setLeader(null);
- }
- updateServerState();
- }
- break;
- }
- }
- } finally {
- /// clear JMX
- }
- }
可以看出,只要没有stop或者没有异常抛出,这个线程便一直在运行,没有后续更多的操作了,全部在这个循环里。
到此为止,ZooKeeper集群中的这一个节点【Peer】启动完毕。
从run()方法可以清晰的看到,ZooKeeper中的节点可以有四种状态:
- LOOKING
- OBSERVING
- FOLLOWING
- LEADING
其中,getPeerState()方法中state初始化为LOOKING,因此每一个节点启动时的状态都是LOOKING。
下一步,就是参与投票,选出ZooKeeper集群的Leader,见下篇文章:ZooKeeper FastLeaderElection算法。
原文:http://www.cnblogs.com/catWang/p/4120671.html
内容总结
以上是互联网集市为您收集整理的ZooKeeper启动过程全部内容,希望文章能够帮你解决ZooKeeper启动过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。