shell脚本安装zookeeper集群样例

自定义参数

PKG_NAME= #PKG包名
TEMP_PATH= #临时目录
USER_NAME= #启动用户
ZK_NAME= #ZK服务名
ZK_PATH= #ZK安装路径
ZK_PORT= #设置ZK端口

部署参数检查

#!/bin/bash

# 检查参数是否设置
echo "=====检查参数是否设置====="
if [ ! $TEMP_PATH ];then
	echo "=====$TEMP_PATH 此参数未设置,请检查!====="
    exit 1
fi

if [ ! $ZK_PATH ];then
	echo "=====$ZK_PATH 此参数未设置,请检查!====="
    exit 1
fi

if [ ! $ZK_PORT ];then
	echo "=====$ZK_PORT 此参数未设置,请检查!====="
    exit 1
fi

if [ ! $ZK_NAME ];then
    echo "=====$ZK_NAME 此参数未设置,请检查!====="
    exit 1
fi

ISSTART=$(netstat -nutlp|grep ${ZK_PORT}|grep -v "grep"|wc -l)

# 检查端口是否已被监听
echo "=====检查端口是否已被监听====="
if [ "${ISSTART}" != "0" ]; then
    echo "ZK 启动端口已监听,请重新选择端口"  
    exit 1
else
    echo "ZK 启动端口未监听,符合预期!" 
fi

# 检查目标目录是否存在
echo "=====检查目标目录是否存在====="
if [ ! -d $TEMP_PATH ];then
	echo "=====$TEMP_PATH目录不存在,创建目录====="
	mkdir -p $TEMP_PATH	
else 
    echo "=====临时目录已存在,无需创建====="
fi

if [ ! -d $ZK_PATH/$ZK_PORT ];then
	echo "=====$ZK_PORT 目录不存在,创建目录====="
	mkdir -p $ZK_PATH/$ZK_PORT/zookeeper-data
else 
    echo "=====$ZK_PORT 目录已存在,退出安装====="
    exit 1
fi

 echo "=====部署前检查通过====="

上传并解压安装包

#!/bin/bash
CURR_DIR=$(pwd)
pwd

# 解压压缩包到指定目录
echo "=====解压压缩包到指定目录====="
unzip -o ${PKG_NAME}.zip -d $TEMP_PATH
echo "=====查看解压后的内容====="
ls $TEMP_PATH/$PKG_NAME

# 解压安装包到指定目录
echo "=====解压安装包到指定目录====="
cd $TEMP_PATH/$PKG_NAME
tar xf ${ZK_NAME}.tar.gz -C $ZK_PATH/$ZK_PORT
#mkdir -p $ZK_PATH/$ZK_PORT
#cp -r ${ZK_NAME} $ZK_PATH/$ZK_PORT
echo "=====查看解压后的内容====="
ls $ZK_PATH/$ZK_PORT/$ZK_NAME

#配置文件修改
cd ${CURR_DIR}
echo "======开始复制模板配置文件======"
cp zoo.cfg $ZK_PATH/$ZK_PORT/$ZK_NAME/conf/
cd $ZK_PATH/$ZK_PORT/$ZK_NAME/conf/
echo "=====开始修改配置文件====="
sed -i "s@^dataDir.*@dataDir=$ZK_PATH/$ZK_PORT/zookeeper-data@g" zoo.cfg
sed -i "s@^clientPort.*@clientPort=$ZK_PORT@g" zoo.cfg
sed -i "s@^server.1=.*@server.1=$server1:1$ZK_PORT:2$ZK_PORT@g" zoo.cfg
sed -i "s@^server.2=.*@server.2=$server2:1$ZK_PORT:2$ZK_PORT@g" zoo.cfg
sed -i "s@^server.3=.*@server.3=$server3:1$ZK_PORT:2$ZK_PORT@g" zoo.cfg

写入唯一标识 server1

#!/bin/bash

#写入唯一标识
echo "======写入唯一标识======"
echo '1'>$ZK_PATH/$ZK_PORT/zookeeper-data/myid
cat $ZK_PATH/$ZK_PORT/zookeeper-data/myid

写入唯一标识 server2

#!/bin/bash

#写入唯一标识
echo "======写入唯一标识======"
echo '2'>$ZK_PATH/$ZK_PORT/zookeeper-data/myid
cat $ZK_PATH/$ZK_PORT/zookeeper-data/myid

写入唯一标识 server3

#!/bin/bash

#写入唯一标识
echo "======写入唯一标识======"
echo '3'>$ZK_PATH/$ZK_PORT/zookeeper-data/myid
cat $ZK_PATH/$ZK_PORT/zookeeper-data/myid

设置启停脚本+启动

#!/bin/bash

chown -R ${USER_NAME}:${USER_NAME} $ZK_PATH
echo "=====开始设置启动脚本====="
# 设置启动脚本
cat > /usr/lib/systemd/system/zk${ZK_PORT}.service <<-EOF
[Unit]
Description=Zookeeper service
After=network.target

[Service]
Type=forking
User=${USER_NAME}
Environment=JAVA_HOME=/usr/local/jdk
Environment=ZOO_LOG_DIR=/data/public/zookeeper/${ZK_PORT}
ExecStart=$ZK_PATH/$ZK_PORT/$ZK_NAME/bin/zkServer.sh start
ExecStop=$ZK_PATH/$ZK_PORT/$ZK_NAME/bin/zkServer.sh stop
Restart=always

[Install]
WantedBy=multi-user.target
EOF
echo "=====启动并设置开机自启====="
systemctl daemon-reload
systemctl start zk${ZK_PORT}.service
systemctl enable zk${ZK_PORT}.service
echo "=====启停方式:systemctl start|stop|restart zk${ZK_PORT}====="



#按照端口判断,默认启动时间2分钟,判断两次,按需修改循环次数
echo "=====开始判断服务是否已启动成功====="
    for((i=1;i<=12;i++));
    do
        sleep 10
        ISSTART=$(netstat -nutlp|grep ${ZK_PORT}|grep -v "grep"|wc -l)
        if [ "$ISSTART" != "0" ]; then
            echo "发现服务端口,为确保服务真正启动成功,等待15秒后进行第二次判断!"
                sleep 15
                ISSTART=$(netstat -nutlp|grep ${ZK_PORT}|grep -v "grep"|wc -l)
                if [ "$ISSTART" != "0" ]; then
                    echo "等待15秒后端口仍启动,服务第二次判断通过,服务启动成功!"
                    exit 0
                else
                    echo "等待15秒后端口未启动,服务第二次判断失败,服务启动失败!"
                    exit 1
                fi
        else
            echo "服务启动中,请等待!"
        fi
    done
    echo "等待2分钟后未发现服务端口,服务启动失败!"
    exit 1

验证集群状态

#!/bin/bash

ZK_STATUS=`$ZK_PATH/$ZK_PORT/$ZK_NAME/bin/zkServer.sh status |grep Mode: |awk -F ": " '{print $NF}'`

#查看集群状态
echo "=====查看集群状态,本机角色为:$ZK_STATUS====="

# 验证集群状态
if [ "$ZK_STATUS" == "follower" ] || [ "$ZK_STATUS" == "leader" ];then
    echo "=====集群状态正常!====="
else
    echo "=====集群状态异常!====="
    exit 1
fi

清空临时目录安装包

#!/bin/bash

rm -rf ${TEMP_PATH}
mkdir -p ${TEMP_PATH}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值