=====================================斩秋|http://blog.csdn.net/quhongwei_zhanqiu=======================================
Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程。首先我们来看下QuorumPeer, 谷歌翻译quorum是法定人数,定额的意思, peer是对等的意思,那么QuorumPeer中quorum代表的意思就是每个zookeeper集群启动的时候集群中zookeeper服务数量就已经确定了,在每个zookeeper的配置文件中配置集群中的所有机器
server.1=127.0.0.1:2886:3886
server.2=127.0.0.1:2887:3887
server.3=127.0.0.1:2888:3888
事实上着也确定zookeeper在运行中是不能动态扩容的,必须停下服务修改配置才可以;QuorumPeer中peer代表就是集中每个zookeeper角色是对等的没有主从之分,每个zookeeper服务都可以成为leader, follower,observer。
1. QuorumPeerMain加载
1) QuorumPeerConfig读取配置文件,如下面的zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/workspace_zookeeper/data1
clientPort=2181
server.1=127.0.0.1:2886:3886
server.2=127.0.0.1:2887:3887
server.3=127.0.0.1:2888:3888
如上配置中每个server.X记录代表集群中的一个服务,QuorumPeerConfig会构建一个QuorumServer对象,其中的server.X中的X代表zookpeer的sid,每个zookeeper都会编辑自己的sid在dataDir目下的myid文件中,sid标记每个服务,在快速选举中起作用
server.X后值代表zookeeper服务地址ip以及选举其中zookeeper之间连接的端口
2)启动定时清理服务任务DatadirCleanupManager.start() 用来清除过期的txtLog和snapshot文件
3)构建QuorumPeer任务对象
3.1)设置供客户端连接的端口地址
3.2)设置txtLog和snapshot的操作对象FileTxnSnaplog
3.3)设置本Zookeeper的myid(sid)
3.4)设置客户端连接工厂
3.5)设置选举算法
3.6)各种时间设置等等
4)QuorumPeer.start()启动任务线程
=====================================斩秋|http://blog.csdn.net/quhongwei_zhanqiu=======================================