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、集群規劃
| 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-132secondly? 關閉三個節點的防火墻
#查看狀態: systemctl status firewalld.service #關閉防火墻 systemctl stop firewalld.service #永久關閉防火墻 systemctl disable firewalld.service2、集群部署 (!!!前提是要有 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/module2)修改解壓后的文件名稱
# 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.73)配置 服務器編號
????????? 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: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.service systemctl enable rsyncd.service② 在 /root/bin 目錄下創建 xsync 文件
cd /root/bin vim 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!fidone 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/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/ kafka3)進入到 /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/kafka4)分發安裝包
[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=26)配置環境變量
????????? ① 在 /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/profile7)啟動集群
????????? ① 啟動 zookeeper 集群
[root@node1-130 module]# zk.sh start? ????????② 啟動 kafka 集群
[root@node1-130 module]# kf.sh start執行以下步驟,編寫 kf.sh 腳本:
創建 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.shkafka 集群啟動遇到了問題:可以去 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
?
總結
以上是生活随笔為你收集整理的zookeeper 集群 + kafka 集群 : 安装部署(附单机部署)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: matlab r2021b校园正版软件安
- 下一篇: linux dbm数据库,Linux d
