zookeeper 高可用叢集搭建
前言
記錄 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
壓縮包上傳到伺服器後,解壓
//上傳壓縮包 scp zookeeper-3.4.11.tar.gz [email protected]:/home/tools //登入到伺服器目錄 解壓 tar -zxvf zookeeper-3.4.11.tar.gz //進入zookeeper主目錄 cd zookeeper-3.4.11
解壓後看看都有哪些內容:
我們只需要把焦點定位到這兩個目錄:
Zookeeper
執行指令碼命令 ./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
,結果如下:
tcp600 :::2181:::*LISTEN27201/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
配置檔案如下:
initLimit=10 // 初始容忍的心跳數 syncLimit=5// 等待最大容忍的心跳數 dataDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/data//資料儲存目錄 dataLogDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/logs //資料日誌檔案目錄 clientPort=2181 //zookeeper 監聽埠 server.1=192.168.2.216:2888:3888 //主機ip/服務間心跳連線埠/資料埠 server.2=192.168.2.217:2888:3888 server.3=192.168.2.218:2888:3888
分別在每臺伺服器 資料目錄 /home/wwwroot/easywits/tools/zookeeper-3.4.11/data
中新增名為 myid
文字檔案,內容依次為 0,1,2
,這是叢集中每臺 Zookeeper
服務的唯一標識,不能重複,以第一臺為例:
echo "0"> /home/wwwroot/easywits/tools/zookeeper-3.4.11/data/myid
啟動 Zookeeper
: ./bin/zkServer.sh start
檢視每臺伺服器中, Zookeeper
狀態: ./bin/zkServer.sh status
,結果分別如下:
Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: follower Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: leader Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: follower
可以看到啟動模式,第一臺與第三臺為 follower
,而第二臺為 leader
注意: Zookeeper
叢集規模,機器數量只能是 奇數個 ,在三臺機器叢集的情況下,最多隻能掛掉其中一臺,如果主節點掛掉,剩下兩臺服務會重新選舉一臺作為主節點。
總結
-
Zookeeper
啟動失敗,可以在./zookeeper.out
檔案檢視異常日誌 - 每臺機器的
myid
中內容為服務的唯一標識,不能重複 - 確保每臺機器必須能
ping
通,必要時請先關閉防火牆 - 在阿里雲伺服器上,請使用內網
ip
進行配置 - 確保使用的埠未被佔用
-
Zookeeper
叢集機器數量只能是奇數個,詳見 https://www.cnblogs.com/LeeSc...
ps:關於需要用到的工具,可在公眾號「張少林同學」回覆 Java工具
獲取網盤下載連結
最後
記錄一波 Zookeeper
搭建過程,後續會不定期更新原創文章,歡迎關注公眾號 「張少林同學」!