Zookeeper 集群的安裝及高可用性驗證已完成!


安裝包

kafka_2.12-0.10.2.0.tgz

zookeeper-3.3.5.tar.gz

Java 環境

Zookeeper 和 Kafka 的運行都需要 Java 環境,Kafka 默認使用 G1 垃圾回收器。如果不更改垃圾回收期,官方推薦使用 7u51 以上版本的 JRE 。如果使用老版本的 JRE,需要更改 Kafka 的啟動腳本,指定 G1 以外的垃圾回收器。

本文使用系統自帶的 Java 環境。

Zookeeper 集群搭建

簡介

Kafka 依賴 Zookeeper 管理自身集群(Broker、Offset、Producer、Consumer等),所以先要安裝 Zookeeper。

為了達到高可用的目的,Zookeeper 自身也不能是單點,接下來就介紹如何搭建一個最小的 Zookeeper 集群(3個 zk 節點)。

安裝

# tar zxvf zookeeper-3.3.5.tar.gz
# mv zookeeper-3.3.5 zookeeper

配置

配置文件位置

路徑:zookeeper/conf

生成配置文件

將 zoo_sample.cfg 復制一份,命名為 zoo.cfg,此即為Zookeeper的配置文件。

# cd zookeeper
# cd conf
# cp zoo_sample.cfg zoo.cfg

編輯配置文件

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/opt/zookeeper-3.3.5/data
dataLogDir=/opt/zookeeper-3.3.5/logs
# the port at which the clients will connect
clientPort=12181   #自定義端口
server.3=172.19.160.X:12888:13888
server.4=172.19.160.X:12888:13888
server.5=172.19.160.X:12888:13888

server.3 4 5 必須跟myid里面的數字一樣  設置成3 4 5 。否則會報錯

說明:

#server.1 這個1是服務器的標識也可以是其他的數字, 表示這個是第幾號服務器,用來標識服務器,這個標識要寫到快照目錄下面myid文件里
#IP為集群里的IP地址,第一個端口是master和slave之間的通信端口,默認是2888,第二個端口是leader選舉的端口,
集群剛啟動的時候選舉或者leader掛掉之后進行新的選舉的端口默認是3888

#tickTime:
這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
#initLimit:
這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 
服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)
長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒 #syncLimit: 這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是5*2000=10秒 #dataDir: 快照日志的存儲路徑 #dataLogDir: 事物日志的存儲路徑,如果不配置這個那么事物日志會默認存儲到dataDir制定的目錄,這樣會嚴重影響zk的性能,當zk吞吐量較大的時候,產生的事物日志、快照日志太多 #clientPort: 這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。修改他的端口改大點
 

創建 myid 文件

分別在三台主機的 dataDir 路徑下創建一個文件名為 myid 的文件,文件內容為該 zk 節點的編號。

例如,在第一台主機上建立的 myid 文件內容是 0,第二台是 1。

7. 啟動

啟動三台主機上的 zookeeper 服務

# cd bin
# ./zkServer.sh start

返回信息:

8. 查看集群狀態

3個節點啟動完成后,可依次執行如下命令查看集群狀態:

./zkServer.sh status

192.168.6.128 返回:

192.168.6.129 返回:

192.168.6.130 返回:

如上所示,3個節點中,有1個 leader 和兩個 follower。

9. 測試集群高可用性

1)停掉集群中的為 leader 的 zookeeper 服務,本文中的leader為 server2。

# ./zkServer.sh stop

返回信息:

2)查看集群中 server0 和 server1 的的狀態

server0:

server1:

此時,server1 成為了集群中的 leader,server0依然為 follower。

3)啟動 server2 的 zookeeper 服務,並查看狀態

此時,server2 成為了集群中的 follower。

此時,Zookeeper 集群的安裝及高可用性驗證已完成!

jps查看進程

 

zookeeper內存調整方法

 

zookeeper3.4.5內存分配

 

 對於zookeeper內存設置多大有些疑問,這里給大家解惑一下:

 

首先介紹一下該如何分配內存:

 

文件路徑:zookeeper/bin/zkEnv.sh

 

 

 

 

 

 

該文件已經明確說明有獨立JVM內存的設置文件,路徑是zookeeper/conf/Java.env

 

安裝的時候這個路徑下沒有有java.env文件,需要自己新建一個:

 

vi java.env

 

java.env文件內容如下:

 

#!/bin/sh

 

export JAVA_HOME=/usr/java/jdk

 

# heap size MUST be modified according to cluster environment

 

export JVMFLAGS="-Xms512m -Xmx1024m $JVMFLAGS"

 

對於內存的分配,還是根據項目和機器情況而定。如果內存夠用,適當的大點可以提升zk性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM