1. 准备工作
1.1. 集群规划

1.2. 下载
1.3. 安装
-
解压缩文件,到常用软件安装位置。
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz # 移动文件到指定位置 cp -r ./apache-zookeeper-3.5.7-bin/* /指定目录/zookeeper-3.5.7 & rm -rf apache-zookeeper-3.5.7-bin
2. 修改配置
2.1. 配置 dataDir 和 myid
-
创建
zkData目录cd /指定目录/zookeeper-3.5.7 mkdir zkData cd zkData -
修改 myid 为 1
vim myid1 -
保存退出
-
编辑 cfg 文件
cd ../conf mv zoo_sample.cfg zoo.cfg vim zoo.cfg -
修改以下内容:
dataDir=/指定目录/zookeeper-3.5.7/zkData#######################cluster########################## server.1=hadoop102:2888:3888 server.2=hadoop103:2888:3888 server.3=hadoop104:2888:3888 -
代码含义:
server.A=B:C:D- A,第几号服务器;
- B,服务器 ip 地址;
- C,服务器与集群 Leader 交换信息的端口;
- D,执行选举时服务器相互通信的端口。`
2.2. 分发到 hadoop103 和 hadoop104
-
xsync 分发
sudo xsync zookeeper-3.5.7/
2.3. 修改 hadoop103 和 hadoop104 的设置
-
hadoop103
# 链接 hadoop103 ssh hadoop103 # 获取 root 权限 su # 编辑 myid vim /指定目录/zookeeper-3.5.7/zkData/myid 2 # 保存退出 -
hadoop104
# 链接 hadoop104 ssh hadoop104 # 获取 root 权限 su # 编辑 myid vim /指定目录/zookeeper-3.5.7/zkData/myid 3 # 保存退出3. 运行
3.1. 启动
-
在 hadoop102、hadoop103、hadoop104 上逐个启动
cd /zookeeper-3.5.7/bin ./zkServer.sh start # 启动成功 ZooKeeper JMX enabled by default Using config: /usr/local/apache-zookeeper-3.5.7/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
3.2. 关闭
- 逐个关闭
cd /bin ./zkServer.sh stop # 关闭成功 ZooKeeper JMX enabled by default Using config: /usr/local/apache-zookeeper-3.5.7/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
3.3. Zookeeper 群启群停
- 进入
/usr/local/apache-zookeeper-3.5.7/bin目录cd /usr/local/apache-zookeeper-3.5.7/bin - 编辑 zkEnv.sh
vim zkEnv.sh找到下面这段代码:
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then JAVA="$JAVA_HOME/bin/java" elif type -p java; then JAVA=java else echo "Error: JAVA_HOME is not set and java could not be found in PATH." 1>&2 exit 1 fi在上面这段代码前,添加
JAVA_HOMEJAVA_HOME="/usr/local/bin/jdk1.8" - 分发
zkEnv.shxsync ./zkEnv.sh -
编辑
zk.shvim zk.sh#!/bin/bash case $1 in "start"){ for i in hadoop102 hadoop103 hadoop104 do ssh $i "/usr/local/apache-zookeeper-3.5.7/bin/zkServer.sh start" done };; "stop"){ for i in hadoop102 hadoop103 hadoop104 do ssh $i "/usr/local/apache-zookeeper-3.5.7/bin/zkServer.sh stop" done };; "status"){ for i in hadoop102 hadoop103 hadoop104 do ssh $i "/usr/local/apache-zookeeper-3.5.7/bin/zkServer.sh status" done };; esac# 修改权限 chmod 777 zk.sh -
集群启动 Zookeeper
./zk.sh start ZooKeeper JMX enabled by default Using config: /usr/local/apache-zookeeper-3.5.7/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ZooKeeper JMX enabled by default Using config: /usr/local/apache-zookeeper-3.5.7/bin/../conf/zoo.cfg Starting zookeeper ... already running as process 7970. ZooKeeper JMX enabled by default Using config: /usr/local/apache-zookeeper-3.5.7/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
4. Zookeeper 常用命令
-
命令基本语法及功能描述
-
bin/zkCli.sh help,显示所有操作命令 -
bin/zkCli.sh ls path [watch],使用 ls 命令来查看当前znode中所包含的内容 -
bin/zkCli.sh ls2 path [watch],查看当前节点数据并能看到更新次数等数据 -
bin/zkCli.sh create,普通创建 -
bin/zkCli.sh -s,含有序列 -
bin/zkCli.sh -e,临时(重启或者超时消失) -
bin/zkCli.sh get path [watch],获得节点的值 -
bin/zkCli.sh set,设置节点的具体值 -
bin/zkCli.sh stat,查看节点状态 -
bin/zkCli.sh delete,删除节点 -
bin/zkCli.sh rmr,递归删除节点
-
5. 常见错误
5.1. 启动 zookeeper 时报错:Error contacting service. It is probably not running
- 原因分析:
- myid 配置错误。
-
解决方法:
-
重新编辑
vim zoo.cfgvim zoo.cfg#######################cluster########################## server.1=hadoop102:2888:3888 server.2=hadoop103:2888:3888 server.3=hadoop104:2888:3888 -
重新编辑
/zkData目录下的myid文件:- hadoop102: 1;
- hadoop103: 2;
- hadoop104: 3。
-
保存退出后重新启动 zookeeper。
-
5.2. zk.sh start 时报错:Zookeeper JAVA_HOME is not set and java could not be found in PATH
- 原因分析:
zkEnv.sh中未配置 JAVA_HOME。
- 解决方法:
- 进入
/usr/local/apache-zookeeper-3.5.7/bin目录cd /usr/local/apache-zookeeper-3.5.7/bin -
编辑 zkEnv.sh
vim zkEnv.sh -
找到下面这段代码:
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then JAVA="$JAVA_HOME/bin/java" elif type -p java; then JAVA=java else echo "Error: JAVA_HOME is not set and java could not be found in PATH." 1>&2 exit 1 fi -
在上面这段代码前,添加
JAVA_HOMEJAVA_HOME="/usr/local/bin/jdk1.8" -
分发
zkEnv.shxsync ./zkEnv.sh
- 进入