安装启动zookeeper
在 Apache zookeeper 官网下载 https://www.apache.org/dyn/closer.cgi/zookeeper/
下载后解压,笔者使用的是3.4.5版本。
解压后看到如下文件结构:
zookeeper-3.4.5
+--bin
+--conf
+contrib
+--docs
+--lib
+src
+--...
其中 conf目录下是zk的配置文件;
bin目录下是zk的服务端、客户端启动脚本;
lib放置了zk依赖的第三方jar包。
下载的zk的conf目录下存在一个 zoo_sample.cfg文件,这是个参考样本,我们复制一份且重命名为zoo.cfg(这是zk启动的配置文件名)。
zoo.cfg 配置文件
zoo.cfg 配置文件主要有以下配置参数:
>tickTime=2000 #毫秒,心跳时间;默认会话最小时间是该值的2倍
>initLimit=10 # 10倍的tickTime,
>syncLimit=5 # 5倍的tickTime,发起请求与获得确认的时间
>dataDir=/tmp/zookeeper # 快照的存储目录,tmp只是一个参考样例,实际生产以有意义的命名
>clientPort=2181 # 供客户端连接的端口
启动zookeeper
执行bin目录下的启动脚本,windows环境启动执行zkServer.cmd。其他环境则启动zkServer.sh。一个sk server 就启动了。
zkCli.cmd 默认连接localhost的zk server。
单机环境下zookeeper集群配置
在zk的官网中给出了集群配置简单示例:
zoo.cfg:
# 伪集群设置
# 第一个端口是节点连接其他节点的端口,用于节点间通信,具体的讲,zk server 使用这个端口连接follower和leader。
# 当一个新的leader诞生,一个follower 打开一个TCP连接到leader,使用这个端口2888.
#因为选举leader也是使用TCP,所以需要另一个端口3888来做选举用。
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
1、2、3 是集群节点的server ID值,zool1-zool3是节点的ip地址。
- 第一个端口是节点连接其他节点的端口,用于节点间通信,具体的讲,zk server 使用这个端口连接follower和leader。当一个新的leader诞生,一个follower 打开一个TCP连接到leader,就是使用的这个端口2888.
- 因为集群选举leader也是使用TCP,所以需要另一个端口3888来做选举用。
集群配置文件
第一步 集群配置
在 zoo.cfg 中添加集群配置:
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
第二步 复制zookeeper
然后复制一份zookeeper,到同级目录,且重命名,如下图所示:
第三步 zoo.cfg 配置
修改集群的zoo.cfg 配置
指定存储目录
相应的节点(比如第二个节点):dataDir=E:\111softwares\zookeeper-3.4.5\zookeeper-3.4.5.2\oyy\zookeeper
myid, 在dataDir指定的目录创建服务id文件 ,myid , 里面仅仅写入 各个服务的server ID: 比如第一个zk下的myid内容仅仅写入1.
分别启动3个zk,服务, 在日志中会输出该服务当前的角色: FOLLOWER、LEADER
2018-09-13 09:46:27,928 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:ZooKeeperServer@162] - Created server with tickTime 6000 minSessionTimeout 12000 maxSessionTimeout 120000 datadir E:\111softwares\zookeeper-3.4.5\zookeeper-3.4.5\oyy\zookeeper\version-2 snapdir E:\111softwares\zookeeper-3.4.5\zookeeper-3.4.5\oyy\zookeeper\version-2
2018-09-13 09:46:27,931 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@63] - FOLLOWING - LEADER ELECTION TOOK - 303
2018-09-13 09:46:27,959 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Learner@325] - Getting a snapshot from leader
2018-09-13 09:45:40,225 [myid:3] - INFO [QuorumPeer[myid=3]/0:0:0:0:0:0:0:0:2183:ZooKeeperServer@162] - Created server with tickTime 6000 minSessionTimeout 12000 maxSessionTimeout 120000 datadir E:\111softwares\zookeeper-3.4.5\zookeeper-3.4.5.3\oyy\zookeeper\version-2 snapdir E:\111softwares\zookeeper-3.4.5\zookeeper-3.4.5.3\oyy\zookeeper\version-2
2018-09-13 09:45:40,241 [myid:3] - INFO [QuorumPeer[myid=3]/0:0:0:0:0:0:0:0:2183:Leader@345] - LEADING - LEADER ELECTION TOOK - 3276
2018-09-13 09:45:40,246 [myid:3] - INFO [QuorumPeer[myid=3]/0:0:0:0:0:0:0:0:2183:FileTxnSnapLog@240] - Snapshotting: 0x0 to E:\111softwares\zookeeper-3.4.5\zookeeper-3.4.5.3\oyy\zookeeper\version-2\snapshot.0
2018-09-13 09:45:40,262 [myid:3] - INFO [LearnerHandler-/127.0.0.1:62665:LearnerHandler@263] - Follower sid: 2 : info : org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer@e93d656
2018-09-13 09:45:40,319 [myid:3] - INFO [LearnerHandler-/127.0.0.1:62665:LearnerHandler@318] - Synchronizing with Follower sid: 2 maxCommittedLog=0x0 minCommittedLog=0x0 peerLastZxid=0x0
2018-09-13 09:45:40,319 [myid:3] - INFO [LearnerHandler-/127.0.0.1:62665:LearnerHandler@395] - Sending DIFF