1. 程式人生 > >Zokeeper安裝配置及簡單使用

Zokeeper安裝配置及簡單使用

  • 分散式:可以簡單的理解為任務拆分和節點分工;

   分散式是解決高可用,高併發的。叢集解決的是高可用。叢集式從物理上進想定義,而分散式是一種工作方式;

   例如:一個工作任務需要10個小時(單個節點);

           分散式:10臺機器,任務只需要1個小時就能完成;

           叢集:10臺機器,任務還是10個小時;

  • 分散式的協作難點:

   對於設計的分散式系統,所出現的問題也會有很多;

  1. 如何保證節點的高可用(節點故障);
  2. 如何保證資料的一致性;
  3. 通訊異常時如何處理;
  4. 網路分割槽;等等.....

     而這些問題Zk都有對應的解決辦法;

  • Zookeeper簡介

     分散式協作。zookeeper是google的chubby專案開源實現。最早是hadoop的子專案。

     小米米聊、淘寶Taokeeper其實類zookeeper。

      Kafka使用zookeeper。訊息釋出訂閱,其中zk就是用於檢測節點崩潰。實現主題的發現,並且保持主題的生產和消費狀態。 

      Hbase三段查詢,Root-Region=》Meta Region=》Region(Table)。hbase的元資料資訊放在HBase。HMaster掛掉,馬上 要節點恢復。

       Hadoop。NameNode(SecondaryNameNode),HA Hadoop。一般情況下一個簡單的hadoop叢集,只有一個NameNode,如果NameNode掛掉,hadoop叢集不可用。HA Haoop裡面就要用到zk。

  •  Zookeeper解決哪些問題

      1. Master節點管理

        解決的問題:Master高可用(主機掛掉以後,誰來負責工作),保證唯一;

      2. 配置檔案管理

解決的問題:統一把配置檔案存放在Zookeeper,由Zookeeper統一發放

      3. 釋出和訂閱

  釋出者(producer)講資料釋出到zk節點上,供訂閱者(consumer)動態獲取

      4. 分散式鎖

分散式環境訪問統一個資源,由第三方配鎖實現。

        解決的問題:由zk統一進行協調,保證資料的一致性。

      5.叢集的管理 

Worker叢集監控。

  • Zookeeper安裝配置

      1. 下載

       2. 解壓

          $ tar xvzf zookeeper-3.4.9.tar.gz

          $ mv ./zookeeper-3.4.9 /usr/local/

  1. 修改配置檔案

    ${ZOOKEEPER_HOME}/conf/zoo_sample.cfg

(偽分散式)

dataDir指定當前伺服器資料存放的路徑(目錄)

clientPort 指定當前伺服器伺服器的埠

server.1/server.2/server.3 指定伺服器的叢集情況(有幾臺伺服器,master是伺服器地址)

myid必須手動建立且指定在zk資料目錄,也就是dataDir指定的路徑(不管真分佈還是偽分佈都需要指定)

$ echo 1 >> /home/hadoop/tmp/zookeeper/zk1/myid

$ echo 2 >> /home/hadoop/tmp/zookeeper/zk2/myid

$ echo 3 >> /home/hadoop/tmp/zookeeper/zk3/myid

Zookeeper偽分散式部署(server zookeeper只有一份)

/conf/zoo1.cfg zoo2.cfg zoo3.cfg

zoo1.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/tmp/zookeeper/zk1(這個目錄可以自行指定)

clientPort=2181

server.1=master:2888(通訊埠):3888(選舉埠)

server.2=master:2889:3889

server.3=master:2890:3890

zoo2.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/tmp/zookeeper/zk2

clientPort=2182

server.1=master:2888:3888

server.2=master:2889:3889

server.3=master:2890:3890

zoo3.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/tmp/zookeeper/zk3

clientPort=2183

server.1=master:2888:3888

server.2=master:2889:3889

server.3=master:2890:3890

Zookeeper真分佈部署在master、slave1、slave2 三臺不同的伺服器上

server1..../conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/tmp/zookeeper/zk

clientPort=2181

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

server2..../conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/tmp/zookeeper/zk

clientPort=2181

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

server3..../conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/tmp/zookeeper/zk

clientPort=2181

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

  • Zookeeper及其APi的使用

     偽分散式:     

       停止Zookeeper

         $ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo1.cfg

         $ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo2.cfg

          $ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo3.cfg

         啟動Zookeeper

$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo1.cfg

$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo2.cfg

$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo3.cfg

         檢視zookeeper狀態

$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo1.cfg

$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo2.cfg

$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo3.cfg