1. 程式人生 > >Linux下搭建ZooKeeper叢集

Linux下搭建ZooKeeper叢集

## 摘要 Zookeeper是針對大型分散式系統的高可靠的協調系統。它基於對Paxos演算法的實現,使該框架保證了分散式環境中資料的強一致性,也正是基於這樣的特性,使得ZooKeeper解決很多分散式問題。把分散式叢集當成zoo,那麼zookeeper就是管理員。zookeeper本身也可以是個叢集,通過幾臺follow機器選舉leader。zookeeper的主要作用包括,命名服務,配置管理,分散式一致性鎖,HA(High available)。真是因為zookeeper在分散式系統領域如此重要,可以說是基石,所以我們繞不開要學習其使用及原理。 本文基於Ubuntu 16.04 LTS,介紹如何搭建1主2從的zookeeper叢集。 ## 環境依賴 - 奇數臺伺服器,且非observer節點數>1;如果是偶數臺伺服器,可以把多出來的1臺設定為observer - Java 8+ - 防火牆開放2181、2888、3888埠: ```shell ufw allow 2181 ufw allow 2888 ufw allow 3888 ufw reload ``` ## 一、下載與解壓ZooKeeper ### 1、下載 ```shell $ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz ``` ### 2、解壓到指定位置 ```shell $ tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /usr/local $ mv /usr/local/apache-zookeeper-3.6.2-bin /usr/local/zookeeper_3.6.2 $ cd /usr/local/zookeeper_3.6.2 ``` ## 二、配置檔案 本小節先在`伺服器1`上進行配置,下一小節再通過scp將配置好的ZooKeeper分發到其他伺服器上,減少重複工作。 ### 1、建立配置檔案 利用模板檔案zoo_sample.cfg,通過拷貝建立配置檔案zoo.cfg ```shell $ cd /usr/local/zookeeper_3.6.2/conf $ cp zoo_sample.cfg zoo.cfg ``` ### 2、建立資料目錄 ```shell $ mkdir /usr/local/zookeeper_3.6.2/data ``` ### 3、修改配置檔案dataDir ```shell $ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg #修改dataDir為如下內容 dataDir=/usr/local/zookeeper_3.6.2/data ``` ### 4、新增server.id ```shell $ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg # 新增如下內容: server.1=192.168.1.113:2888:3888 server.2=192.168.1.114:2888:3888 server.3=192.168.1.115:2888:3888 # server.id=zookeeper節點主機名 或 主機ip:2888:3888 選舉埠和投票埠固定 # 如果有四臺zookeeper的話,由於非observer節點數必須為奇數個 # 所以如果有第四臺的話,可以使用如下新增方式: # server.4=xx.xx.xx.xx:2888:3888:observer # id是自己定義的,0~255間,不必一次遞增,自己定即可,id表示該節點所持有的投票編號id,必需保證全域性唯一 ``` *注意:不要在配置後面加註釋#,這會導致cfg檔案解析失敗!從而導致zookeeper無法正常啟動!* `server.A=B:C:D`中各引數解析如下: ```shell A:其中 A 是一個數字,表示這個是伺服器的編號; B:是這個伺服器的 ip 地址 或 主機名; C:Leader選舉的埠; D:Zookeeper伺服器之間的通訊埠。 ``` ### 5、建立myid檔案 在dataDir目錄下建立myid檔案 機器`192.168.1.113`上: ```shell $ vim /usr/local/zookeeper_3.6.2/data/myid #輸入server.1=192.168.1.113:2888:3888所指定的id:1 1 ``` 機器`192.168.1.114`上: ```shell $ vim /usr/local/zookeeper_3.6.2/data/myid #輸入server.1=192.168.1.114:2888:3888所指定的id:2 2 ``` 機器`192.168.1.115`上: ```shell $ vim /usr/local/zookeeper_3.6.2/data/myid #輸入server.1=192.168.1.115:2888:3888所指定的id:3 3 ``` ## 三、將ZooKeeper分發到各個節點 ```shell $ cd /usr/local/ $ scp -r zookeeper_3.6.2 [email protected]:/usr/local/ $ scp -r zookeeper_3.6.2 [email protected]:/usr/local/ ``` ## 四、配置環境變數 需要再各個伺服器上進行配置: ```shell vim /etc/profile #新增如下內容 export ZOOKEEPER_HOME=/usr/local/zookeeper_3.6.2 export PATH=$ZOOKEEPER_HOME/bin:$PATH #啟用環境變數 source /etc/profile ``` ## 五、啟動zkServer 在**所有節點**上啟動zkServer ```shell $ zkServer.sh start #輸出如下: ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ``` 檢視叢集節點狀態: ```shell $ zkServer.sh status #一個節點輸出如下: ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: leader #另外兩個節點輸出如下: ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: follower ``` 有一臺伺服器的zk Mode為`leader `,另外兩臺伺服器的zk Mode為`follower`,如果配置了`observer`節點,則會有一臺伺服器的zk Mode為`observer`。 停止命令: ```shell zkServer.sh stop ``` 重啟命令: ```shell zkServer.sh restart ``` ## 六、檢視ZooKeeper日誌 如果啟動過程出現了failed,可通過檢視詳細日誌進行分析: ```shell $ cd /usr/local/zookeeper_3.6.2/logs $ cat zookeeper-.out ``` 至此,ZooKeeper叢集環境搭建結束。 ## 參考 [1]Apache Zookeeper 叢集的搭建[https://blog.csdn.net/qq_33713328/article/details/88854991] [2]zookeeper 叢集搭建[https://www.cnblogs.com/ysocean/p/9860529.html] 更多關於大資料、分散式、儲存、區塊鏈、Linux相關文章請關注我的**微信公眾號:asympTech漸進線實驗室** ![](https://img2020.cnblogs.com/blog/1001136/202102/1001136-20210227152300262-9148764