Linux下搭建ZooKeeper叢集

JasonCeng發表於2021-02-27

摘要

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埠:
ufw allow 2181
ufw allow 2888
ufw allow 3888
ufw reload

一、下載與解壓ZooKeeper

1、下載

$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

2、解壓到指定位置

$ 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

$ cd /usr/local/zookeeper_3.6.2/conf
$ cp zoo_sample.cfg zoo.cfg

2、建立資料目錄

$ mkdir /usr/local/zookeeper_3.6.2/data

3、修改配置檔案dataDir

$ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg

#修改dataDir為如下內容
dataDir=/usr/local/zookeeper_3.6.2/data

4、新增server.id

$ 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中各引數解析如下:

A:其中 A 是一個數字,表示這個是伺服器的編號;

B:是這個伺服器的 ip 地址 或 主機名;

C:Leader選舉的埠;

D:Zookeeper伺服器之間的通訊埠。

5、建立myid檔案

在dataDir目錄下建立myid檔案

機器192.168.1.113上:

$ vim /usr/local/zookeeper_3.6.2/data/myid

#輸入server.1=192.168.1.113:2888:3888所指定的id:1
1

機器192.168.1.114上:

$ vim /usr/local/zookeeper_3.6.2/data/myid

#輸入server.1=192.168.1.114:2888:3888所指定的id:2
2

機器192.168.1.115上:

$ vim /usr/local/zookeeper_3.6.2/data/myid

#輸入server.1=192.168.1.115:2888:3888所指定的id:3
3

三、將ZooKeeper分發到各個節點

$ cd /usr/local/
$ scp -r zookeeper_3.6.2 root@192.168.1.114:/usr/local/
$ scp -r zookeeper_3.6.2 root@192.168.1.115:/usr/local/

四、配置環境變數

需要再各個伺服器上進行配置:

vim /etc/profile

#新增如下內容
export ZOOKEEPER_HOME=/usr/local/zookeeper_3.6.2
export PATH=$ZOOKEEPER_HOME/bin:$PATH

#啟用環境變數
source /etc/profile

五、啟動zkServer

所有節點上啟動zkServer

$ zkServer.sh start

#輸出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

檢視叢集節點狀態:

$ 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

停止命令:

zkServer.sh stop

重啟命令:

zkServer.sh restart

六、檢視ZooKeeper日誌

如果啟動過程出現了failed,可通過檢視詳細日誌進行分析:

$ cd /usr/local/zookeeper_3.6.2/logs
$ cat zookeeper-<somthing>.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漸進線實驗室

相關文章