部署Zookeeper的shell脚本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27232757/article/details/80031277

功能描述:可以部署zookeeper的单机模式和集群模式,集群模式默认会在脚本所在机器部署一个节点,也就是说想要部署三个节点的ZK集群,只需要输入两个IP。


#!/bin/bash

#authro likexin

#description deploy standalone or cluster zookeeper
LOCALHOST=`ifconfig | grep "inet" | awk 'NR==1{print}' | awk '{print $2}'`

#部署集群模式的zookeeper
function installClusterZK() {
read -p "`echo -e "\033[35mPlease enter the ip(ip;ip;ip):\033[0m"`" ips
echo -e "\033[32m################开始部署ZK集群################\033[0m"
#检查路径
        checkPath $1 $2
        #拷贝安装源到目标路径
        cp $1 $2
        #解压安装源
        name=`echo $1 |awk -F'/' '{print $NF}'`
        cd $2;tar -zxvf $name > /dev/null
#修改配置文件
        dir=`echo $name |awk -F'.tar.gz' '{print $1}'`
        modifyConf $2/$dir $3
        quantity=`echo $ips | awk -F';' '{print NF}'`
        port1=$(($3+1))
port2=$(($3+2))
info="server.$(($quantity+1))=$LOCALHOST:$port1:$port2"
        echo $info >> zoo.cfg
        for (( i=1; i<=$quantity; i++))
        do
                ip=`echo $ips | awk -v nvar=$i -F';' '{print $nvar}'`
                info="server.$i=$ip:$port1:$port2"
echo $info >> zoo.cfg
        done
#部署zookeeper集群
for (( i=1; i<=$quantity; i++))
do
ip=`echo $ips | awk -v nvar=$i -F';' '{print $nvar}'`
echo $ip
echo $i > $2/$dir/myid
ssh $USER@$ip "[ -d $2 ] && echo ok || mkdir -p $2"
scp -r $2/$dir $USER@$ip:$2/$dir > /dev/null
scp -r $2/$dir/myid $USER@$ip:$2/$dir/myid
ssh $USER@$ip "cd $2/$dir/bin; ./zkServer.sh start"
done
echo $(($quantity+1)) > $2/$dir/myid
$2/$dir/bin/zkServer.sh start
echo -e "\033[32m################部署成功################\033[0m"
}

#部署单节点的zookeeper
function installStandaloneZK() {
echo -e "\033[32m################开始部署################\033[0m"
#检查路径
checkPath $1 $2
#拷贝安装源到目标路径
cp $1 $2
#解压安装源
name=`echo $1 |awk -F'/' '{print $NF}'`
cd $2;tar -zxvf $name > /dev/null
#修改配置文件
dir=`echo $name |awk -F'.tar.gz' '{print $1}'`
modifyConf $2/$dir $3
#启动zookeeper
$2/$dir/bin/zkServer.sh start
echo -e "\033[32m################部署成功################\033[0m"
}

#修改zookeeper的配置文件
function modifyConf() {
cd $1/conf
#备份原始的配置文件
if [ ! -f $1/conf/zoo.cfg ];then
cp zoo_sample.cfg conf/zoo.cfg
fi
#修改配置文件
sed -i -e "s#clientPort=[0-9]*#clientPort=$2#g" -e "s#dataDir=\/tmp\/zookeeper#dataDir=$1#g" zoo.cfg
}

#检查安装源是否存在,检查部署路径是否存在
function checkPath() {
if [ ! -f $1 ];then
echo -e "\033[31mThe installation source does not exist\033[0m"
exit 1
fi
if [ ! -d $2 ];then
mkdir $2
fi


}

#判断路径是不是绝对路径
function isLegalPath() {
firstChar=`echo $1 |awk '{print substr($0,1,1)}'`
        if [ ! "$firstChar" = "/" ];then
                echo -e "\033[31mPlease enter the absolute path.\033[0m"
                exit 1
        fi


}

#判断端口号是否合法
function isLegalPort() {
if (( $1 > 65535 ));then
                echo -e "\033[31mOut of port range.\033[0m"
                exit 1
        fi


}

#等待用户输入安装源的目录、安装路径、端口号(检查是否合法)
read -p "`echo -e "\033[35mPlease enter the installation source path:\033[0m"`" source
isLegalPath $source
read -p "`echo -e "\033[35mPlease enter the target path:\033[0m"`" path
isLegalPath $path
read -p "`echo -e "\033[35mPlease enter the port:\033[0m"`" port
isLegalPort $port
read -p "`echo -e "\033[35mPlease enter the zookeeper type:\033[0m"`" type
case $type in
"standalone")
installStandaloneZK $source $path $port
;;
"cluster")
installClusterZK $source $path $port
;;
*)
echo -e "\033[33mUsage : {standalone|cluster}\033[0m"
;;
esac

猜你喜欢

转载自blog.csdn.net/qq_27232757/article/details/80031277