1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > zookeeper 集群 + kafka 集群 : 安装部署(附单机部署)

zookeeper 集群 + kafka 集群 : 安装部署(附单机部署)

时间:2021-02-24 04:53:59

相关推荐

zookeeper 集群 + kafka 集群 : 安装部署(附单机部署)

目录

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_131​cd /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/bash​case $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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。