自定义参数
KAFKA_PATH= #KAFKA安装路径
KAFKA_PORT= #设置KAFKA端口
PKG_NAME= #PKG名称
TEMP_PATH= #临时目录
USER_NAME= #启动用户
ZK_PORT= #连接ZK端口
部署参数检查
#!/bin/bash
# 检查参数是否设置
echo "=====检查参数是否设置===="
if [ ! $KAFKA_PATH ];then
echo "=====$KAFKA_PATH 此参数未设置,请检查!====="
exit 1
fi
if [ ! $KAFKA_PORT ];then
echo "=====$KAFKA_PORT 此参数未设置,请检查!====="
exit 1
fi
if [ ! $ZK_PORT ];then
echo "=====$ZK_PORT 此参数未设置,请检查!====="
exit 1
fi
if [ ! $PKG_NAME ];then
echo "=====$PKG_NAME 此参数未设置,请检查!====="
exit 1
fi
if [ ! $TEMP_PATH ];then
echo "=====$TEMP_PATH 此参数未设置,请检查!====="
exit 1
fi
ISSTART=$(netstat -nutlp|grep ${KAFKA_PORT}|grep -v "grep"|wc -l)
ISSTART_ZK=$(netstat -nutlp|grep ${ZK_PORT}|grep -v "grep"|wc -l)
# 检查端口是否已被监听
echo "=====检查端口是否已被监听====="
if [ "${ISSTART}" != "0" ]; then
echo "=====KAFKA 启动端口已监听,请重新选择端口====="
exit 1
else
echo "=====KAFKA 启动端口未监听,符合预期!====="
fi
# 检查ZK是否已安装,如未安装需要提前安装ZK
echo "=====检查ZK是否已安装====="
if [ "${ISSTART_ZK}" == "0" ]; then
echo "=====zookeeper未安装,请先安装zookeeper====="
exit 1
else
echo "=====zookeeper已安装,符合预期!====="
fi
# 检查目标目录是否存在
echo "=====检查目标目录是否存在====="
if [ ! -d $KAFKA_PATH/$KAFKA_PORT ];then
echo "=====$KAFKA_PORT 目录不存在,创建目录====="
mkdir -p $KAFKA_PATH/$KAFKA_PORT
else
echo "=====$KAFKA_PORT目录已存在,退出安装====="
exit 1
fi
if [ ! -d $TEMP_PATH ];then
echo "=====$TEMP_PATH 目录不存在,创建目录====="
mkdir -p $TEMP_PATH
fi
echo "=====部署前检查通过====="
上传并解压安装包
#!/bin/bash
pwd
# 解压安装包到指定目录
echo "=====解压安装包到指定目录====="
tar -xf ${PKG_NAME}.tar.gz -C $KAFKA_PATH/$KAFKA_PORT/
echo "=====查看解压后的内容====="
ls $KAFKA_PATH/$KAFKA_PORT/$PKG_NAME
修改配置文件 server1执行
#!/bin/bash
#修改配置文件
echo "======开始修改配置文件======"
cd $KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/config
sed -i "s@^log.dirs.*@log.dirs=$KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/logs/kafka_logs@g" server.properties
sed -i "s@^zookeeper.connect.*@zookeeper.connect=Zk01Host:2181,Zk02Host:2181,Zk03Host:2181@g" server.properties
sed -i "s@^port.*@port=$KAFKA_PORT@g" server.properties
sed -i "s@^host.name.*@host.name=$server1@g" server.properties
sed -i "s@^broker.id.*@broker.id=1@g" server.properties
修改配置文件 server2执行
#!/bin/bash
#修改配置文件
echo "======开始修改配置文件======"
cd $KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/config
sed -i "s@^log.dirs.*@log.dirs=$KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/logs/kafka_logs@g" server.properties
sed -i "s@^zookeeper.connect.*@zookeeper.connect=Zk01Host:2181,Zk02Host:2181,Zk03Host:2181@g" server.properties
sed -i "s@^port.*@port=$KAFKA_PORT@g" server.properties
sed -i "s@^host.name.*@host.name=$server2@g" server.properties
sed -i "s@^broker.id.*@broker.id=2@g" server.properties
修改配置文件 server3执行
#!/bin/bash
#修改配置文件
echo "======开始修改配置文件======"
cd $KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/config
sed -i "s@^log.dirs.*@log.dirs=$KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/logs/kafka_logs@g" server.properties
sed -i "s@^zookeeper.connect.*@zookeeper.connect=Zk01Host:2181,Zk02Host:2181,Zk03Host:2181@g" server.properties
sed -i "s@^port.*@port=$KAFKA_PORT@g" server.properties
sed -i "s@^host.name.*@host.name=$server3@g" server.properties
sed -i "s@^broker.id.*@broker.id=3@g" server.properties
设置启停脚本+启动
#!/bin/bash
#修改文件权限
echo "======修改文件权限======"
cd $KAFKA_PATH/$KAFKA_PORT/$PKG_NAME/bin/ && chmod 755 -R *
chown -R ${USER_NAME}:${USER_NAME} $KAFKA_PATH
echo "=====开始设置启动脚本====="
# 设置启动脚本
cat > /usr/lib/systemd/system/kafka${KAFKA_PORT}.service <<-EOF
[Unit]
Description=Apache Kafka server (broker)
After=network.target
[Service]
Type=simple
User=${USER_NAME}
Group=${USER_NAME}
Environment=JAVA_HOME=/usr/local/jdk
ExecStart=$KAFKA_PATH/${KAFKA_PORT}/$PKG_NAME/bin/kafka-server-start.sh /data/public/kafka/${KAFKA_PORT}/$PKG_NAME/config/server.properties
ExecStop=$KAFKA_PATH/${KAFKA_PORT}/$PKG_NAME/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
echo "=====启动并设置开机自启====="
systemctl daemon-reload
systemctl start kafka${KAFKA_PORT}.service
systemctl enable kafka${KAFKA_PORT}.service
echo "=====启停方式:systemctl start|stop|restart kafka${KAFKA_PORT}====="
#按照端口判断,默认启动时间2分钟,判断两次,按需修改循环次数
echo "=====开始判断服务是否已启动成功====="
for((i=1;i<=12;i++));
do
sleep 10
ISSTART=$(netstat -nutlp|grep ${KAFKA_PORT} |grep -v "grep"|wc -l)
if [ "$ISSTART" != "0" ]; then
echo "发现服务端口,为确保服务真正启动成功,等待15秒后进行第二次判断!"
sleep 15
ISSTART=$(netstat -nutlp|grep ${KAFKA_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
rm -rf ${TEMP_PATH}
mkdir -p ${TEMP_PATH}