zookeeper 高可用集羣搭建

前言

記錄Zookeeper集羣搭建的過程!html

什麼是 Zookeeper ?

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。java

劃重點:分佈式應用程序協調服務,在分佈式系統中,一般須要一個通用的服務註冊與發現中心,所以Zookeeper就是充當這樣的角色,國內很是出名的分佈式框架Dubbo也建議使用Zookeeper做爲服務註冊與發現中心。vim

環境準備

準備三臺Linux虛擬機,前往官網下載zookeeper壓縮包,若是不知道官網如何下載,可在公衆號「張少林同窗」回覆Java工具獲取網盤下載連接centos

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 root@192.168.2.219:/home/tools
//登陸到服務器目錄 解壓
tar -zxvf zookeeper-3.4.11.tar.gz
//進入zookeeper主目錄
cd zookeeper-3.4.11
複製代碼

解壓後看看都有哪些內容:框架

咱們只須要把焦點定位到這兩個目錄:tcp

  • 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,結果以下:

tcp6       0      0 :::2181                 :::*                    LISTEN      27201/java 
複製代碼

配置文件解析

  • tickTime:客戶端與服務端保持心跳的毫秒數
  • initLimit:初始容忍的心跳數
  • syncLimit:等待最大容忍的心跳數
  • dataDir:存儲快照的目錄,這裏默認是使用系統臨時目錄,真實使用時建議自定義目錄
  • clientPort:暴露給客戶端訪問的端口

單機僞集羣部署

有時候咱們會在本機搭建一個僞集羣,用於項目代碼測試,那麼只須要啓動三個不一樣配置的Zookeeper便可,只要端口不一樣,便可視爲不一樣的程序。

./conf目錄下新增zoo1.cfgzoo2.cfgzoo3.cfg配置文件,其中dataDir目錄依次都不一樣,clientPort分別配置爲218121822183。啓動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集羣機器數量只能是奇數個,詳見 www.cnblogs.com/LeeScofiled…

ps:關於須要用到的工具,可在公衆號「張少林同窗」回覆Java工具獲取網盤下載連接

最後

記錄一波Zookeeper搭建過程,後續會不按期更新原創文章,歡迎關注公衆號 「張少林同窗」!

相關文章
相關標籤/搜索