如何搭建Zookeeper集羣

   ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。其部署方式有單機部署和集羣部署,單機部署意義不大,下面主要介紹集羣部署。html

  因硬件環境的限制,本次搭建Zookeeper集羣是在Windows且是單機的環境下搭建的,也就是僞集羣;不過僞集羣跟集羣區別不大,往下看就知道啦。node

  1、去Zookeeper官網http://zookeeper.apache.org/把安裝包下載下來,給個3.4.10版本的連接:http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz。解壓縮安裝包。linux

  二,在單機環境下部署集羣。算法

  一、 準備節點。弄三個zookeeper節點,將安裝包拷貝三份,分別命名爲zookeeper-3.4.10_1,zookeeper-3.4.10_2,zookeeper-3.4.10_3。以下圖:apache

                                                        

  二、修改zoo.cfg配置文件。以zookeeper-3.4.10_1節點爲例,在conf文件夾下,將zoo_sample.cfg重命名爲zoo.cfg,同時增長如下配置信息:windows

    tickTime=2000
    initLimit=5
    syncLimit=2
    dataDir=E:\\zookeeper-3.4.10_1\\server1\\data
    dataLogDir=E:\\zookeeper-3.4.10_1\\server1\\dataLog
    clientPort=2181
    server.1=127.0.0.1:2888:3888
    server.2=127.0.0.1:2889:3889
    server.3=127.0.0.1:2890:3890服務器

    標紅的幾個配置官網講得很清楚了,就不作講解了。須要注意的是clientPort這個端口,若是你是在1臺機器上部署多個server,那麼每臺機器都要不一樣的clientPort,好比我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir也須要區分下,session

    dataDir和dataLogDir這兩個目錄須要咱們手動建立 。
    最後幾行惟一須要注意的地方就是 server.X 這個數字就是對應 data/myid中的數字。你在3個server的myid文件中分別寫入了1,2,3,那麼每一個server中的zoo.cfg都配server.1,server.2,server.3就OK了。由於在同一臺機器上,後面連着的2個端口3個server都不要     同樣,不然端口衝突,其中第一個端口用來集羣成員的信息交換,第二個端口是在leader掛掉時專門用來進行選舉leader所用。數據結構

    若是將集羣的每一個節點佈置到不一樣的機器上的話,那麼全部節點的配置文件都是同樣的,這也就是僞集羣跟集羣的區別所在。下面給出配置信息:分佈式

    tickTime=2000
    initLimit=5
    syncLimit=2
    dataDir=E:\\zookeeper-3.4.10\\server\\data
    dataLogDir=E:\\zookeeper-3.4.10\\server\\dataLog
    clientPort=2181
    server.1=192.168.10.8:2888:3888
    server.2=192.168.10.15:2888:3888
    server.3=192.168.10.22:2888:3888

    注意:dataDir和dataLogDir的路徑要用\\分隔,要否則啓動的時候會報錯

  三、啓動Zookeeper。進入到bin目錄下,點擊 zkServer.cmd命令或者經過cmd命令行方式來運行這個命令(這樣最好,啓動報錯了能看到),便可完成啓動。

     啓動過程當中若是報 「$dataDir/myid file is missing  錯誤,是由於沒有在dataDir目錄下建立myid文件致使的,zk集羣中的節點須要獲取myid文件內容來標識該節點,缺失則沒法啓動;往myid裏面寫的數字也就是配置文件zoo.cfg裏                                            server.1=192.168.10.8:2888:3888,server後面這個數字。

    若是報Connection refused 連接類的錯誤的話不用管,這是zookeeper節點試圖連接其餘節點報的錯誤,等全部節點都啓動完畢就不會報錯了。啓動順序若是是一、二、3的話,那麼2節點是Leader哈。關於Leader的選舉算法你們去好好研究一下,後續我再出博文。

     注意:這個myid文件是不帶任何擴展類型的文件,在windows下建立的文本文件,須要手動將擴展類型去掉,要否則啓動也會報上面那個錯誤。

     ,Zookeeper數據模型。

   Zookeeper 會維護一個具備層次關係的數據結構,它很是相似於一個標準的文件系統,以下圖所示

         
               

  (1)  每一個節點在zookeeper中叫作znode,而且其有一個惟一的路徑標識,如/SERVER2節點的標識就爲/APP3/SERVER2
  (2)  Znode 能夠有子znode,而且znode裏能夠存數據,可是EPHEMERAL類型的節點不能有子節點
  (3)  Znode中的數據能夠有多個版本,好比某一個路徑下存有多個數據版本,那麼查詢這個路徑下的數據就須要帶上版本。
  (4)  znode 能夠是臨時節點,一旦建立這個 znode 的客戶端與服務器失去聯繫,這個 znode 也將自動刪除,Zookeeper 的客戶端和服務器通訊採用長鏈接方式,每一個客戶端和 服務器經過心跳來保持鏈接,這個鏈接狀態稱爲 session,若是 znode 是臨時節點這個 session 失效,znode 也就刪除了
  (5)  znode 的目錄名能夠自動編號,如 App1 已經存在,再建立的話,將會自動命名爲 App2
       (6)  znode 能夠被監控,包括這個目錄節點中存儲的數據的修改,子節點目錄的變化等,一旦變化能夠通知設置監控的客戶端,這個功能是zookeeper對於應用最重要的特性,經過這個特性能夠實現的功能包括配置的集中管理,集羣管理,分佈式鎖等等。

  下面咱們經過zookeeper自帶的客戶端交互程序來建立、修改、刪除節點來探索zookeeper的數據結構。

       進入任意一臺zookeeper節點,到bin目錄下,運行zkCli.cmd命令。出現以下圖界面:

                

  一、ls path [watch]查看命令。 ls /

                

      有兩個節點zookeeper,APP1

  二、get path [watch]查看節點數據命令。get /APP1

                 

         三、create [-s] [-e] path data acl 建立節點命令

                 

   四、delete path [version] 刪除節點命令

       

   注意:zookeeper集羣全部節點的數據都是一致的,若是在這個節點建立的znode在其餘節點一樣也會建立,由於zookeeper的數據是一致性的,原理請自行百度zookeeper運行原理。

          4、經過Zookeeper四字命令來獲取集羣服務的當前狀態及相關信息。

              ZooKeeper支持某些特定的四字命令字母與其交互。它們大可能是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端能夠經過 telnet 或 nc 向 ZooKeeper 提交相應的命令。 其中stat、srvr、cons三個命令比較相似:"stat"提供服務器                    統計和客戶端鏈接的通常信息;"srvr"只有服務的統計信息,"cons"提供客戶端鏈接的更加詳細的信息。 命令詳細介紹以下:

                 

     在windows下,咱們來演示一個命令吧,mntr命令。

    一、打開cmd命令行模式

       二、運行,telnet 127.0.0.1 2183

                

    三、輸入:mntr命令

     

    輸入的命令看不到,盡情輸入便可。

    四、結果:

    

    根據zk_server_state:leader 知道該節點爲Leader節點

               注意:若是運行telnet 127.0.0.1 2183命令報「沒法打開主機的鏈接,在端口23鏈接失敗」錯誤的話,請將windows的telnet服務打開。打開方法請參考:http://jingyan.baidu.com/article/cdddd41c7dd85253ca00e14e.html

    在linux下部署集羣跟windows部署步驟和操做都差很少,你們有機器的話能夠到linux環境下部署一下。

相關文章
相關標籤/搜索