集群规划
在 3 台服务器上都安装 ZK,组成集群
$ tar xzvf apache-zookeeper-3.5.7-bin.tar.gz -C /home/hadoop/local/
$ cd /home/hadoop/local
$ ln -s apache-zookeeper-3.5.7-bin zookeeper
添加环境变量
修改 my_env.sh
$ sudo vim /etc/profile.d/my_env.sh
HADOOP_HOME=/home/local/hadoop
ZOOKEEPER_HOME=/home/hadoop/local/zookeeper
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
export HADOOP_HOME ZOOKEEPER_HOME PATH
$ source /etc/profile
修改配置
$ cd /home/hadoop/local/zookeeper/conf
$ mv zoo_sample.cfg zoo.cfg
创建保存日志路径
$ mkdir /home/hadoop/local/zookeeper/zkData
修改配置文件:
$ vim zoo.cfg
修改保存数据的目录:
dataDir=/home/hadoop/local/zookeeper/zkData
最后添加:
server.1=ns1:2888:3888
server.2=ns2:2888:3888
server.3=ns3:2888:3888
- 这个 server 后面的数字要和后面的 myid 文件中记录的数字一致,表示这个是第几号服务器;
- ns1:这个服务器的地址
- 2888:是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
- 3888:是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口;
新建保存 id 的文件
Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server;
$ cd /home/hadoop/local/zookeeper/zkData
$ touch myid
$ vim myid
1
此 id 值每个服务器不同,因此 ns1 为 1,ns2 为 2,ns3 为 3
在 ns2、ns3 上执行上面同样的命令,只不过 myid 文件中的值为 2 和 3
启动命令
每台 ZK 服务器分别启动
$ zkServer.sh start
查看 ZK 服务器状态:
$ zkServer.sh status
输出信息中的 Mode: leader / flower,可以看出是否是主节点;
关闭 ZK 服务器:
$ zkServer.sh stop
客户端启动命令
$ zkCli.sh
客户端命令行操作命令
命令基本语法 | 功能描述 |
help | 显示所有操作命令 |
ls path | 使用 ls 命令来查看当前znode的子节点 -w 监听子节点变化 -s 附加次级信息 |
create | 普通创建 -s 含有序列 -e 临时(重启或者超时消失) |
get path | 获得节点的值 -w 监听节点内容变化 -s 附加次级信息 |
set | 设置节点的具体值 |
stat | 查看节点状态 |
delete | 删除节点 |
deleteall | 递归删除节点 |
ZK 集群启动停止脚本
$ vim /home/hadoop/bin/zk.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "USAGE: zk.sh {start|stop|status}"
exit;
fi
case $1 in
"start"){
for i in ns1 ns2 ns3
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/home/hadoop/local/zookeeper/bin/zkServer.sh start"
done
};;
"stop"){
for i in ns1 ns2 ns3
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/home/hadoop/local/zookeeper/bin/zkServer.sh stop"
done
};;
"status"){
for i in ns1 ns2 ns3
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/home/hadoop/local/zookeeper/bin/zkServer.sh status"
done
};;
esac
$ chmod u+x /home/hadoop/bin/zk.sh
以后就可以在 ns1 上操作整个 ZK 集群:
$ zk.sh start|status|stop