kafka自动化集群部署脚本

kafka自动化集群部署脚本

1.部署环境及方式

环境:3台机器

主机名:redis1,redis2,redis3

2.修改hosts文件

#编辑etc/hosts文件,配置hosts文件
vi /etc/hosts

在这里插入图片描述

3.创建kafka用户和用户组(三台)

#在每台机器上创建kafka用户并设定密码
useradd kafka
passwd kafka
Kafka@2023

4.进行免密登录

#首先切换到kafka用户(三台)
su - kafka
#生产秘钥(sdw)
ssh-keygen -t rsa  
#在sdw1中进行输入。生成之后会在用户的根目录生成一个 “.ssh”的文件夹
#authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥(初始不存在该文件) 

在这里插入图片描述

#3台服务器进行免密
#命令:ssh-copy-id -i ~/.ssh/id_rsa.pub [romte_ip]
#例如:ssh-copy-id -i ~/.ssh/id_rsa.pub 10.72.28.13
ssh-copy-id -i ~/.ssh/id_rsa.pub sdw
ssh-copy-id -i ~/.ssh/id_rsa.pub sdw1
ssh-copy-id -i ~/.ssh/id_rsa.pub sdw2
#每台机器都需要进行发送

在这里插入图片描述

#切换回root用户
exit
#使用root用户创建一个kafka的安装文件夹,用来存放kafka的安装脚本和安装包
mkdir /opt/kafka
chown -R kafka:kafka /opt/kafka
#上传安装包和文件
#切换回kafka用户,到用户家目录,创建文件夹
su - kafka
mkdir package
#创建脚本,上传安装包

5.kafka自动化脚本

#!/bin/bash
#在脚本的位置存放安装包kafka_2.11-0.10.2.1.tgz
currentTime=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "请输入kafka的安装目录,不存在脚本自动创建,最后一个/不要写 例:/opt/kafka (刚刚赋予权限的安装路径)"
read kafkainstallpath

#创建KAFKA安装的目录
if [ ! -d $kafkainstallpath ]; then
   mkdir -p $kafkainstallpath
fi 
if [ ! -d $kafkainstallpath ]; then
  echo "创建目录$kafkainstallpath失败!请检查目录是否有权限"
  exit
fi

#解压tar包
currentdir=$(cd $(dirname $0); pwd)
ls | grep 'kafka.*[gz]$'
if [ $? -ne 0 ]; then
   #当前目录没有kafka的压缩包
   echo "在$currentdir下没有发现kafka*.tar.gz,请自行上传!"
   exit
else
   #解压
   tar -zxvf $currentdir/$(ls | grep 'kafka.*[gz]$') -C $kafkainstallpath
fi

kafkabanben=`ls $kafkainstallpath| grep 'kafka.*'`


confpath=$kafkainstallpath/$kafkabanben/config
#修改配置文件

echo -e "请输入kafka节点id:唯一值 例如 0"
read kafkanodename
sed -i "s/^broker.id=0/broker.id=${kafkanodename}/g" $confpath/server.properties

sed -i 's/^#listeners=PLAINTEXT:\/\/:9092/listeners=PLAINTEXT:\/\/:9092/g' $confpath/server.properties

echo -e "请输入kafka日志存储目录:例如 /opt/kafka/log (赋予权限的kafka安装目录内)"
read kafkalogspath

#创建KAFKA日志存储目录
if [ ! -d $kafkalogspath ]; then
   mkdir -p $kafkalogspath
fi 
if [ ! -d $kafkalogspath ]; then
  echo "创建目录$kafkalogspath失败!请检查目录是否有权限"
  exit
fi

bak_dir='log.dirs=/tmp/kafka-logs'
new_dir='log.dirs='$kafkalogspath
sed -i "s!${bak_dir}!${new_dir}!g" $confpath/server.properties

echo -e '请输入zookeeper集群的所有节点:(根据主机名,严格按照示例格式),例如cdh01:2181,cdh02:2181,cdh03:2181'
read allhosts
sed -i "s/^zookeeper.connect=localhost:2181/zookeeper.connect=$allhosts/g" $confpath/server.properties


sed -i 's/^#delete.topic.enable=true/delete.topic.enable=true/g' $confpath/server.properties

#echo "log.cleanup.policy=delete" >>$confpath/server.properties

sed -i 's/^#log.retention.bytes=1073741824/log.retention.bytes=1073741824/g' $confpath/server.properties

#kafka参数优化

sed -i 's/^log.retention.hours=16/log.retention.hours=72/g' $confpath/server.properties

sed -i 's/^#log.flush.interval.messages=10000/log.flush.interval.messages=10000/g' $confpath/server.properties

sed -i 's/^#log.flush.interval.ms=1000/log.flush.interval.ms=1000/g' $confpath/server.properties

param=`cat /proc/cpuinfo | grep "cpu cores"| uniq`

bak_count="num.network.threads=3"
new_count="num.network.threads="$((${param:0-1:1}+1))
sed -i "s!${bak_count}!${new_count}!g" $confpath/server.properties

bak_io="num.network.threads=3"
new_io="num.network.threads="$((${param:0-1:1}+${param:0-1:1}))
sed -i "s!${bak_io}!${new_io}!g" $confpath/server.properties


#PATH设置
#末行插入
echo "">>~/.bash_profile
echo "#KAFKA $currentTime">>~/.bash_profile
echo "export KAFKA_HOME=$kafkainstallpath/$kafkabanben">>~/.bash_profile
echo 'export PATH=$PATH:$KAFKA_HOME/bin'>>~/.bash_profile
source ~/.bash_profile


echo -e "是否远程复制 请输入y/n"
read flag
if [[ $flag == "y" ]]; then

#修改并分发安装文件
espath=$kafkainstallpath/$kafkabanben
espathtemp=$kafkainstallpath/$kafkabanben-temp
cp -r $espath $espathtemp

echo "以下输入的节点必须做免密登录"
echo -e '请输入除当前之外的节点(当前节点cdh01),严格符合以下格式IP:kafkaID,空格隔开, cdh02:2 cdh03:3 cdh04:4 cdh05:5'
read allnodes
user=`whoami`
array2=(${allnodes// / })
for allnode in ${array2[@]}
do
 array3=(${allnode//:/ })
 ip=${array3[0]}
 esid=${array3[1]}
 echo ======= $ip  =======
 
 #修改文件
 ssh $ip "rm -rf $espath"
 ssh $ip "mkdir -p $espath"

 bak_dir="broker.id=$kafkanodename"
 new_dir="broker.id=$esid"

 sed -i "s!${bak_dir}!${new_dir}!g" $espathtemp/config/server.properties

 scp -r $espathtemp/* ${user}@$ip:$espath/

 ssh $ip "echo ''>>~/.bash_profile"
 ssh $ip "echo '#KAFKA $currentTime'>>~/.bash_profile"
 ssh $ip "echo 'export KAFKA_HOME=$kafkainstallpath/$kafkabanben'>>~/.bash_profile"
 ssh $ip 'echo "export PATH=\$PATH:\$KAFKA_HOME/bin">>~/.bash_profile'
 ssh $ip "source ~/.bash_profile"


 #再次修改回来 防止修改错误
 new_dir="broker.id=$kafkanodename"
 bak_dir="broker.id=$esid"
 sed -i "s!${bak_dir}!${new_dir}!g" $espathtemp/config/server.properties

 echo ======= $ip 远程复制完成  =======
done

#删除临时文件
rm -rf $espathtemp

fi


6.使用自动化脚本进行安装

#给上传的安装脚本赋予运行权限
chmod u+x kafka_install.sh

在这里插入图片描述

#运行脚本
./kafka_install.sh
#运行脚本之后会自动执行
#------------------------------------安装不步骤------------------------------------------------
#	1.根据提示输入kafka需要安装的位置(如果权限不足会提示权限不足),之后会自动解压kafka 注:绝对路径后不能有/
#	2.输入kafka的breakid,只要保证不重复就可以 例:1
#	3.输入kafka的日志路径,注:路径的最后不能跟着/
#	4.输入zookeeper集群的通信,根据自己hosts文件的主机名进行配置即可
#	5.是否复制:输入y把配置好的文件进行集群安装
#	6.输入 其他节点的brokerid 如样例中,输入 主机名:id 以空格分隔(注,提前设置好免密登录)
#	7.在显示复制完成之后查看三台机器的配置文件是否配置完成
#	8.自动化脚本已经编辑完成环境变量
#	9.创建kafka一键启动脚本
#kafka一键启动脚本
#!/bin/bash
kafkaServer='sdw sdw1 sdw2'  #需要启动服务的主机名
#启动所有的kafak(使用for循环进行 主机名,通过ssh 进行登录,更新环境变量,进行启动kafka)
for kafka in $kafkaServer
do
        ssh -T $kafka <<EOF
        source ~/.bash_profile
        nohub kafka-server-start.sh /opt/kafka/kafka_2.11-2.2.0/config/server.properties 1>/dev/null 2>&1 $
EOF
echo 从节点 $kafka 启动kafka... [done]
sleep 5
done

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.kafka自动启停脚本

7.1创建kafka_start.sh文件

#kafka一键启动脚本
#!/bin/bash
kafkaServer='redis1 redis2 redis3'  #需要启动服务的主机名
#启动所有的kafak(使用for循环进行 主机名,通过ssh 进行登录,更新环境变量,进行启动kafka)

#kafka的安装路径
APPHOME="/opt/kafka/kafka_2.11-2.2.0"

for kafka in $kafkaServer
do
        ssh -T $kafka <<EOF
        source ~/.bash_profile
        nohup kafka-server-start.sh ${APPHOME}/config/server.properties 1>/dev/null 2>&1 &
EOF
echo 从节点 $kafka 启动kafka... [done]
sleep 5
jps
done

#对文件进行授权
chmod u+x kafka_start.sh
#运行脚本
./kafka_start.sh

在这里插入图片描述

7.2创建kafka_stop.sh

#kafka一键停止脚本
#!/bin/bash
kafkaServer='redis1 redis2 redis3'  #需要启动服务的主机名
#启动所有的kafak(使用for循环进行 主机名,通过ssh 进行登录,更新环境变量,进行停止kafka)

for kafka in $kafkaServer
do
        ssh -T $kafka <<EOF
        source ~/.bash_profile
        nohup kafka-server-stop.sh 
EOF
echo 从节点 $kafka 停止kafka... [done]
sleep 5
jps
done
#对文件进行授权
chmod u+x kafka_stop.sh
#运行文件
./kafka_stop.sh 

8.设置开机自启

创建一个启动脚本

vim /etc/systemd/system/kafka.service

设置文件内容:

[Unit]
Description=kafka
After=network.target zookeeper.service

[Service]
Type=forking
User=root
Group=root
Environment=JAVA_HOME=/usr/java/jdk1.8.0_361
ExecStart=/opt/kafka/kafka_2.11-2.2.0/bin/kafka-server-start.sh -daemon /opt/kafka/kafka_2.11-2.2.0/config/server.properties
ExecStop=/opt/kafka/kafka_2.11-2.2.0/bin/kafka-server-stop.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

设置启动脚本权限

chmod 755 /etc/systemd/system/kafka.service
systemctl daemon-reload
systemctl enable kafka

资源审核中
https://download.csdn.net/download/qq_35177516/89537947

  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北山遇雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值