天天看點

zookeeper叢集搭建

本例搭建的是僞叢集模式,即一台機器上啟動三個zookeeper執行個體組成叢集,真正的叢集模式無非就是執行個體IP位址不同,搭建方法沒有差別

配置JAVA環境,檢驗環境:

java -version

echo ${JAVA_HOME}

# 設定zookeeper叢集
cd /usr/local/src
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz -C /usr/local
cd /usr/local/apache-zookeeper-3.5.5-bin

mkdir -p /zkdata/{zookeeper-1,zookeeper-2,zookeeper-3}

cp conf/zoo_sample.cfg conf/zoo-1.cfg
# vim conf/zoo-1.cfg
	dataDir=/zkdata/zookeeper-1
	clientPort=2181

	server.1=127.0.0.1:2888:3888
	server.2=127.0.0.1:2889:3889
	server.3=127.0.0.1:2890:3890

cp conf/zoo-1.cfg conf/zoo-2.cfg
cp conf/zoo-1.cfg conf/zoo-3.cfg

vim conf/zoo-2.cfg
	dataDir=/zkdata/zookeeper-2
	clientPort=2182

	server.1=127.0.0.1:2888:3888
	server.2=127.0.0.1:2889:3889
	server.3=127.0.0.1:2890:3890

vim conf/zoo-3.cfg
	dataDir=/zkdata/zookeeper-3
	clientPort=2183

	server.1=127.0.0.1:2888:3888
	server.2=127.0.0.1:2889:3889
	server.3=127.0.0.1:2890:3890

echo '1' > /zkdata/zookeeper-1/myid
echo '2' > /zkdata/zookeeper-2/myid 
echo '3' > /zkdata/zookeeper-3/myid 

# 修改啟動檔案,避免後續出現如下錯誤
# stat is not executed because it is not in the whitelist.
# envi is not executed because it is not in the whitelist.

# nc指令需要安裝其他軟體
yum install nmap-ncat

# envi指令執行報錯提示:envi is not executed because it is not in the whitelist.
# 解決辦法 修改啟動指令 zkServer.sh ,往裡面添加 :ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"

	else
	    echo "JMX disabled by user request" >&2
	    ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain" # 注意找到這個資訊
	fi

# 如果不想添加在這裡,注意位置和指派的順序
ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"

# 然後重新開機zookeeper

# 叢集啟動腳本
vim start.sh
	bash bin/zkServer.sh start conf/zoo-1.cfg
	bash bin/zkServer.sh start conf/zoo-2.cfg
	bash bin/zkServer.sh start conf/zoo-3.cfg

# 叢集關閉腳本
vim start.sh
	bash bin/zkServer.sh stop conf/zoo-1.cfg
	bash bin/zkServer.sh stop conf/zoo-2.cfg
	bash bin/zkServer.sh stop conf/zoo-3.cfg

# 檢測叢集狀态
[root@bogon apache-zookeeper-3.5.5-bin]# bash bin/zkServer.sh status conf/zoo-1.cfg
	/usr/bin/java
	ZooKeeper JMX enabled by default
	Using config: conf/zoo-1.cfg
	Client port found: 2181. Client address: localhost.
	Mode: follower

[root@bogon apache-zookeeper-3.5.5-bin]# bash bin/zkServer.sh status conf/zoo-2.cfg
	/usr/bin/java
	ZooKeeper JMX enabled by default
	Using config: conf/zoo-2.cfg
	Client port found: 2182. Client address: localhost.
	Mode: leader

[root@bogon apache-zookeeper-3.5.5-bin]# bash bin/zkServer.sh status conf/zoo-3.cfg
	/usr/bin/java
	ZooKeeper JMX enabled by default
	Using config: conf/zoo-3.cfg
	Client port found: 2183. Client address: localhost.
	Mode: follower
           
配置說明

    tickTime:這個時間是作為 Zookeeper 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
    initLimit:這個配置項是用來配置 Zookeeper 接受用戶端(這裡所說的用戶端不是使用者連接配接 Zookeeper 伺服器的用戶端,而是 Zookeeper 伺服器叢集中連接配接到 Leader 的 Follower 伺服器)初始化連接配接時最長能忍受多少個心跳時間間隔數。當已經超過 10個心跳的時間(也就是 tickTime)長度後 Zookeeper 伺服器還沒有收到用戶端的傳回資訊,那麼表明這個用戶端連接配接失敗。總的時間長度就是 10*2000=20 秒
    syncLimit:這個配置項辨別 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10秒
    dataDir:顧名思義就是 Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 将寫資料的日志檔案也儲存在這個目錄裡。
    clientPort:這個端口就是用戶端連接配接 Zookeeper 伺服器的端口,Zookeeper 會監聽這個端口,接受用戶端的通路請求。
    server.A=B:C:D:其中 A 是一個數字,表示這個是第幾号伺服器;B 是這個伺服器的 ip 位址;C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的端口;D 表示的是萬一叢集中的 Leader 伺服器挂了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時伺服器互相通信的端口。如果是僞叢集的配置方式,由于 B 都是一樣,是以不同的 Zookeeper 執行個體通信端口号不能一樣,是以要給它們配置設定不同的端口号。