ZooKeeper下载、安装和测试教程(新手必看)
ZooKeeper 是分布式应用的协调服务,在部署 HBase 伪分布式环境之前,必须先部署 ZooKeeper 集群。
这里需要为 ZooKeeper 增加写的权限,具体代码如下:
配置 ZooKeeper 的环境变量,具体代码如下:
修改 ZooKeeper 的配置文件,具体代码如下:
此时,启动单机版 ZooKeeper,具体代码如下:
对于伪分布式集群的配置方式,由于 B 都是一样的,因此我们需要为不同的 ZooKeeper 服务器通信端口分配不同的端口号。
在各个 dataDir 目录下创建 myid 文件,并存储当前服务器的编号,具体代码如下:
启动第一台服务器时查看到的状态 status 是不可用的,因为集群中节点未在半数以上。集群中奇数个节点和偶数个节点对故障的容忍度是一致的,我们建议配置奇数个 ZooKeeper 节点。
以下代码展示了依次使用配置文件来启动 ZooKeeper 服务:
查看各个节点的状态(需先关闭防火墙),具体代码如下:

图 1 ZooKeeper服务节点的状态
此时,使用 jps 命令查看所有进程,得到的结果如下图所示:

图 2 ZooKeeper服务进程
客户端连接 ZooKeeper 节点所使用的命令如下:
下载并安装ZooKeeper
从官网下载 ZooKeeper 安装包。这里选择 apache-zookeeper-3.6.3-bin.tar.gz,将其解压到 /usr/local 目录下,并重命名。具体代码如下:clinux@master:~$ sudo tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local clinux@master:~$ cd /usr/local clinux@master:~$ sudo mv apache-zookeeper-3.6.3-bin zookeeper3.6.3修改 ZooKeeper 的用户及其权限,防止后面启动 ZooKeeper 服务的时候出现一些无法写入的错误。
这里需要为 ZooKeeper 增加写的权限,具体代码如下:
clinux@master:~$ cd /usr/local clinux@master:~$ sudo chown -R clinux:clinux zookeeper3.6.3 #改变用户 clinux@master:~$ sudo chmod -R u+w zookeeper3.6.3 #增加写权限
配置 ZooKeeper 的环境变量,具体代码如下:
clinux@master:~$ cd ~ #进入家目录 clinux@master:~$ sudo vim .bashrc # Shift+G, 跳到文件末尾,添加以下内容 export ZOOKEEPER_HOME = /usr/local/zookeeper3.6.3 export PATH = .:$ZOOKEEPER_HOME/bin:$PATH保存并退出。运行 source.bashrc,使配置生效。
修改 ZooKeeper 的配置文件,具体代码如下:
clinux@master:~$ cd /usr/local/zookeeper3.6.3/conf clinux@master:~$ sudo cp zoo_sample.cfg zoo.cfg
此时,启动单机版 ZooKeeper,具体代码如下:
clinux@master:~$ zkServer.sh start # 使用默认的配置文件zoo.cfg启动 clinux@master:~$ zkServer.sh status # 查看 clinux@master:~$ zkServer.sh stop # 停止
配置伪分布式的ZooKeeper集群
这里的伪分布式集群部署是指在一台机器上配置多个配置文件,并根据不同的配置文件来启动 ZooKeeper 服务。具体配置如下:clinux@master:~$ cd /usr/local/zookeeper3.6.3/conf clinux@master:~$ sudo cp zoo_sample.cfg zoo1.cfg clinux@master:~$ sudo cp zoo_sample.cfg zoo2.cfg clinux@master:~$ sudo cp zoo_sample.cfg zoo3.cfg在上述配置中,3 个配置文件中的 clientPort 分别为 2181、2182、2183,dataDir 分别为 /usr/local/zookeeper3.6.3/zkData1、/usr/local/zookeeper3.6.3/zkData2、/usr/local/ zookeeper3.6.3/zkData3。手动创建这 3 个目录,并添加写的权限,之后在这 3 个配置文件的末尾添加以下内容:
server.1 = IP:2888:3888 server.2 = IP:2889:3889 server.3 = IP:2890:3890在上述代码结构 server.A = B∶ C∶ D 中:
- A 是一个数字,表示这是第几号服务器;
- B 表示这台服务器的 IP 地址;
- C 表示这台服务器与集群中的 Leader 服务器交换信息的端口(数据同步端口);
- D 表示集群中的 Leader 服务器死机了,需要一个端口重新进行选举,选出一台新的 Leader 服务器,而这个端口是执行选举时服务器相互通信的端口(Leader 选举端口)。
对于伪分布式集群的配置方式,由于 B 都是一样的,因此我们需要为不同的 ZooKeeper 服务器通信端口分配不同的端口号。
在各个 dataDir 目录下创建 myid 文件,并存储当前服务器的编号,具体代码如下:
clinux@master:~$ cd /usr/local/zookeeper3.6.3 clinux@master:~$ sudo touch zkData1/myid clinux@master:~$ sudo touch zkData2/myid clinux@master:~$ sudo touch zkData3/myid clinux@master:~$ sudo -s # 切换到超级权限 clinux@master:~$ echo 1 > zkData1/myid clinux@master:~$ echo 2 > zkData2/myid clinux@master:~$ echo 3 > zkData3/myid
启动并测试ZooKeeper伪分布式集群
依次启动 ZooKeeper 服务。在启动的时候,ZooKeeper 节点通过选举算法依次投票,选举出的 Leader 服务器是 2 号配置文件对应的 ZooKeeper 节点,其他节点则是 Fllower 节点。启动第一台服务器时查看到的状态 status 是不可用的,因为集群中节点未在半数以上。集群中奇数个节点和偶数个节点对故障的容忍度是一致的,我们建议配置奇数个 ZooKeeper 节点。
以下代码展示了依次使用配置文件来启动 ZooKeeper 服务:
clinux@master:~$ zkServer.sh start /usr/local/zookeeper3.6.3/conf/zoo1.cfg clinux@master:~$ zkServer.sh start /usr/local/zookeeper3.6.3/conf/zoo2.cfg clinux@master:~$ zkServer.sh start /usr/local/zookeeper3.6.3/conf/zoo3.cfg
查看各个节点的状态(需先关闭防火墙),具体代码如下:
clinux@master:~$ zkServer.sh status /usr/local/zookeeper3.6.3/conf/zoo1.cfg clinux@master:~$ zkServer.sh status /usr/local/zookeeper3.6.3/conf/zoo2.cfg clinux@master:~$ zkServer.sh status /usr/local/zookeeper3.6.3/conf/zoo3.cfg得到的结果如下图所示:

图 1 ZooKeeper服务节点的状态
此时,使用 jps 命令查看所有进程,得到的结果如下图所示:

图 2 ZooKeeper服务进程
客户端连接 ZooKeeper 节点所使用的命令如下:
clinux@master:~$ zkCli.sh - server localhost:2183 # 退出使用quit命令在 ZooKeeper 完全分布式集群中,配置文件存储在各自所在的服务器上,然后在各自所在的服务器上启动 ZooKeeper 服务进程。