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<br>ip2 主机名2<br>...<br>ipN 主机名N
重启所有kafka服务器
在任意一台服务器编写分发脚本
vim /bin/xsync<br>
#!/bin/bash<br><br>#1. 判断参数个数<br>if [ $# -lt 1 ]<br>then<br> echo Not Enough Arguement!<br> exit;<br>fi<br><br>#2. 遍历集群所有机器<br>for host in 主机名1 主机名2 主机名N<br>do<br> echo ======================== $host ========================<br> #3. 遍历所有目录,挨个发送<br> for file in $@<br> do<br> #4. 判断文件是否存在<br> if [ -e $file ]<br> then<br> #5. 获取父目录<br> pdir=$(cd -P $(dirname $file); pwd)<br> #6. 获取当前文件的名称<br> fname=$(basename $file)<br> ssh $host "mkdir -p $pdir"<br> rsync -av $pdir/$fname $host:$pdir<br> else<br> echo $file dose not exists!<br> fi<br> done<br>done<br>
修改分发脚本权限
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<br>export JAVA_HOME=/opt/module/解压后的JDK文件夹名称<br>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<br>
最新版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<br>server.主机2的myid=主机名称2:2888:3888<br>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),务必确保唯一性
创建集群式的启停脚本<br>一键启动或停止所有节点的zookeeper
cd /root/bin
vim zk.sh
#!/bin/bash<br><br>case $1 in<br>"start"){<br> for i in 主机名称1 主机名称2 主机名称N<br> do<br> echo ------------- zookeeper $i 启动 --------------------<br> ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh start"<br> done<br>};;<br>"stop"){<br> for i in 主机名称1 主机名称2 主机名称N<br> do<br> echo ------------- zookeeper $i 停止 --------------------<br> ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh stop"<br> done<br>};;<br>"status"){<br> for i in 主机名称1 主机名称2 主机名称N<br> do<br> echo ------------- zookeeper $i 状态 --------------------<br> ssh $i "/opt/module/zookeeper文件夹/bin/zkServer.sh status"<br> done<br>};;<br>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和端口,每个节点需要单独配置<br>格式: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<br>export KAFKA_HOME=/opt/module/kafka文件夹名称<br>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指令,使环境变量生效
封装集群式的启停脚本<br>一键启动或关闭所有kafka
cd /root/bin
vim kfk.sh
#!/bin/bash<br><br>case $1 in<br>"start"){<br> for i in 主机名称1 主机名称2 主机名称N<br> do<br> echo ------------- kafka $i 启动 --------------------<br> ssh $i "/opt/module/kafka文件夹/bin/kafka-server-start.sh daemon /opt/module/kafka文件夹/config/server.properties"<br> done<br>};;<br>"stop"){<br> for i in 主机名称1 主机名称2 主机名称N<br> do<br> echo ------------- kafka $i 停止 --------------------<br> ssh $i "/opt/module/kafka文件夹/bin/kafka-server-stop.sh"<br> done<br>};;<br>esac
脚本授权
chmod 777 kfk.sh
启动:kfk.sh start
关闭:kfk.sh stop
创建联合脚本<br>
指令调用脚本
cd /root/bin
vim xcall
#!/bin/bash<br><br>for i in 主机名称1 主机名称2 主机名称N<br>do<br> echo --------------------- $i ------------------------<br> ssh $i "$*"<br>done
脚本授权
chmod 777 xcall
创建集群脚本
cd /root/bin
vim cluster.sh
#!/bin/bash<br><br>case $1 in<br>"start"){<br> echo ===================== 启动 kafka集群 =======================<br><br> #启动zookeeper集群<br> zk.sh start<br><br> #启动kafka集群<br> kfk.sh start<br>};;<br>"stop"){<br> echo ===================== 停止 kafka集群 =======================<br><br> #停止kafka集群<br> kfk.sh stop<br><br> #循环直至kafka集群进程全部停止<br> kafka_count=$(xcall jps | grep Kafka | wc -l)<br> while [ $kafka_count -gt 0 ]<br> do<br> sleep 1<br> kafka_count=$(xcall jps | grep Kafka | wc -l)<br> echo "当前未停止的 Kafka 进程数为 $kafka_count"<br> done<br> <br> #停止zookeeper集群<br> zk.sh stop<br>};;<br>esac
脚本授权
chmod 777 cluster.sh
启动:cluster.sh start
关闭:cluster.sh stop
0 条评论
下一页