在 master、node1 和 node2 三个节点上都部署 Zookeeper。
1)解压安装
(1)在 master 解压 Zookeeper 安装包到/opt/module/目录下
[root@master software]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
(2)修改 apache-zookeeper-3.5.7-bin 名称为 zookeeper-3.5.7
[root@master module]# mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
3)配置服务器编号
(1)在/opt/module/zookeeper-3.5.7/这个目录下创建 zkData
[root@master zookeeper-3.5.7]# mkdir zkData
(2)在/opt/module/zookeeper-3.5.7/zkData 目录下创建一个 myid 的文件
[root@master zkData]# vi myid
在文件中添加与 server 对应的编号(注意:上下不要有空行,左右不要有空格)
2
注意:添加 myid 文件,一定要在 Linux 里面创建,在 notepad++里面很可能乱码
(3)拷贝配置好的 zookeeper 到其他机器上
[root@master module ]$ xsync zookeeper-3.5.7
并分别在 node1、node2 上修改 myid 文件中内容为 3、4
4)配置zoo.cfg文件
(1)重命名/opt/module/zookeeper-3.5.7/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg
[root@master conf]$ mv zoo_sample.cfg zoo.cfg
(2)打开 zoo.cfg 文件
[root@master conf]# vim zoo.cfg
#修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.5.7/zkData
#增加如下配置
#######################cluster########################## server.2=master:2888:3888 server.3=node1:2888:3888 server.4=node2:2888:3888
注:需要修改bin下的 zkEnv.sh 添加java环境变量
我的文件如下:
[root@master conf]# cat zoo.cfg # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. #dataDir=/tmp/zookeeper dataDir=/opt/module/zookeeper-3.5.7/zkData JAVA_HOME=/opt/jdk/jdk1.8.0_202 # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 #######################cluster########################## server.2=master:2888:3888 server.3=node1:2888:3888 server.4=node2:2888:3888 [root@master conf]#
5)集群操作
(1)分别启动 Zookeeper
[root@master zookeeper-3.5.7]# bin/zkServer.sh start [root@node1zookeeper-3.5.7]# bin/zkServer.sh start [root@node2 zookeeper-3.5.7]# bin/zkServer.sh start
(2)查看状态
[root@master zookeeper-3.5.7]# bin/zkServer.sh status JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: follower [root@node1 zookeeper-3.5.7]# bin/zkServer.sh status JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: leader [root@node2 zookeeper-3.4.5]# bin/zkServer.sh status JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: follower
xsync脚本如下:
可参考上篇文章:Linux xsync命令脚本_hunheidaode的博客-CSDN博客
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in master node1 node2 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
zk.sh 脚本如下:
可参考上篇文章:Linux xsync命令脚本_hunheidaode的博客-CSDN博客
#!/bin/bash
case $1 in
"start"){
for i in master node1 node2
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in master node1 node2
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in master node1 node2
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
附:
jpsall.sh 脚本:
#!/bin/bash
# 执行jps命令查询每台服务器上的节点状态
echo ======================集群节点状态====================
for i in master node1 node2
do
echo ====================== $i ====================
ssh $i "/opt/jdk/jdk1.8.0_202/bin/jps"
done
echo ======================执行完毕====================



