Zookeeper分佈式集羣

一、簡介

     Zookeeper是一個高效的分佈式協調服務,可以提供配置信息管理、命名、分佈式同步、集羣管理、數據庫切換等服務。它不適合用來存儲大量信息,可以用來存儲一些配置、發佈與訂閱等少量信息。Hadoop、Storm、消息中間件、RPC服務框架、分佈式數據庫同步系統,這些都是Zookeeper的應用場景。

    Zookeeper集羣中節點個數一般爲奇數個(>=3),若集羣中Master掛掉,剩餘節點個數在半數以上時,就可以推舉新的主節點,繼續對外提供服務。

1、典型應⽤用場景

1)分佈式通知/協調

⽤用於分佈式系統的任務分發與任務執⾏行結果反饋

2) 集羣管理

– 可以監控節點的存活狀態

3)Master選舉

Master/slave結構的系統中,避免單點故障,需要多個master,其中

只有⼀一個active master,ZooKeeper幫助選擇active master

4) 分佈式鎖

– 獨佔:某⼀一時刻只有⼀一個client能夠獲得

– 控制時序:多個客戶端的某些過程按照順序執⾏行

5) 分佈式隊列

https://blog.csdn.net/king866/article/details/53992653/

2、架構

1.png

2.1、節點

– 2N+1個server組成,N+1個節點可⽤用時,整個系統保持可⽤用

2.2、server⾓角⾊色類型

– Server:存放數據(in-memory)

– Leader:不接受client的請求,負責進⾏行投票的發起和決議,最終更新狀態 – Follower:接收客戶請求並返回客戶結果,參與Leader發起的投票

3、ObServer節點

問題

當client變多,ZK集羣變⼤大時,節點都爲follower時,更新成 本較⼤大

• 解決方案

ObServer節點:和client交互,存有數據的副本,不參與投票

4、角色

2.png

5、ZooKeeper承諾

5.1、順序性

client的update請求都會根據他發出的順序被順序的處理

5.2、原子性

一個update操作要麼成功要麼失敗,沒有其他可能的結果

5.3、強一致性

client無論連接到那個server,展⽰示給它的都是同⼀一個視圖

5.4、 可靠性

update一旦成功,就被持久化了,除⾮非另⼀一個update請求更 新了當前值

5.5、實時性

對於每⼀一個client,它的系統視圖都是最新的

二、準備工作

1、系統環境

主機名

系統

服務版本

IP

master

CentOS7.4

3.4.12

192.168.56.129

slave1

CentOS7.4

3.4.12

192.168.56.130

slave2

CentOS7.4

3.4.12

192.168.56.131

2、暫時關閉防火牆和selinux

3、軟件下載

下載地址:http://mirrors.hust.edu.cn/apache/zookeeper/

4、Java環境

3.png

三、服務搭建

1、解壓三個節點的文件

[root@master ~]# cd /home/

[root@master home]# tar -zxvf zookeeper-3.4.12.tar.gz

[root@master home]# ln -s zookeeper-3.4.12 zookeeper

備註:三個節點相同操作

2、在conf目錄下創建zoo.cfg文件,三個節點配置相同,如下

[root@master ~]# cd /home/zookeeper/conf/

[root@master conf]# cp zoo_sample.cfg zoo.cfg

[root@master conf]# vim zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/var/lib/zookeeper

clientPort=2181

maxClientCnxns=50

server.1=192.168.56.129:2888:3888

server.2=192.168.56.130:2888:3888

server.3=192.168.56.131:2888:3888

3、創建文件/var/lib/zookeeper/myid,3個節點的 內容分別爲1、2、3

[root@master conf]# mkdir -p /var/lib/zookeeper

[root@master conf]# cd /var/lib/zookeeper/

[root@master zookeeper]# vim myid

4.png

4、啓動三個節點

[root@master zookeeper]# bin/zkServer.sh start

5.png

[root@master zookeeper]# jps

6.png

[root@master zookeeper]# bin/zkServer.sh status

7.png

5、測試

5.1、在zookeeper中任意一個節點,執行指令zkCli.sh

[root@master zookeeper]# ./bin/zkCli.sh

8.png

5.2、輸入:help    #幫助信息

9.png

ls  /   查找根目錄

create /test abc   創建節點並賦值

get /test   獲取指定節點的值

set /test cb  設置已存在節點的值

rmr /test  遞歸刪除節點

delete /test/test01  刪除不存在子節點的節點

5.3、相關操作命令

新建操作

10.png

刪除操作

11.png

5.4、查看工具

在Eclipse中查看Zookeeper集羣節點

也可以使用ZooInspector查看

這裏使用ZooInspector工具進行查看

下載地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

解壓,進入目錄ZooInspector\build,雙擊運行zookeeper-dev-ZooInspector.jar;

備註:前提是Windows環境安裝了Java

12.png

4.5、點擊左上角連接按鈕,輸入zk服務地址:ip:2181

13.png

點擊OK,即可查看ZK節點信息

14.png

6、異常

   6.1、CONNECTION_LOSS(連接丟失)

        – eg:連接的server down掉

  6.2、 SESSION_EXPIRED(會話失效)

   – 由ZooKeeper集羣管理,⾮非client管理

   – ZooKeeper清除和該session有關的信息 – 正常運⾏行的ZK不會出現這種情況


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章