1. 程式人生 > >zookeeper叢集的安裝、配置

zookeeper叢集的安裝、配置

zookeeper叢集中只要有過半的節點是正常的情況下,那麼整個叢集對外就是可用的。

正是基於這個特性,要將zk叢集的節點數量置為奇數(2n+1:如3、5、7個節點)比較合適。

zookeeper與dubbo服務叢集架構圖:

伺服器 1: 192.168.1.81 埠: 2181、 2881、 3881

伺服器 2: 192.168.1.82 埠: 2182、 2882、 3882

伺服器 3: 192.168.1.83 埠: 2183、 2883、 3883

1.修改3臺伺服器作業系統的/etc/hosts檔案,新增IP與主機名對映:

# zookeeper cluster servers

192.168.1.81 edu-zk-01

192.168.1.82 edu-zk-02

192.168.1.83 edu-zk-03

2.下載或上傳zookeeper-3.4.6.tar.gz到/home/tengjs/zookeeper目錄:

$ cd /home/tengjs/zookeeper

$ wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

3.解壓zookeeper安裝包,並按節點號對zookeeper目錄重新命名:

$ tar -zxvf zookeeper-3.4.6.tar.gz

伺服器1:

$ mv zookeeper-3.4.6 node-01

伺服器2:

$ mv zookeeper-3.4.6 node-02

伺服器3:

$ mv zookeeper-3.4.6 node-03

4.在各zookeeper節點目錄下建立以下目錄

$ cd /home/wusc/zookeeper/node-0X (X 代表節點號 1、 2、 3,以下同解)

$ mkdir data

$ mkdir logs

5.將zookeeper/node-0X/conf目錄下的zoo_sample.cfg檔案拷貝一份,命名為zoo.cfg

cp zoo_sample.cfg zoo.cfg

6.修改zoo.cfg配置檔案

zookeeper/node-01 的配置(/home/wusc/zookeeper/node-01/conf/zoo.cfg) 如下:

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/wusc/zookeeper/node-01/data dataLogDir=/home/wusc/zookeeper/node-01/logs clientPort=2181 server.1=edu-zk-01:2881:3881 server.2=edu-zk-02:2882:3882 server.3=edu-zk-03:2883:3883

zookeeper/node-02 的配置(/home/wusc/zookeeper/node-02/conf/zoo.cfg)如下:

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/wusc/zookeeper/node-02/data dataLogDir=/home/wusc/zookeeper/node-02/logs clientPort=2182 server.1=edu-zk-01:2881:3881 server.2=edu-zk-02:2882:3882 server.3=edu-zk-03:2883:3883

zookeeper/node-03 的配置(/home/wusc/zookeeper/node-03/conf/zoo.cfg)如下:

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/wusc/zookeeper/node-03/data dataLogDir=/home/wusc/zookeeper/node-03/logs clientPort=2183 server.1=edu-zk-01:2881:3881 server.2=edu-zk-02:2882:3882 server.3=edu-zk-03:2883:3883

引數說明:

tickTime=2000

tickTime這個時間是作為zookeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個tickTime時間就會發送一個心跳。

initLimit=10

initLimit這個配置項是用來配置zookeeper接收客戶端(這裡所說的客戶端不是使用者連線zookeeper伺服器的客戶端,而是zookeeper伺服器叢集中連線到Leader的Follower伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。

當已經超過10個心跳時間(也就是tickTime)長度後zookeeper伺服器還沒有收到客戶端的返回資訊,那麼表明這個客戶端連線失敗。總的時間長度就是10*2000=20秒

syncLimit=5

syncLimit這個配置項標識Leader與Follower之間傳送訊息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒

dataDir=/home/wusc/zookeeper/node-01/data

dataDir顧名思義就是zookeeper儲存資料的目錄,預設情況下zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。

clientPort=2181

clientPort這個埠就是客戶端(應用程式)連線zookeeper伺服器的埠,zookeeper會監聽這個埠接收客戶端的訪問請求。

server.A=B: C: D

server.1=edu-zk-01:2881:3881

server.2=edu-zk-02:2882:3882

server.3=edu-zk-03:2883:3883

A是一個數字,表示這是第幾號伺服器。

B是這個伺服器的IP地址(或者是與IP地址做了對映的主機名)

C第一個埠用來叢集成員的資訊交換,表示這個伺服器與叢集中的Leader伺服器交換資訊的埠。

D是在Leader掛掉時專門用來選舉Leader所用的埠。

注意:如果是偽叢集的配置方式,不同的zookeeper例項通訊埠號不能一樣,所以要給它們分配不同的埠號。

7.在dataDir=/home/wusc/zookeeper/node-0X/data下建立myid檔案

編輯myid檔案,並在對應的ip的機器上輸入相應的編號。

如在node-01上,myid的內容就是1,node-02上就是2,node-03上就是3:

$ vi /home/wusc/zookeeper/node-01/data/myid ## 值為 1

$ vi /home/wusc/zookeeper/node-02/data/myid ## 值為 2

$ vi /home/wusc/zookeeper/node-03/data/myid ## 值為 3

8.在防火牆中開啟要用到的埠218X,288X,388X

切換到root使用者許可權,執行以下命令

# chkconfig iptables on

# service iptables start

編輯/etc/sysconfig/iptables

#vi /etc/sysconfig/iptables

如伺服器01增加以下3行

## zookeeper -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2881 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3881 -j ACCEPT

重啟防火牆

# service iptables restart

檢視防火牆埠狀態

# service iptables status

9.啟動並測試zookeeper

(1)到/home/tengjs/zookeeper/node-0X/bin目錄中執行

$ /home/wusc/zookeeper/node-01/bin/zkServer.sh start $ /home/wusc/zookeeper/node-02/bin/zkServer.sh start $ /home/wusc/zookeeper/node-03/bin/zkServer.sh start (2)輸入jps命令檢視程序

$ jps

1456 QuorumPeerMain

其中QuorumPeerMain是zookeeper程序,說明啟動正常。

(3)檢視狀態

$ /home/wusc/zookeeper/node-01/bin/zkServer.sh status

(4)檢視zookeeper服務輸出資訊

由於服務資訊輸出檔案在/home/wusc/zookeeper/node-0X/bin/zookeeper.out

$ tail -500f zookeeper.out

10.停止zookeeper程序

$ zkServer.sh stop

11.配置zookeeper開機啟動

可檢視我往期文章《linux系統安裝zookeeper》

二.安裝Dubbo管控臺

Dubbo管控臺可以對註冊到zookeeper註冊中心的服務或服務消費者進行管理,但管控臺是否正常對Dubbo服務沒有影響,管控臺也不需要高可用,因此可以單節點部署。

Dubbo管控臺的安裝可以檢視我往期文章《linux環境安裝dubbo管控臺》

操作過程是一樣的,只不過在配置dubbo.properties時有區別,之前配置的是單節點,現在要配置成叢集

$ vi ROOT/WEB-INF/dubbo.properties

dubbo.registry.address=zookeeper://192.168.1.81:2181?backup=192.168.1.82:2182,192.168.1.83:2183