在 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
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 | 递归删除节点 |
$ 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