自动部署zookeeper其实也不难,只是考虑的问题会比较多一点,需要考虑到架构的设计等情况,所以对于一键部署来说,需要确定的是规划的存储路径,服务器ip路径等。我是单机的,所以早就规划好了。PS(脚本是我自己写得,我也没学几天Shell,有很多纰漏,请包含啊) ,大家可以直接下载执行,下载地址,http://yellowcong.qiniudn.com/install.sh,具体使用方法,可以查看本文最后一节
本文是先从各个方面简单的讲解如何实现的自动 部署,然后在最后的部分做了整合,提供了写好的脚本,供大家测试安装。
修改zoo.cfg配置
通过sed来修改zoo.cfg的配置,这些地方,大家 写脚本,是可以 借鉴的
#修改原始路径
sed -i 's#/tmp/zookeeper#/tmp/zookeeper1/data#' test.cfg
#添加log日志
sed -i '/^dataDir/a\dataLogDir=\/tmp\/zookeeper1\/logs' test.cfg
#修改端口
sed -i 's/2181/2182/g' test.cfg
#追加服务配置
sed -i '$a \server.1=127.0.0.1:2222:2225 \
server.2=127.0.0.1:3333:3335 \
server.3=127.0.0.1:4444:4445 \
' test.cfg
下载与安装脚本
下载文件并解压到文件夹目录下, 这个地方注意wget 和tar的命令,是如何解压文件到指定的目录的
#!/bin/bash
#下载的zookeeper版本
ZOOKEEPER=zookeeper-3.4.10.tar.gz
downloadFile(){
echo "开始下载文件"
echo "默认指定下载目录为/usr/local/"
read -p "指定下载的目录:" name
path="/usr/local"
if [ "$name" == "" ]
then
echo "设置为默认路径:/usr/local/"
elif $(test -d "$name")
then
#echo $name
path=$name
fi
out_file_path=$path/zookeeper
echo "当保存载目录是"$out_file_path
mkdir -p $out_file_path
#wget -O $out_file_path/$ZOOKEEPER http://yellowcong.qiniudn.com/zookeeper-3.4.10.tar.gz
echo "下载地址"$out_file_path/$ZOOKEEPER
#创建文件夹
echo "创建文件夹"$out_file_path/zookeeper1
echo "创建文件夹"$out_file_path/zookeeper4
echo "创建文件夹"$out_file_path/zookeeper3
#清空以前解压的
rm -rf $out_file_path/zookeeper1
rm -rf $out_file_path/zookeeper4
rm -rf $out_file_path/zookeeper3
#创建文件夹
mkdir -p $out_file_path/zookeeper1
mkdir -p $out_file_path/zookeeper4
mkdir -p $out_file_path/zookeeper3
#解压文件
echo "解压文件"
#解压到指定的文件夹
tar -zxvf $out_file_path/$ZOOKEEPER -C $out_file_path/zookeeper1/
cp -rf $out_file_path/zookeeper1/* $out_file_path/zookeeper4/
cp -rf $out_file_path/zookeeper1/* $out_file_path/zookeeper3/
#配置集群
sh /usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/conf/test.sh $out_file_path/zookeeper1/zookeeper-3.4.10/conf/zoo_sample.cfg zookeeper1 2182
sh /usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/conf/test.sh $out_file_path/zookeeper4/zookeeper-3.4.10/conf/zoo_sample.cfg zookeeper4 2183
sh /usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/conf/test.sh $out_file_path/zookeeper3/zookeeper-3.4.10/conf/zoo_sample.cfg zookeeper3 2184
#配置文件夹
mkdir -p /tmp/zookeeper1/data
mkdir -p /tmp/zookeeper1/logs
echo 1 > /tmp/zookeeper1/data/myid
mkdir -p /tmp/zookeeper4/data
mkdir -p /tmp/zookeeper4/logs
echo 2 > /tmp/zookeeper4/data/myid
mkdir -p /tmp/zookeeper3/data
mkdir -p /tmp/zookeeper3/logs
echo 3 > /tmp/zookeeper3/data/myid
sh $out_file_path/zookeeper4/zookeeper-3.4.10/bin/zkServer.sh start
sh $out_file_path/zookeeper3/zookeeper-3.4.10/bin/zkServer.sh start
sh $out_file_path/zookeeper1/zookeeper-3.4.10/bin/zkServer.sh start
sh $out_file_path/zookeeper4/zookeeper-3.4.10/bin/zkServer.sh status
sh $out_file_path/zookeeper3/zookeeper-3.4.10/bin/zkServer.sh status
sh $out_file_path/zookeeper1/zookeeper-3.4.10/bin/zkServer.sh status
}
downloadFile
变量设置
#!/bin/bash
#获取当期脚本执行的位置
#file_real_path=$(readlink -f .)
#echo $file_real_path
#拷贝配置文件
copyFile(){
conf_file_path=$1
#获取当前传递进来的文件夹的路径
conf_file_dir=$(cd "$(dirname "$1")"; pwd)
new_file_path=$conf_file_dir"/zoo2.cfg"
#创建一个新文件
#touch $new_file_path
cp $conf_file_path $new_file_path
#新文件地址
echo $new_file_path
}
if [ "$1" != "" ]
then
new_file_path=$(copyFile $1)
#新文件地址
echo $new_file_path
echo $2
#--------------------update file----------------------
sed -i 's#/tmp/zookeeper#/tmp/'$2'/data#' $new_file_path
#添加log日志
sed -i '/^dataDir/a\dataLogDir=\/tmp\/'$2'\/logs' $new_file_path
#设定ip
sed -i 's/2181/'$3'/g' $new_file_path
#追加服务配置
sed -i '$a \server.1=127.0.0.1:2222:2225\nserver.2=127.0.0.1:3333:3335\nserver.3=127.0.0.1:4444:4445 ' $new_file_path
else
echo '大兄弟,请指定你的zookeeperのzoo.cfg文件路径啊'
exit 1
fi
exit 0
启动脚本
这个脚本需要传递三个参数
$1
配置文件 zoo_sample.cfg
配置文件
$2
缓存目录
$3
端口号
#!/bin/bash
SERVER1="/usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/bin/zkServer.sh"
SERVER2="/usr/local/zookeeper/zookeeper2/zookeeper-3.4.10/bin/zkServer.sh"
SERVER3="/usr/local/zookeeper/zookeeper3/zookeeper-3.4.10/bin/zkServer.sh"
case $1 in
start)
echo "start zookeeper"
sh $SERVER1 start
sh $SERVER2 start
sh $SERVER3 start
;;
stop)
echo "stop zookeeper"
sh $SERVER1 stop
sh $SERVER2 stop
sh $SERVER3 stop
;;
restart)
echo "restart zookeeper"
sh $SERVER1 restart
sh $SERVER2 restart
sh $SERVER3 restart
;;
status)
echo "zookeeper info"
sh $SERVER1 status
sh $SERVER2 status
sh $SERVER3 status
;;
*)
echo "./zookeeper.sh start|stop|restart"
exit 1
;;
esac
exit 0
整合的完整版代码
下载下来我的代码后,需要配置 sh的执行权限chmod +x install.sh
#!/bin/bash
#下载的zookeeper版本
ZOOKEEPER=zookeeper-3.4.10.tar.gz
#定义服务名称 需要自己配置,看自己的机器
SERVER1=zookeeper1
SERVER2=zookeeper2
SERVER3=zookeeper3
#定义端口 需要自己配置,看自己的机器
SERVER1_PORT=2182
SERVER2_PORT=2183
SERVER3_PORT=2184
#拷贝配置文件
copyFile(){
conf_file_path=$1
#获取当前传递进来的文件夹的路径
conf_file_dir=$(cd "$(dirname "$1")"; pwd)
new_file_path=$conf_file_dir"/zoo.cfg"
#创建一个新文件
#touch $new_file_path
cp $conf_file_path $new_file_path
#新文件地址
echo $new_file_path
}
#配置文件
configFile(){
if [ "$1" != "" ]
then
new_file_path=$(copyFile $1)
#新文件地址
echo $new_file_path
echo $2
#--------------------update file----------------------
sed -i 's#/tmp/zookeeper#/tmp/'$2'/data#' $new_file_path
#添加log日志
sed -i '/^dataDir/a\dataLogDir=\/tmp\/'$2'\/logs' $new_file_path
#设定ip
sed -i 's/2181/'$3'/g' $new_file_path
#追加服务配置
sed -i '$a \server.1=127.0.0.1:2222:2225\nserver.2=127.0.0.1:3333:3335\nserver.3=127.0.0.1:4444:4445 ' $new_file_path
else
echo '大兄弟,请指定你的zookeeperのzoo.cfg文件路径啊'
fi
}
#安装文件
installFile(){
echo "开始下载文件"
echo "默认指定下载目录为/usr/local/"
read -p "指定下载的目录:" name
path="/usr/local"
if [ "$name" == "" ]
then
echo "设置为默认路径:/usr/local/"
elif $(test -d "$name")
then
#echo $name
path=$name
fi
out_file_path=$path/zookeeper
echo "当保存载目录是"$out_file_path
#创建文件夹
mkdir -p $out_file_path
SERVER1_OUT_PATH=$out_file_path/$SERVER1/
SERVER2_OUT_PATH=$out_file_path/$SERVER2/
SERVER3_OUT_PATH=$out_file_path/$SERVER3/
ehco "-------------------清空文件夹------------------"
#清空以前解压的
rm -rf $SERVER1_OUT_PATH
rm -rf $SERVER2_OUT_PATH
rm -rf $SERVER3_OUT_PATH
#创建文件夹
mkdir -p $SERVER1_OUT_PATH
mkdir -p $SERVER2_OUT_PATH
mkdir -p $SERVER3_OUT_PATH
#创建文件夹
echo "创建文件夹"$SERVER1_OUT_PATH
echo "创建文件夹"$SERVER2_OUT_PATH
echo "创建文件夹"$SERVER3_OUT_PATH
#下载文件
wget -O $out_file_path/$ZOOKEEPER http://yellowcong.qiniudn.com/zookeeper-3.4.10.tar.gz
echo "文件下载地址"$out_file_path/$ZOOKEEPER
#解压文件
echo "-------------------解压文件----------------"
#解压到指定的文件夹
tar -zxvf $out_file_path/$ZOOKEEPER -C $SERVER1_OUT_PATH
cp -rf $SERVER1_OUT_PATH/* $SERVER2_OUT_PATH
cp -rf $SERVER1_OUT_PATH/* $SERVER3_OUT_PATH
echo "----------------集群配置-------------------"
#配置集群,配置集群文件
configFile $SERVER1_OUT_PATH/zookeeper-3.4.10/conf/zoo_sample.cfg $SERVER1 $SERVER1_PORT
configFile $SERVER2_OUT_PATH/zookeeper-3.4.10/conf/zoo_sample.cfg $SERVER2 $SERVER2_PORT
configFile $SERVER3_OUT_PATH/zookeeper-3.4.10/conf/zoo_sample.cfg $SERVER3 $SERVER3_PORT
echo "----------------配置myid文件---------------"
#配置文件夹
mkdir -p /tmp/$SERVER1/data
mkdir -p /tmp/$SERVER1/logs
echo 1 > /tmp/$SERVER1/data/myid
mkdir -p /tmp/$SERVER2/data
mkdir -p /tmp/$SERVER2/logs
echo 2 > /tmp/$SERVER2/data/myid
mkdir -p /tmp/$SERVER3/data
mkdir -p /tmp/$SERVER3/logs
echo 3 > /tmp/$SERVER3/data/myid
echo "------------------启动文件-----------------"
#启动集群
sh $out_file_path/$SERVER2/zookeeper-3.4.10/bin/zkServer.sh start
sh $out_file_path/$SERVER3/zookeeper-3.4.10/bin/zkServer.sh start
sh $out_file_path/$SERVER1/zookeeper-3.4.10/bin/zkServer.sh start
echo "-----------------查看启动状态---------------"
#查看集群情况
sh $out_file_path/$SERVER2/zookeeper-3.4.10/bin/zkServer.sh status
sh $out_file_path/$SERVER3/zookeeper-3.4.10/bin/zkServer.sh status
sh $out_file_path/$SERVER1/zookeeper-3.4.10/bin/zkServer.sh status
}
#执行安装
installFile
执行结果,可以查看到结果启动正常,zk启动ok
脚本使用
#下载脚本
wget http://yellowcong.qiniudn.com/install.sh
#配置脚本执行权限
chmod +x install.sh
#看是否需要配置
#vim install.sh
#执行脚本文件
./install.sh
文件存储目录
zookeeper安装目录