kafka+zookeeper在linux上的安装
2025-02-23 13:42:00 0 举报
AI智能生成
通过分发方式,实现kafka集群的部署,避免多台服务器切换
作者其他创作
大纲/内容
linux环境准备
查询每台kafka服务器ip
ifconfig
查询或修改每台kafka服务器主机名称(若甲方要求不能修改,则记住主机名称)
vim /etc/hostname
kafka-broker1
kafka-broker2
...
kafka-brokerN
修改每台kafka主机映射
vim /etc/host
ip1 主机名1
ip2 主机名2
...
ipN 主机名N
ip2 主机名2
...
ipN 主机名N
重启所有kafka服务器
在任意一台服务器编写分发脚本
vim /bin/xsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in 主机名1 主机名2 主机名N
do
echo ======================== $host ========================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file dose not exists!
fi
done
done
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in 主机名1 主机名2 主机名N
do
echo ======================== $host ========================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file dose not exists!
fi
done
done
修改分发脚本权限
chmod 777 xsync
每台服务器配置SSH无密登录,用于分发文件时,免去输入密码的步骤
生产rsa密钥
ssh-keygen -t rsa
三次回车
将公钥拷贝到目标机器
ssh-copy-id 主机名称1
yes,回车
输入密码,回车
jdk安装
在分发脚本的那台服务器,安装jdk
安装jdk8及以上,根据实际情况来确定
建议擦除linux默认的jdk
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
下载jdk,linux-x64_bin.tar.gz版本
上传到/opt/software
xshell支持直接拖进去,或者用xftp进行传输
mkdir /bin/software
解压
cd /opt/software
mkdir /opt/module
tar -zxvf jdk压缩包名称 -C /opt/module
配置环境变量
vim /etc/profile.d/my_env.sh
添加内容
#JAVA_HOME
export JAVA_HOME=/opt/module/解压后的JDK文件夹名称
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME=/opt/module/解压后的JDK文件夹名称
export PATH=$PATH:$JAVA_HOME/bin
使配置生效
source /etc/profile.d/my_env.sh
检查是否成功
java -version
分发环境变量和安装包
分发环境变量配置文件
xsync /etc/profile.d/my_env.sh
分发JDK安装包
xsync /opt/module/解压后的JDK文件夹名称
在每台kafka服务器执行刷新环境变量配置文件
source /etc/profile.d/my_env.sh
安装zookeeper
在分发脚本那台服务器安装zookeeper
最新版kafka3.9.0,对应zookeeper3.8.4(可以运行kafka的内置zookeeper查看运行版本号)
官网下载后,上传到/opt/software
解压
tar -zxvf zookeeper压缩包名称 -C /opt/module
修改配置
在安装目录下,创建data文件夹
mkdir /opt/module/zookeeper文件夹/data
cd /opt/module/zookeeper文件夹/data
创建myid文件(集群节点id)
vim myid
cd ../conf
修改conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/opt/module/zookeeper文件夹/data
在最后,加入集群的每个节点
server.主机1的myid=主机名称1:2888:3888
server.主机2的myid=主机名称2:2888:3888
server.主机N的myid=主机名称N:2888:3888
server.主机2的myid=主机名称2:2888:3888
server.主机N的myid=主机名称N:2888:3888
如有其他需求,自行修改,例如默认端口不想用2181
请确认,集群直接开通了2888和3888端口的互通
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --reload
如果还是不行,可以尝试临时关闭防火墙,测试访问是否可用:systemctl stop firewalld
将服务器时区改为北京时间(已改请忽略)
timedatectl,查看是否为Asia/Shanghai
sudo timedatectl set-timezone Asia/Shanghai
时间同步未启用,则开启:sudo timedatectl set-ntp true
最后通过timedatectl查看是否生效
启动、关闭、查看
启动:/opt/module/zookeeper文件夹/bin/zkServer.sh start
关闭:/opt/module/zookeeper文件夹/bin/zkServer.sh stop
查看:/opt/module/zookeeper文件夹/bin/zkServer.sh status
分发到其他节点
cd /opt/module
xsync zookeeper文件夹
在每台服务器上,修改集群节点ID(/opt/module/zookeeper文件夹/data/myid),务必确保唯一性
创建集群式的启停脚本
一键启动或停止所有节点的zookeeper
一键启动或停止所有节点的zookeeper
cd /root/bin
vim zk.sh
#!/bin/bash
case $1 in
"start"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- zookeeper $i 启动 --------------------
ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh start"
done
};;
"stop"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- zookeeper $i 停止 --------------------
ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh stop"
done
};;
"status"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- zookeeper $i 状态 --------------------
ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh status"
done
};;
esac
case $1 in
"start"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- zookeeper $i 启动 --------------------
ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh start"
done
};;
"stop"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- zookeeper $i 停止 --------------------
ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh stop"
done
};;
"status"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- zookeeper $i 状态 --------------------
ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh status"
done
};;
esac
脚本授权
chmod 777 zk.sh
启动:zk.sh start
关闭:zk.sh stop
状态:zk.sh status
安装kafka
在分发脚本那台服务器上安装kafka
官网下载后,上传到/opt/software
解压
tar -zxvf kafka压缩包名称 -C /opt/module
修改配置
cd /opt/module/kafka安装文件夹
在安装目录下创建data文件夹
mkdir data
vim config/server.properties
broker.id:kafka节点id,只要保证唯一即可,一般按顺序填写1,2,3,4...
advertised.listeners:对外暴露的ip和端口,每个节点需要单独配置
格式:PLAINTEXT://当前服务器主机名称:9092
格式:PLAINTEXT://当前服务器主机名称:9092
log.dirs:数据文件路径
zookeeper.connect:主机名称1:2181,主机名称2:2181,主机名称N:2181/kafka
根路径kafka,是为了在zookeeper建立节点时,创建一个kafka根节点,以免和其他zookeeper节点混淆
修改环境变量
vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka文件夹名称
export PATH=$PATH:$KAFKA_HOME/bin
export KAFKA_HOME=/opt/module/kafka文件夹名称
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile.d/my_env.sh
启动、关闭
cd /opt/module/kafka文件夹
启动:bin/kafka-server-start.sh -daemon config/server.properties
关闭:bin/kafka-server-stop.sh
防火墙端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --reload
分发到其他节点
cd /opt/module
xsync kafka文件夹名称
xsync /etc/profile.d/my_env.sh
去各个节点,修改每个节点的个性化属性
对每个节点执行source指令,使环境变量生效
封装集群式的启停脚本
一键启动或关闭所有kafka
一键启动或关闭所有kafka
cd /root/bin
vim kfk.sh
#!/bin/bash
case $1 in
"start"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- kafka $i 启动 --------------------
ssh $i "/opt/module/kafka文件夹/bin/kafka-server-start.sh daemon /opt/module/kafka文件夹/config/server.properties"
done
};;
"stop"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- kafka $i 停止 --------------------
ssh $i "/opt/module/kafka文件夹/bin/kafka-server-stop.sh"
done
};;
esac
case $1 in
"start"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- kafka $i 启动 --------------------
ssh $i "/opt/module/kafka文件夹/bin/kafka-server-start.sh daemon /opt/module/kafka文件夹/config/server.properties"
done
};;
"stop"){
for i in 主机名称1 主机名称2 主机名称N
do
echo ------------- kafka $i 停止 --------------------
ssh $i "/opt/module/kafka文件夹/bin/kafka-server-stop.sh"
done
};;
esac
脚本授权
chmod 777 kfk.sh
启动:kfk.sh start
关闭:kfk.sh stop
创建联合脚本
指令调用脚本
cd /root/bin
vim xcall
#!/bin/bash
for i in 主机名称1 主机名称2 主机名称N
do
echo --------------------- $i ------------------------
ssh $i "$*"
done
for i in 主机名称1 主机名称2 主机名称N
do
echo --------------------- $i ------------------------
ssh $i "$*"
done
脚本授权
chmod 777 xcall
创建集群脚本
cd /root/bin
vim cluster.sh
#!/bin/bash
case $1 in
"start"){
echo ===================== 启动 kafka集群 =======================
#启动zookeeper集群
zk.sh start
#启动kafka集群
kfk.sh start
};;
"stop"){
echo ===================== 停止 kafka集群 =======================
#停止kafka集群
kfk.sh stop
#循环直至kafka集群进程全部停止
kafka_count=$(xcall jps | grep Kafka | wc -l)
while [ $kafka_count -gt 0 ]
do
sleep 1
kafka_count=$(xcall jps | grep Kafka | wc -l)
echo "当前未停止的 Kafka 进程数为 $kafka_count"
done
#停止zookeeper集群
zk.sh stop
};;
esac
case $1 in
"start"){
echo ===================== 启动 kafka集群 =======================
#启动zookeeper集群
zk.sh start
#启动kafka集群
kfk.sh start
};;
"stop"){
echo ===================== 停止 kafka集群 =======================
#停止kafka集群
kfk.sh stop
#循环直至kafka集群进程全部停止
kafka_count=$(xcall jps | grep Kafka | wc -l)
while [ $kafka_count -gt 0 ]
do
sleep 1
kafka_count=$(xcall jps | grep Kafka | wc -l)
echo "当前未停止的 Kafka 进程数为 $kafka_count"
done
#停止zookeeper集群
zk.sh stop
};;
esac
脚本授权
chmod 777 cluster.sh
启动:cluster.sh start
关闭:cluster.sh stop

收藏
0 条评论
下一页