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

目录

1、集群规划

2、集群部署 (!!!前提是要有 JDK 环境 !!!)

3、zookeeper 集群安装部署

4、kafka 集群安装部署

5、Centos7 单节点部署 kafka


环境:

Centos7 (CentOS-7-x86_64-DVD-2009.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、集群规划

node1-130 node2-131 node3-132
192.168.220.130 192.168.220.131 192.168.220.132
zk zk zk
kafka kafka kafka

first of all  在 node1-130/ node2-131/ node3-132 三个节点上都上配置 hosts:

vim /etc/hosts

在末尾添加:

192.168.220.130 node1-130
192.168.220.131 node2-131
192.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:3888
server.2=node2-131:2888:3888
server.3=node3-132:2888:3888

​         参数解读:

server.1=node1-130:2888:3888
server.A=B:C:D
	A 是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 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.service
systemctl enable rsyncd.service

② 在 /root/bin 目录下创建 xsync 文件

cd /root/bin
vim xsync

粘贴以下内容:

#!/bin/bash
#1. 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
​
#2. 遍历集群所有机器
for host in node1-130 node2-131 node3-132       ##更改自己的服务器域名
do
    echo ==================== $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:$pdir
        else
            echo $file does not exists!
    fi
    done
done

③ 给 xsync 添加权限:

​ chmod 777 xsync

④ 添加全局变量

vim /etc/profile
​
# 在末尾添加:
PATH=$PATH:/root/bin
export PATH
​
# 退出,执行以下命令使其生效
source /etc/profile

参考:

https://www.csdn.net/tags/MtTaEg2sMjA2MDA2LWJsb2cO0O0O.html

集群服务器的同步xsync命令使用 - 灰信网(软件开发博客聚合)

如果想执行 xsync 脚本时不用输入密码,需要配置 root 用户免密登录。这里必须要配置,不然起集群的时候会超时,然后某些节点就会启动失败。

root 用户免密登录配置:

① 在 ~./ssh 目录下生成一对密钥(3个节点都要生成)

cd ~/.ssh
ssh-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/bin
vim zk.sh

        2. 粘贴以下内容:

#!/bin/bash

case $1 in
"start"){
	for i in node1-130 node2-131 node3-132
	do
		echo  ------------- zookeeper $i 启动 ------------
		ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
	done
}
;;
"stop"){
	for i in node1-130 node2-131 node3-132
	do
		echo  ------------- zookeeper $i 停止 ------------
		ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
	done
}
;;
"status"){
	for i in node1-130 node2-131 node3-132
	do
		echo  ------------- 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_HOME
export KAFKA_HOME=/opt/module/kafka
export 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 脚本:

  1. 创建 kf.sh 文件:

cd /root/bin
vim kf.sh

        2. 粘贴以下内容:

#!/bin/bash
​
case $1 in
"start"){
    for i in node1-130 node2-131 node3-132
    do
        echo  ------------- 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-132
    do
        echo  ------------- 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

# 下载 jkd8
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/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_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export 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.properties
cd /opt/module/kafka/config
vim 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
​
# 启动 kafka
cd /opt/module/kafka
[root@centos7 kafka]# bin/kafka-server-start.sh -daemon config/server.properties
​
# 可以使用 jps 查看 zookeeper 和 kafka 是否正常运行
[root@centos7 kafka]# jps
1924 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

猜你喜欢

转载自blog.csdn.net/qq_42183414/article/details/125959033