实验目的

熟悉Zookeeper的安装与配置操作。

实验原理

Zookeeper 的核心是广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播 模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后, 恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。为了保证事务的顺序一致性,Zookeeper 采用了递增的事务id号 (zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用 来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

实验步骤

本文采用伪集群模式配置Zookeeper ,即在一台机器上模拟3个 zookeeper server的集群安装。

1.到Apache ZooKeeper官网下载安装包:http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/,本文使用zookeeper-3.4.8版本

2.解压到/home/hadoop目录下

# tar -zxvf zookeeper-3.4.6.tar.gz -C /home/hadoop

3.进入/home/hadoop/zookeeper-3.4.8/conf目录,配置三个实例:

(1)配置第一个实例

# cp zoo_sample.cfg zoo1.cfg
# vi zoo1.cfg
 配置内容如下:
tickTime=2000
clientPort=2181 
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeperdata/1 
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

各个参数的意义:

  • tickTime:心跳检测的时间间隔(毫秒),缺省:2000
  • clientPort:其他应用(比如solr)访问ZooKeeper的端口,缺省:2181
  • initLimit:初次同步的阶段(followers连接到leader的阶段),允许的时长(tick数量),缺省:10
  • syncLimit:允许followers同步到ZooKeeper的时长(tick数量),缺省:5
  • dataDir:数据(比如所管理的配置文件)的存放路径,初始时应该为空
  • server.X:X是ensemble中一个服务器的id,后面指定该server的hostname、第一个端口号用于ZooKeeper之间的通信、第二个端口用于和其他应用之间的通信

(2)配置第二个实例

# cp zoo1.cfg zoo2.cfg

修改:dataDir=/var/lib/zookeeperdata/2

修改:clientPort=2182

(3)配置第三个实例

# cp zoo1.cfg zoo3.cfg

修改:dataDir=/var/lib/zookeeperdata/3

修改:clientPort=2183

4.每个zookeeper的instance,都需要设置独立的数据存储目录、日志存储目录,所以dataDir、dataLogDir这二个节点对应的目录,需要手动先创建好。在每个zookeeper server配置文件的dataDir所对应的目录下,必须创建一个名为myid的文件,其中的内容必须与zoo.cfg中server.x 中的x相同。创建相应的dataDir目录和myid文件:

# cd /var/lib
# mkdir zookeeperdata
# cd zookeeperdata
# mkdir 1
# mkdir 2
# mkdir 3
# echo "1" > 1/myid
# echo "2" > 2/myid
# echo "3" > 3/myid

生产环境中,由于各zookeeper server分布在不同的机器,上述配置文件中的localhost换成各服务器的真实Ip即可。分布在不同的机器后,不存在端口冲突问题,可以让每个服务器的zk均采用相同的端口,这样管理起来比较方便。

5.启动ZooKeeper

# cd <ZOOKEEPER_HOME>
# bin/zkServer.sh start ./conf/zoo1.cfg
# bin/zkServer.sh start ./conf/zoo2.cfg
# bin/zkServer.sh start ./conf/zoo3.cfg

启动结果:

6.用jps命令查看进程

其中,QuorumPeerMain 就是zookeeper 进程。

7.可以启动客户端测试

bin/zkCli.sh -server localhost:2181

成功后,会进到提示符下,类似下面这样:

results matching ""

    No results matching ""