Zookeeper 集羣中只要有過半的節點是正常的情況下,那麼整個集羣對外就是可用的。正是基於這個
特性,要將 ZK 集羣的節點數量要爲奇數(2n+1:如 3、5、7 個節點)較爲合適。
系統環境:CentOS 6.6_x64 jdk1.8
服務器IP和端口規劃:
服務器 1:192.168.1.11 端口:2181、2888、3888
服務器 2:192.168.1.12 端口:2181、2888、3888
服務器 3:192.168.1.13 端口:2181、2888、3888
1、 修改操作系統的/etc/hosts 文件,添加 IP 與主機名映射:
vim /etc/hosts # zookeeper cluster servers 192.168.1.11 zk-01 192.168.1.12 zk-02 192.168.1.13 zk-03
2、 下載或上傳 zookeeper-3.4.6.tar.gz 到/home/wusc/zookeeper 目錄:
cd /usr/local/src wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
3、 解壓 zookeeper 安裝包,並建立軟連接:
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/ ln -sv /usr/local/zookeeper-3.4.6 /usr/local/zookeeper
4、 在各 zookeeper 節點下創建以下目錄:
mkdir -pv /data/zookeeper/{data,log} #數據目錄和日誌目錄
5、 將/usr/local/zookeeper/conf 目錄下的 zoo_sample.cfg 文件拷貝一份,命名爲 zoo.cfg:
cp zoo_sample.cfg zoo.cfg
6、 修改 zoo.cfg 配置文件:#3臺的配置一樣
vim /usr/local/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/ dataLogDir=/data/zookeeper/log clientPort=2181 server.1=zk-01:2888:3888 server.2=zk-02:2888:3888 server.3=zk-03:2888:3888
參數說明:
tickTime=2000
tickTime 這個時間是作爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每
個 tickTime 時間就會發送一個心跳。
initLimit=10
initLimit 這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶連接 Zookeeper
服務器的客戶端,而是 Zookeeper 服務器集羣中連接到 Leader 的 Follower 服務器)初始化連接時最長
能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 服
務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是 10*2000=20 秒。
syncLimit=5
syncLimit 這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10 秒。
dataDir=/data/zookeeper/
dataDir顧名思義就是Zookeeper保存數據的目錄,默認情況下Zookeeper將寫數據的日誌文件也保存在
這個目錄裏。
clientPort=2181
clientPort 這個端口就是客戶端(應用程序)連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端
口接受客戶端的訪問請求。
server.A=B:C:D
server.1=zk-01:2888:3888
server.2=zk-02:2888:3888
server.3=zk-03:2888:3888
A 是一個數字,表示這個是第幾號服務器;
B 是這個服務器的 IP 地址(或者是與 IP 地址做了映射的主機名) ;
C 第一個端口用來集羣成員的信息交換,表示這個服務器與集羣中的 Leader 服務器交換信息的端口;
D 是在 leader 掛掉時專門用來進行選舉 leader 所用的端口。
注意:如果是僞集羣的配置方式,不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不
同的端口號。
7、 在 dataDir=/data/zookeeper/ 下創建 myid 文件
編輯 myid 文件,並在對應的 IP 的機器上輸入對應的編號。如在 node-01 上,myid 文件內容就是
1,node-02 上就是 2,node-03 上就是 3:
echo 1 > /data/zookeeper/myid echo 2 > /data/zookeeper/myid echo 3 > /data/zookeeper/myid
8、 在防火牆中打開要用到的端口 2181、2888、3888
vim /etc/sysconfig/iptables ## zookeeper -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
重啓防火牆:
service iptables restart
查看防火牆端口狀態:
iptables -L
9、 啓動並測試 zookeeper:
/usr/local/zookeeper/bin/zkServer.sh start
jps #查看進程 247 QuorumPeerMain #QuorumPeerMain是zookeeper進程,說明啓動正常 tailf -200 /data/zookeeper/log/zookeeper.out #查看日誌,沒報錯,有集羣配置信息就說明集羣配置成功
注意:zookeeper集羣配置每個節點的配置都是一樣的