前言
記錄Zookeeper
集群搭建的過程!
什么是 Zookeeper ?
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
划重點:分布式應用程序協調服務,在分布式系統中,通常需要一個通用的服務注冊與發現中心,因此Zookeeper
就是充當這樣的角色,國內非常出名的分布式框架Dubbo
也建議使用Zookeeper
作為服務注冊與發現中心。

環境准備
准備三台Linux
虛擬機,前往官網下載zookeeper
壓縮包,如果不知道官網如何下載,可在公眾號「張少林同學」回復Java工具
獲取網盤下載鏈接
OS | 主機名 | ip | zookeeper/端口 |
---|---|---|---|
centos7 | LIHETEST6 | 192.168.2.216 | zookeeper-3.4.11.tar.gz/2181 |
centos7 | LIHETEST7 | 192.168.2.217 | zookeeper-3.4.11.tar.gz/2181 |
centos7 | LIHETEST8 | 192.168.2.218 | zookeeper-3.4.11.tar.gz/2181 |
配置服務器 hosts 映射
在三台服務器分別做以下操作,這里以 LIHETEST6
為例:
- 查看本機主機名:
hostname
vim /etc/hostname
刪除原有內容,新增主機名:LIHETEST6
- 設置主機名及IP映射 :
vim /etc/hosts
在文件尾部添加內容,格式為: IP 地址 主機名 (中間用空格分割),保存退出,例如:192.168.2.216 LIHETEST6
- 重啟網絡服務:
systemctl restart network
單機部署
將Zookeeper
壓縮包上傳到服務器后,解壓
1//上傳壓縮包
2scp zookeeper-3.4.11.tar.gz root@192.168.2.219:/home/tools
3//登錄到服務器目錄 解壓
4tar -zxvf zookeeper-3.4.11.tar.gz
5//進入zookeeper主目錄
6cd zookeeper-3.4.11
解壓后看看都有哪些內容:

我們只需要把焦點定位到這兩個目錄:
- bin目錄:腳本執行目錄,里面放置一些
Zookeeper
啟動腳本等 - conf目錄:配置文件目錄
執行腳本命令./bin/zkServer.sh start
啟動Zookeeper
,結果如下:

提示找不到 ../conf/zoo.cfg
文件,但是最后卻打印STARTED
,於是執行./bin/zkServer.sh status
看看當前Zookeeper
狀態,結果如下:

上述結果很清晰明了了,Zookeeper
啟動失敗,原因是找不到配置文件:./conf/zoo.cfg
,./bin/zkServer.sh start
命令啟動時,默認會使用此配置文件啟動,而初始化時./conf
目錄下並無此文件,查看./conf
中存在一個樣例配置文件./conf/zoo_sample.cfg
,於是執行cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
復制一份./conf/zoo.cfg
文件出來,再次執行命令啟動Zookeeper
,結果如下:

可以看出Zookeeper
已經啟動了,並且是單機模式啟動。
再看看啟動日志信息cat zookeeper.out
:

zookeeper
啟動,綁定在2181
端口,查看一下進程是否存在:netstat -lntp | grep 2181
,結果如下:
1tcp6 0 0 :::2181 :::* LISTEN 27201/java
配置文件解析

- tickTime:客戶端與服務端保持心跳的毫秒數
- initLimit:初始容忍的心跳數
- syncLimit:等待最大容忍的心跳數
- dataDir:存儲快照的目錄,這里默認是使用系統臨時目錄,真實使用時建議自定義目錄
- clientPort:暴露給客戶端訪問的端口
單機偽集群部署
有時候我們會在本機搭建一個偽集群,用於項目代碼測試,那么只需要啟動三個不同配置的Zookeeper
即可,只要端口不同,即可視為不同的程序。
在./conf
目錄下新增zoo1.cfg
,zoo2.cfg
,zoo3.cfg
配置文件,其中dataDir
目錄依次都不同,clientPort
分別配置為2181
,2182
,2183
。啟動Zookeeper
時,顯式指定配置文件,如:./bin/zkServer.sh start conf/zoo3.cfg
,依次啟動三個Zookeeper
配置文件。。那么最終執行netstat -lntp
看下端口監聽情況:

可以看到啟動了三個監聽不同端口的Zookeeper
.
多機集群部署
在真實生產環境中,我們一般會搭建一個多機器集群的,目的很明顯,為了提高容錯能力。
在三台機器中,每台安裝一個Zookeeper
服務,這三台機器形成一個小規模的集群。
在每台機器中修改./conf/zoo.cfg
配置文件如下:
1 initLimit=10 // 初始容忍的心跳數
2 syncLimit=5 // 等待最大容忍的心跳數
3 dataDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/data //數據存儲目錄
4 dataLogDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/logs //數據日志文件目錄
5 clientPort=2181 //zookeeper 監聽端口
6 server.1=192.168.2.216:2888:3888 //主機ip/服務間心跳連接端口/數據端口
7 server.2=192.168.2.217:2888:3888
8 server.3=192.168.2.218:2888:3888
分別在每台服務器 數據目錄 /home/wwwroot/easywits/tools/zookeeper-3.4.11/data
中新增名為 myid
文本文件,內容依次為 0,1,2
,這是集群中每台 Zookeeper
服務的唯一標識,不能重復,以第一台為例:
1echo "0" > /home/wwwroot/easywits/tools/zookeeper-3.4.11/data/myid
啟動 Zookeeper
: ./bin/zkServer.sh start
查看每台服務器中,Zookeeper
狀態:./bin/zkServer.sh status
,結果分別如下:
1 Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
2 Mode: follower
3
4 Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
5 Mode: leader
6
7 Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
8 Mode: follower
可以看到啟動模式,第一台與第三台為follower
,而第二台為leader
注意:Zookeeper
集群規模,機器數量只能是奇數個,在三台機器集群的情況下,最多只能掛掉其中一台,如果主節點掛掉,剩下兩台服務會重新選舉一台作為主節點。
總結
Zookeeper
啟動失敗,可以在./zookeeper.out
文件查看異常日志- 每台機器的
myid
中內容為服務的唯一標識,不能重復 - 確保每台機器必須能
ping
通,必要時請先關閉防火牆 - 在阿里雲服務器上,請使用內網
ip
進行配置 - 確保使用的端口未被占用
Zookeeper
集群機器數量只能是奇數個,詳見 https://www.cnblogs.com/LeeScofiled/p/7390937.html
ps:關於需要用到的工具,可在公眾號「張少林同學」回復Java工具
獲取網盤下載鏈接
最后
記錄一波Zookeeper
搭建過程,后續會不定期更新原創文章,歡迎關注公眾號 「張少林同學」!
