由 node-01、node-02 和 node-03 三个节点组成 ZooKeeper 集群环境,搭建步骤如下:
步骤一:上传 zookeeper-3.4.6.tar.gz 安装包到 node-01 并解压
[root@node-01 ~]# ll
总用量 17288
drwxr-xr-x. 6 root root 86 3月 26 17:32 apps
-rw-r--r--. 1 root root 17699306 3月 30 16:19 zookeeper-3.4.6.tar.gz #上传的zookeeper压缩包
[root@node-01 ~]# tar -zxvf zookeeper-3.4.6.tar.gz -C apps/
[root@node-01 ~]# rm -rf zookeeper-3.4.6.tar.gz
步骤二:修改 conf/zoo.cfg 配置文件
[root@node-01 ~]# cd apps/zookeeper-3.4.6/conf/
[root@node-01 conf]# ll
总用量 12
-rw-rw-r--. 1 1000 1000 535 2月 20 2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 2月 20 2014 log4j.properties
-rw-rw-r--. 1 1000 1000 922 2月 20 2014 zoo_sample.cfg
# 拷贝 zoo_sample.cfg 文件并改名为 zoo.cfg
[root@hdp-01 conf]# cp zoo_sample.cfg zoo.cfg
[root@hdp-01 conf]# vi zoo.cfg
#修改第 12 行文件存储路径
dataDir=/root/apps/zookeeper-3.4.6/data
#行尾添加ZooKeeper集群节点
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888
步骤三:到 node-01 上新建 zookeeper 数据存储目录 data,并在 data 目录中创建一个文件 myid,内容为 1
myid 文件存放 Zookeeper 集群节点的唯一标识
[root@node-01 conf]# cd /root/apps/zookeeper-3.4.6
[root@node-01 zookeeper-3.4.6]# mkdir data
[root@node-01 zookeeper-3.4.6]# cd data/
[root@node-01 data]# echo "1" > myid
步骤四:将 node-01 的 zookeeper 安装包拷贝给 node-02 、node-03
[root@node-01 data]# cd /root/apps/
[root@node-01 apps]# scp -r zookeeper-3.4.6/ node-02:$PWD
[root@node-01 apps]# scp -r zookeeper-3.4.6/ node-03:$PWD
步骤五:到 node-02 上,修改 zookeeper 数据存储目录 data 下的 myid 文件,将其内容改为 2
[root@node-02 ~]# cd /root/apps/zookeeper-3.4.6/data
[root@node-02 data]# echo "2" > myid
步骤六:到 node-03 上,修改 zookeeper 数据存储目录 data 下的 myid 文件,将其内容改为 3
[root@node-03 ~]# cd /root/apps/zookeeper-3.4.6/data
[root@node-03 data]# echo "3" > myid
步骤七:启动 zookeeper 集群(node-01、node-02、node-03)
### node-01
[root@node-01 ~]# cd /root/apps/zookeeper-3.4.6/
[root@node-01 zookeeper-3.4.6]# bin/zkServer.sh start
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
#查看zookeeper运行状态
[root@node-01 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running. #只有一票无法当选 Leader
### node-02
[root@node-02 ~]# cd /root/apps/zookeeper-3.4.6/
[root@node-02 zookeeper-3.4.6]# bin/zkServer.sh start
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
#查看zookeeper运行状态
[root@node-02 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader # leader 领导者(相当于 master)
### node-03
[root@node-03 ~]# cd /root/apps/zookeeper-3.4.6/
[root@node-03 zookeeper-3.4.6]# bin/zkServer.sh start
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
#查看zookeeper运行状态
[root@node-03 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower # follower 跟随者(相当于 slave)
#再次查看 node-01 zookeeper运行状态
[root@node-01 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower # 现在变为 follower 状态
步骤八:分别在 node-01、node-02 和 node-03 查看 ZooKeeper 进程
[root@node-01 ~]# jps
1825 QuorumPeerMain #zookeeper 进程
1915 Jps
[root@node-02 ~]# jps
1825 QuorumPeerMain #zookeeper 进程
1915 Jps
[root@node-03 ~]# jps
1825 QuorumPeerMain #zookeeper 进程
1915 Jps
以上说明 ZooKeeper 集群中三个 ZooKeeper 服务器进程都已正常启动
步骤九:在 node -01 创建自动批量启动 zookeeper 集群脚本 zkCluster.sh
[root@node-01 zookeeper-3.4.6]# cd /root/apps/zookeeper-3.4.6/bin
[root@node-01 bin]# vim zkCluster.sh
#!/bin/bash
for host in node-01 node-02 node-03
do
echo "${host}:${1}ing....."
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"
done
sleep 2
for host in node-01 node-02 node-03
do
ssh $host "source /etc/profile; /root/apps/zookeeper-3.4.6/bin/zkServer.sh status"
done
#添加脚本执行权限
[root@node-01 bin]# chmod +x zkCluster.sh
步骤十:在 node-01 配置 ZooKeeper 环境变量
[root@node-01 bin]# vim /etc/profile
#行尾添加如下配置
export ZOOKEEPER_HOME=/root/apps/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#执行脚本让环境变量生效
[root@node-01 bin]# source /etc/profile
步骤十一:将 node-01 的 ZooKeeper 集群脚本 zkCluster.sh 和 环境配置文件 profile 拷贝到 node-02、node-03
[root@node-01 bin]# cd /root/apps/zookeeper-3.4.6/bin
[root@node-01 bin]# scp zkCluster.sh node-02:$PWD
[root@node-01 bin]# scp zkCluster.sh node-03:$PWD
[root@node-01 bin]# scp /etc/profile node-02:$PWD
[root@node-01 bin]# scp /etc/profile node-03:$PWD
#添加脚本执行权限
[root@node-02 bin]# cd /root/apps/zookeeper-3.4.6/bin
[root@node-02 bin]# chmod +x zkCluster.sh
#执行脚本让环境变量生效
[root@node-02 bin]# source /etc/profile
#添加脚本执行权限
[root@node-03 bin]# cd /root/apps/zookeeper-3.4.6/bin
[root@node-03 bin]# chmod +x zkCluster.sh
#执行脚本让环境变量生效
[root@node-03 bin]# source /etc/profile
步骤十二:启动客户端
[root@node-01 ~]# zkCli.sh
[zk: localhost:2181(CONNECTED) 0]