天天看點

zookeeper 的安裝配置及簡單使用

===> Zookeeper 是什麼?

                => ZooKeeper是一個分布式的,開放源碼的分布式應用程式協調服務,是Google的Chubby一個開源的實作,是Hadoop和Hbase的重要元件。

                => ZooKeeper包含一個簡單的原語集,提供Java和C的接口。

                => ZooKeeper代碼版本中,提供了分布式獨享鎖、選舉、隊列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分布鎖和隊列有Java和C兩個版本,選舉隻有Java版本

===> Zookeeper應用場景(功能):

                => 它是一個為分布式應用提供一緻性服務的軟體,提供的功能包括:

                        配置維護、域名服務、分布式同步、組服務等。

                => ZooKeeper的目标就是封裝好複雜易出錯的關鍵服務,将簡單易用的接口和性能高效、功能穩定的系統提供給使用者。

===> Zookeeper體系結構

===> Zookeeper 工作原理:

                => Zookeeper 的核心是原子廣播,這個機制保證了各個Server之間的同步。實作這個機制的協定叫做Zab協定。

                => Zab協定有兩種模式: 恢複模式(選主)和廣播模式(同步)。

                    當服務啟動或者在上司者崩潰後,Zab就進入了恢複模式,當上司者被選舉出來,且大多數Server完成了和 leader的狀态同步以後,恢複模式就結束了。

                ()狀态同步保證了leader和Server具有相同的系統狀态。 

                => 為了保證事務的順序一緻性,zookeeper采用了遞增的事務id号(zxid)來辨別事務。所有的提議(proposal)都在被提出的時候加上了zxid。

                    實作中zxid是一個64位的數字,它高32位是epoch用來辨別leader關系是否改變,每次一個leader被選出來,它都會有一個新的epoch,辨別目前屬于那個leader的統治時期。

                    低32位用于遞增計數。

                ()對于用戶端來說,ZooKeeper是一個整體(ensemble),連接配接到ZooKeeper叢集實際上感覺在獨享整個叢集的服務,so,你可以在任何一個結點上建立到服務叢集的連接配接

 ===> Zookeeper 安裝

        =>搭建ZooKeeper的叢集環境

        1、三台:bigdata12  bigdata13  bigdata14

           時間同步

        2、在bigdata12上進行安裝

           (*) 解壓 tar -zxvf zookeeper-3.4.10.tar.gz -C ~/training/

           (*) 設定環境變量:每台機器上

        ZOOKEEPER_HOME=/root/training/zookeeper-3.4.10

        export ZOOKEEPER_HOME

        PATH=$ZOOKEEPER_HOME/bin:$PATH

        export PATH

           (*)核心的配置檔案: conf/zoo.cfg

        mkdir /root/training/zookeeper-3.4.10/tmp

        編輯 zoo.cfg

        dataDir=/root/training/zookeeper-3.4.10/tmp

        server.1=bigdata12:2888:3888

        server.2=bigdata13:2888:3888

        server.3=bigdata14:2888:3888

        在/root/training/zookeeper-3.4.10/tmp目錄建立檔案: myid

        輸入  1

        3、把bigdata12的ZK複制到其他的節點

           scp -r zookeeper-3.4.10/ root@bigdata13:/root/training

           scp -r zookeeper-3.4.10/ root@bigdata14:/root/training

        4、修改bigdata13和bigdata14上的myid檔案

        5、在每台機器上,啟動ZK:  zkServer.sh  start

===> 配置檔案

            => zookeeper-3.3.3/conf檔案夾下面(可以把預設的zoosample.cfg複制一份到zoo.cfg),配置檔案zoo.cfg需要在每台伺服器中都要編寫,以下是一個配置檔案的樣本:

                # Filename zoo.cfg

                tickTime=2000

                dataDir=/home/zookeeper/data

                clientPort=2181

                initLimit=5

                syncLimit=2

                server.1=202.115.36.251:2888:3888

                server.2=202.115.36.241:2888:3888

                server.3=202.115.36.242:2888:3888

                initLimit:這個配置項是用來配置 Zookeeper 接受用戶端(這裡所說的用戶端不是使用者連接配接 Zookeeper 伺服器的用戶端,而是 Zookeeper 伺服器叢集中連接配接到 Leader 的                 Follower 伺服器)初始化連接配接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 伺服器還沒有收到用戶端的傳回資訊,

            那麼表明這個用戶端連接配接失敗。總的時間長度就是 5*2000=10 秒。

                syncLimit:這個配置項辨別 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒 

                server.A=B:C:D

                        A 是一個數字,表示這個是第幾号伺服器;

                        B 是這個伺服器的 ip 位址;

                        C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的端口;

                        D 表示的是萬一叢集中的 Leader 伺服器挂了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時伺服器互相通信的端口。

                        如果是僞叢集的配置方式,由于 B 都是一樣,是以不同的 Zookeeper 執行個體通信端口号不能一樣,是以要給它們配置設定不同的端口号。

             => 建立myid檔案

                除了修改 zoo.cfg 配置檔案,叢集模式下還要配置一個檔案 myid,這個檔案在 dataDir 目錄下,這個檔案裡面就隻有一個資料就是 A 的值,Zookeeper 啟動時會讀取這個文

                件,拿到裡面的資料與 zoo.cfg 裡面的配置資訊比較進而判斷到底是那個 server。這個myid的值要和配置檔案中的server.x=ip:port:port中的x一緻。

                echo 1 > myid

===> Zookeeper 操作

         => 檢視zookeeper  的狀态: zkServer.sh  status

        => 通過 zookeeper 用戶端連接配接:  

                zkCli.sh  -server  192.168.10.221:2181

        => 檢視znode節點:

                ls  /

        => 建立znode節點(資料):

                create  /test  "hello"

        => 擷取znode節點資料:

                get  /test

        => 修改znode節點資料:

                set  /test  "word"

        => 删除znode 節點:

                delete  /test

===> 清除zk狀态

        當在zk上已經做了很多事情,配置已經比較雜亂,現在想重新初始化一下,也就是把所有狀态删除,步驟是:

        => 關閉所有zk節點,用zkServer.sh status檢視是否關閉

        => 删除zoo.cfg定義的資料檔案夾下的所有檔案,除了myid檔案外

        => 啟動zk節點

        現在配置就重置了

===> 常見問題

        在用zkCli.sh啟動用戶端時,Will not attempt to authenticate using SASL (無法定位登入配置)

        這是由于沒有啟用使用者驗證導緻的,不影響使用,但影響安全性。SASL 即:Simple Authentication and Security Layer

本文轉自 菜鳥的征程 51CTO部落格,原文連結:http://blog.51cto.com/songqinglong/2062909