目录
1、集群规划
2、集群部署 (!!!前提是要有 JDK 环境 !!!)
3、zookeeper 集群安装部署
4、kafka 集群安装部署
5、Centos7 单节点部署 kafka
环境:
Centos7 (CentOS-7-x86_64-DVD-.iso) [ *3 虚拟机]
JDK1.8 (jdk-8u131-linux-x64.tar.gz)
Zookeeper-3.5.7 (apache-zookeeper-3.5.7-bin.tar.gz)
Kafka3.0.0 (kafka_2.12-3.0.0.tgz)
1、集群规划
first of all 在 node1-130/ node2-131/ node3-132 三个节点上都上配置 hosts:
vim /etc/hosts
在末尾添加:
192.168.220.130 node1-130192.168.220.131 node2-131192.168.220.132 node3-132
secondly 关闭三个节点的防火墙
#查看状态:systemctl status firewalld.service#关闭防火墙systemctl stop firewalld.service#永久关闭防火墙systemctl disable firewalld.service
2、集群部署(!!!前提是要有 JDK 环境 !!!)
官方下载地址:kafka:Apache Kafka
zookeeper:Apache ZooKeeper
3、zookeeper 集群安装部署
1)解压安装包(下载带 bin 的包!!!apache-zookeeper-3.5.7-bin.tar.gz,否则会报错 [狗头])
# cd /software[root@node1-130 software]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module[root@node2-131 software]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module[root@node3-132 software]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module
2)修改解压后的文件名称
# cd /opt/module[root@node1-130 module]# mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7[root@node2-131 module]# mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7[root@node3-132 module]# mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
3)配置 服务器编号
1. 在 /opt/module/zookeeper-3.5.7/ 目录下创建 zkData
[root@node1-130 zookeeper-3.5.7]# mkdir zkData[root@node2-131 zookeeper-3.5.7]# mkdir zkData[root@node3-132 zookeeper-3.5.7]# mkdir zkData
2. 在 opt/module/zookeeper-3.5.7/zkData 目录下创建一个 myid 的文件
# cd /opt/module/zookeeper-3.5.7/zkData[root@node1-130 zkData]# vi myid内容为: 1[root@node2-131 zkData]# vi myid内容为: 2[root@node3-132 zkData]# vi myid内容为: 3
(注意:上下不要有空行,左右不要有空格,且数字一定要从1开始,否则报错!!!)
4)配置zoo.cfg文件
1. 重命名 /opt/module/zookeeper-3.5.7/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg
cd /opt/module/zookeeper-3.5.7/conf[root@node1-130 conf]# mv zoo_sample.cfg zoo.cfg
2. 编辑 zoo.cfg 文件
[root@node1-130 conf]# vim zoo.cfg#修改数据存储路径配置dataDir=/opt/module/zookeeper-3.5.7/zkData#增加如下配置:#######################cluster##########################server.1=node1-130:2888:3888server.2=node2-131:2888:3888server.3=node3-132:2888:3888
参数解读:
server.1=node1-130:2888:3888server.A=B:C:DA 是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据 A 值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。B 是这个服务器的地址;C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
3. 同步 zoo.cfg 配置文件
[root@node1-130 conf]# xsync zoo.cfg
如果出现:-bash: xsync: 未找到命令
执行以下步骤,编写 xsync 脚本:
① 安装 rsync
yum -y install rsync# 启动服务与开机自启动systemctl start rsyncd.servicesystemctl enable rsyncd.service
② 在 /root/bin 目录下创建 xsync 文件
cd /root/binvim xsync
粘贴以下内容:
#!/bin/bash#1. 获取输入参数个数,如果没有参数,直接退出pcount=$#if [ $pcount -lt 1 ]thenecho Not Enough Arguement!exit;fi#2. 遍历集群所有机器for host in node1-130 node2-131 node3-132 ##更改自己的服务器域名doecho ==================== $host ====================#3. 遍历所有目录,挨个发送for file in $@do#4 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)echo pdir=$pdir#6. 获取当前文件的名称fname=$(basename $file)echo fname=$fname#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)ssh $host "mkdir -p $pdir"#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下rsync -av $pdir/$fname $USER@$host:$pdirelseecho $file does not exists!fidonedone
③ 给 xsync 添加权限:
chmod 777 xsync
④ 添加全局变量
vim /etc/profile# 在末尾添加:PATH=$PATH:/root/binexport PATH# 退出,执行以下命令使其生效source /etc/profile
参考:
/tags/MtTaEg2sMjA2MDA2LWJsb2cO0O0O.html
集群服务器的同步xsync命令使用 - 灰信网(软件开发博客聚合)
如果想执行 xsync 脚本时不用输入密码,需要配置 root 用户免密登录。这里必须要配置,不然起集群的时候会超时,然后某些节点就会启动失败。
root 用户免密登录配置:
① 在 ~./ssh 目录下生成一对密钥(3个节点都要生成)
cd ~/.sshssh-keygen -t rsa# 输入该命令后会有提示,一直回车即可# 如果提示 【-bash: cd: .ssh: 没有那个文件或目录】 直接 ssh-keygen -t rsa 生成密钥就行
② node1-130 节点中将公匙保存到 authorized_keys 文件中
[root@node1-130 .ssh]# cat id_rsa.pub >> authorized_keys
③ 登录 node2-131 和 node3-132 节点,将其公钥文件内容拷贝到 node1-130 节点的 authorized_keys 文件中
# node2-131 节点的公钥拷贝[root@node2-131 .ssh]# ssh-copy-id -i node1-130 # node3-132 节点的公钥拷贝[root@node3-132 .ssh]# ssh-copy-id -i node1-130
④ 在 node1-130 节点中修改权限(~/.ssh 目录 和 authorized_keys 文件)
[root@node1-130 .ssh]# chmod 700 ~/.ssh[root@node1-130 .ssh]# chmod 644 ~/.ssh/authorized_keys
⑤ 将授权文件分发到其他节点上
# 拷贝到 node2-131 节点上[root@node1-130 .ssh]# scp /root/.ssh/authorized_keys node2-131:/root/.ssh/# 拷贝到 node3-132 节点上[root@node1-130 .ssh]# scp /root/.ssh/authorized_keys node3-132:/root/.ssh/
至此,免密码登录已经设定完成,注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录
[root@node1-130 .ssh]# ssh node2-131[root@node1-130 .ssh]# ssh node3-132
参考:
Centos7下实现免密登录_李东要努力的博客-CSDN博客
Centos 7.7 免密登录 - 走看看
5)集群操作
执行以下步骤,编写 zk.sh 脚本:
1. 创建 zk.sh 文件:
cd /root/binvim zk.sh
2. 粘贴以下内容:
#!/bin/bashcase $1 in"start"){for i in node1-130 node2-131 node3-132doecho ------------- zookeeper $i 启动 ------------ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"done};;"stop"){for i in node1-130 node2-131 node3-132doecho ------------- zookeeper $i 停止 ------------ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"done};;"status"){for i in node1-130 node2-131 node3-132doecho ------------- zookeeper $i 状态 ------------ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"done};;esac
3.给 zk.sh 脚本添加权限
[root@node1-130 bin]# chmod 777 zk.sh
启动 zookeeper 集群:
[root@node1-130 module]# zk.sh start
查看 zookeeper 集群状态:
[root@node1-130 module]# zk.sh status
停止 zookeeper集群:
[root@node1-130 module]# zk.sh stop
报错:Error: JAVA_HOME is not set and java could not be found in PATH
参考:Error: JAVA_HOME is not set and java could not be found in PATH._Knight_AL的博客-CSDN博客
本教程操作:通过 vim /etc/profile 查看 jdk 的安装路径:JAVA_HOME=/usr/local/java/jdk1.8.0_131cd /opt/module/zookeeper-3.5.7/bin[root@node1-130 bin]# vim zkEnv.sh# 在上图位置插入以下内容:JAVA_HOME=/usr/local/java/jdk1.8.0_131# 分发到其它节点[root@node1-130 bin]# xsync zkEnv.sh
集群启动出现问题的参考:【已解决】zookeeper显示Error contacting service. It is probably not running等问题_暴走的Mine的博客-CSDN博客
4、kafka 集群安装部署
1)解压安装包
# cd /software[root@node1-130 software]# tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/[root@node2-131 software]# tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/[root@node3-132 software]# tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/
2)修改解压后的文件名称
# cd /opt/module[root@node1-130 module]# mv kafka_2.12-3.0.0/ kafka[root@node2-131 module]# mv kafka_2.12-3.0.0/ kafka[root@node3-132 module]# mv kafka_2.12-3.0.0/ kafka
3)进入到 /opt/module/kafka 目录,修改配置文件
# cd /opt/module/kafka/config[root@node1-130 config]# vim server.properties
修改以下内容:
#broker 的全局唯一编号,不能重复,只能是数字。broker.id=0#kafka 运行日志(数据)存放的路径log.dirs=/opt/module/kafka/datas#配置连接 Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理 zk 文件)zookeeper.connect=node1-130:2181,node2-131:2181,node3-132:2181/kafka
4)分发安装包
[root@node1-130 module]# xsync kafka/
5)分别在 node2-131 和 node2-132 上修改配置文件 /opt/module/kafka/config/server.properties 中的 broker.id=1、broker.id=2
注:broker.id 不得重复,整个集群中唯一
[root@node2-131 module]# vim kafka/config/server.properties修改:# The id of the broker. This must be set to a unique integer for each broker.broker.id=1[root@node3-132 module]# vim kafka/config/server.properties修改:# The id of the broker. This must be set to a unique integer for each broker.broker.id=2
6)配置环境变量
① 在 /etc/profile.d/my_env.sh 文件中增加 kafka 环境变量配置
[root@node1-130 ~]# vim /etc/profile.d/my_env.sh
添加如下内容:
#KAFKA_HOMEexport KAFKA_HOME=/opt/module/kafkaexport PATH=$PATH:$KAFKA_HOME/bin
② 刷新一下环境变量
[root@node1-130 ~]# source /etc/profile
③ 分发环境变量文件到其他节点,并 source
[root@node1-130 ~]# xsync /etc/profile.d/my_env.sh# 在另外两个节点生效环境变量:[root@node2-131 ~]# source /etc/profile[root@node3-132 ~]# source /etc/profile
7)启动集群
① 启动 zookeeper 集群
[root@node1-130 module]# zk.sh start
② 启动 kafka 集群
[root@node1-130 module]# kf.sh start
执行以下步骤,编写 kf.sh 脚本:
创建 kf.sh 文件:
cd /root/binvim kf.sh
2. 粘贴以下内容:
#!/bin/bashcase $1 in"start"){for i in node1-130 node2-131 node3-132doecho ------------- zookeeper $i 启动 ------------ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"done};;"stop"){for i in node1-130 node2-131 node3-132doecho ------------- zookeeper $i 停止 ------------ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh"done};;esac
3. 给 kf.sh 脚本添加权限
[root@node1-130 bin]# chmod 777 kf.sh
kafka 集群启动遇到了问题:可以去 cat kafka/logs 看看报什么错
我遇到的问题是:执行 kf.sh start ,node1-130 节点 kafka 节点能启动,但是另外两个节点起不来,去另外两个节点看日志 cat /opt/module/kafka/logs/kafkaServer.out 显示:
nohup: 无法运行命令"java": 没有那个文件或目录
解决方法:上面的 kf.sh 脚本中,启动和停止语句加上:source /etc/profile&& 即:
ssh $i "source /etc/profile && /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
ssh $i "source /etc/profile && /opt/module/kafka/bin/kafka-server-stop.sh"
此问题参考:nohup: 无法运行命令 ‘/bin/java‘: 没有那个文件或目录 - 晓枫的春天 - 博客园
③ 验证 kafka 集群是否安装启动成功
# 创建一个 topic 分 3 个区[root@node1-130 kafka]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server node1-130:9092 --create --partitions 3 --replication-factor 3 --topic first# 然后 3 个节点都看看有没有 first 这个 topic,有则恭喜你,排除万难集群安装部署成功了[root@node1-130 kafka]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server node1-130:9092 --list[root@node1-131 kafka]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server node2-131:9092 --list[root@node1-132 kafka]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server node2-132:9092 --list
④ 停止 kafka 集群
[root@node1-130 module]# kf.sh stop
⑤ 停止 Zookeeper 集群
[root@node1-130 module]# zk.sh stop
注意:停止 Kafka 集群时,一定要等 Kafka 所有节点进程全部停止后再停止 Zookeeper 集群。因为 Zookeeper 集群当中记录着 Kafka 集群相关信息,Zookeeper 集群一旦先停止,Kafka 集群就没有办法再获取停止进程的信息,只能手动杀死 Kafka 进程了。
5、Centos7 单节点部署 kafka
① 配置 JDK
# 下载 jkd8wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" /otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz# 创建安装目录mkdir /usr/local/java# 解压至安装目录tar -zxvf jdk-8u131-linux-x64.tar.gz -C /usr/local/java/# 设置环境变量vim /etc/profile# 在末尾添加export JAVA_HOME=/usr/local/java/jdk1.8.0_131export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH# 使环境变量生效source /etc/profile# 检查java -version
参考:Centos7配置JAVA环境_一卷良辰的博客-CSDN博客_centos7配置java
② 安装配置 kafka
# 解压安装包cd /software[root@centos70 software]# tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/# 修改解压后的名称cd /opt/module[root@centos7 module]# mv kafka_2.12-3.0.0/ kafka# 修改 kafka 配置文件 /opt/module/kafka/config/server.propertiescd /opt/module/kafka/configvim server.properties# 配置:# 1.删除此行注释,并加上本机 ip 地址listeners=PLAINTEXT://192.168.220.129:9092# 2.zookeeper 添加本机 ip 地址zookeeper.connect=192.168.220.129:2181# 启动 zookeeper (kafka 自身包含了 zookeeper ,所以在 bin 目录下有 zookeeper 的启动脚本)cd /opt/module/kafka[root@centos7 kafka]# bin/zookeeper-server-start.sh -daemon config/zookeeper.properties# 启动 kafkacd /opt/module/kafka[root@centos7 kafka]# bin/kafka-server-start.sh -daemon config/server.properties# 可以使用 jps 查看 zookeeper 和 kafka 是否正常运行[root@centos7 kafka]# jps1924 QuorumPeerMain # 说明 zookeeper 正常运行2265 Kafka# 说明 kafka 正常运行2377 Jps# 添加一个 topic[root@centos7 kafka]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.220.129:9092 --create --partitions 1 --replication-factor 3 --topic test# 查看 topic 列表[root@centos7 kafka]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.220.129:9092 --list
参考:Centos7 部署kafka_峰frank的博客-CSDN博客_centos7部署kafka