ZooKeeper部署及相關概念筆記

一、部署 

兩臺虛擬機(CentOS Linux 7):
    192.168.190.200 master
    192.168.190.201 slave1
   創建兩個zookeeper服務,最好是奇數個節點,原因:
    3個節點和4個節點時,允許節點宕機數目都爲1個(需保證集羣一半以上節點存活,才能正常工作),
    所以從可靠性角度,3個和4個效果一樣。
   
  注:如果只有一個節點,採用僞分佈模式(standalone),就忽略全文中關於 slave1 節點的配置即可

所有節點都執行(hadoop用戶)
1. 在 /home/hadoop/ 下創建目錄,如下結構:
    
    zookeeper_server
    |——  data
    |——  logs
    
    (**下面是很關鍵的一步)
    並在 data/ 下創建 myid 文件,用於存放 zk的server_id
        master 節點中的 myid 文件內容: 0
        slave1 節點中的 myid 文件內容: 1 (僞分佈可不配置此項)

2. 下載 ZooKeeper 版本:zookeeper-3.4.14.tar.gz ,存放/opt/下
3. 解壓
    $ cd /opt
    $ tar -zxvf zookeeper-3.4.14.tar.gz
4. 複製並修改配置文件
    $ cd zookeeper-3.4.14/conf
    $ cp zoo_sample.cfg zoo.cfg
    $ vi zoo.cfg

    <如下配置:>
    tickTime=2000    # 客戶端與服務端的心跳間隔(毫秒)
    initLimit=10    # follower和leader服務器間初始連接的超時時間,tick倍數
    syncLimit=5    # follower和leader服務器間同步時的超時時間,tick倍數
    dataDir=/home/hadoop/zookeeper_server/data    # 內存數據庫快照存放目錄
    dataLogDir=/home/hadoop/zookeeper_server/logs    # 事務日誌目錄
    clientPort=2181    # 服務器向客戶端提供的連接端口號
    server.0=192.168.190.200:2888:3888    # 服務器0地址
    server.1=192.168.190.201:2888:3888    # 服務器1地址 (僞分佈可不配置此項)
    注:server.id=host:port:port 中的後兩個端口號分別用於仲裁通訊和羣首選舉


5. 配置zk環境變量,在/etc/profile文件末尾添加如下內容:
    $ su root
    $ vi /etc/profile
    export ZOOKEEPER_HOME=/opt/zookeeper-3.4.14
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    $ source /etc/profile

6. 啓動所有節點的zk server 進程:
    hadoop@master ~]$ zkServer.sh start
    hadoop@slave1 ~]$ zkServer.sh start
    啓動後,如下信息:
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED    

7. 查看服務是否真的啓動了
    $ ps -ef | grep zookeeper

8. 查看zk服務狀態(提示:leader 和 follower )
    hadoop@master ~]$ zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
    Mode: follower

    hadoop@slave1 ~]$ zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
    Mode: leader

    **注:1.服務只啓動了一個(無法構成法定仲裁人數:至少 三分之二 數量);
         2.或者防火牆沒有關;
        3.或者server_id配置錯誤
        都會如下報錯:
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running.

9. 相關服務操作:
    $ zkServer.sh start
    $ zkServer.sh status
    $ zkServer.sh restart
    $ zkServer.sh stop
    $ zkServer.sh start-foreground (以打印日誌方式啓動,容易打印時卡住)

10. 訪問集羣
    $ zkCli.sh -server master:2181
  1. 創建znode節點,幷包含數據
    [zk: master:2181(CONNECTED) 0] create /mynode "Hello zk !"
    Created /mynode
  2. 獲取znode數據
    [zk: master:2181(CONNECTED) 1] get /mynode
    Hello zk !
  3. 刪除znode節點
    [zk: master:2181(CONNECTED) 2] delete /mynode
  4. 查看根節點下子節點目錄
    [zk: master:2181(CONNECTED) 3] ls /
  5. 更多命令查看help
    [zk: master:2181(CONNECTED) 4] help
    ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port

 二、ZooKeeper相關概念

**ZooKeeper相關概念:
1. ZooKeeper是一個爲分佈式應用程序提供一致性協調服務的軟件。
2. 提供的服務包括:
  1)域名服務:用於跟蹤一組服務器的運行狀態;
  2)鎖定服務:分佈式互斥訪問共享資源,實現鎖機制;
  3)同步服務:分佈式同步訪問共享資源,實現生產者-消費者模式、或是一個障礙;
  4)配置管理:對集羣的分佈式系統配置進行統一的集中存儲和管理;
  5)羣首選舉:針對集羣的分佈式系統存在某一節點宕機的問題,通過羣首選舉支持自動的故障轉移策略,實現主備節點切換。
3. 遵循Server-Client模型,以多機器形成集羣來提供服務。
4. 三種角色:Leader, Follower, Observer.
  1)一個集羣只能有一個Leader,其它都是Follower和Observer;
  2)通過Leader選舉機制產生Leader機器;
  3)設定爲Observer的機器不參加Leader選舉過程。
5. 數據模型:ZNode Tree (樹形模型)
  1)znode中包含了存儲的數據和ACL(Access Control List);
  2)數據節點中只能存儲少量數據,最大不超過1MB;
  3)原子性的數據訪問方式:
    a. 數據讀取時:不允許只獲取到部分數據;要麼全部得到,要麼全部沒有得到;
    b. 數據寫入時:不允許只寫入部分數據;要麼全部寫入,要麼寫入失敗;
    c. 保證數據的讀取只有兩個結果:成功、失敗。
  4)節點分臨時節點(Ephemeral ZNodes)和持久節點(Persistent ZNodes)
    a.分佈式資源是否可用,就是通過臨時節點實現的;
      通過創建臨時節點來代表佔領資源取得鎖,刪除節點代表釋放鎖。
  5)如:"/Spark/Master"中,Spark和Master都爲ZNode節點,各自保存自己的數據內存、屬性信息。
  6)ZooKeeper將所有數據都存在內存中。
6. 客戶端會話Session:客戶端通過TCP長連接與服務器建立聯繫。
  1)默認服務端口:2181
  2)會話超時時間設置:SessionTimeout參數

 

三、參考文章:

1. 《Spark Streaming 實時流式大數據處理實戰》5.1 ZooKeeper簡介

2. Linux環境快速部署Zookeeper集羣

3. 這可能是把ZooKeeper概念講的最清楚的一篇文章

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