ZooKeeper安裝部署

0x01 簡介

Zookeeper是一個很好的集羣管理工具,被大量用於分佈式計算。如Hadoop以及Storm系統中。
Apache ZooKeeper是一個爲分佈式應用所設計開源協調服務,其設計目是爲了減輕分佈式應用程序所承擔的協調任務。能夠爲用戶提供同步、配置管理、分組和命名服務。linux

0x02 環境說明

在三臺裝有centos6.5(64位)服務器上安裝ZooKeeper,官網建議至少3個節點,本次實驗3臺
(主機數:3(要求3+,且必須是奇數,由於ZooKeeper選舉算法))。
須要提早安裝jdk,選擇版本是jdk-8u111-linux-x64。算法

0x03 安裝配置過程

  1. 下載ZooKeeper,選擇穩定版,即stable
    下載地址:http://apache.fayea.com/zookeeper/數據庫

  2. 解壓apache

    $ tar -zxvf zookeeper-3.4.6.tar.gz
    //將文件移動到/usr/cloud/$ mv zookeeper-3.4.6 /usr/cloud/zookeeper
  3. 配置環境變量vim

    # vim /etc/profile//最後一行追加# set zookeeper environmentexport ZOOKEEPER_HOME=/usr/cloud/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

    使環境變量當即生效
    $ source /etc/profilecentos

  4. 集羣部署
    在Zookeeper集羣環境下只要一半以上的機器正常啓動了,那麼Zookeeper服務將是可用的。所以,集羣上部署Zookeeper最好使用奇數臺機器,這樣若是有5臺機器,只要3臺正常工做則服務將正常使用。
    下面咱們將對Zookeeper的配置文件zoo.cfg的參數進行設置:服務器

    $ cd /usr/cloud/zookeeper/conf$ cp zoo_sample.cfg zoo.cfg$ vim zoo.cfg

    參數能夠參考下圖
    1103208-20170219175412191-2121089231.png
    注意上圖的配置中master,slave1分別爲主機名,具體的對應的主機可參見以前的Hadoop的安裝與配置的博文。
    在上面的配置文件中server.id=host:port:port中的第一個port是從機器(follower)鏈接到主機器(leader)的端口號,第二個port是進行leadership選舉的端口號。
    接下來在dataDir所指定的目錄下建立一個文件名爲myid的文件,文件中的內容只有一行,爲本主機對應的id值,也就是上圖中server.id中的id。例如:在服務器1中的myid的內容應該寫入1。
    參數說明
    ①tickTime:心跳時間,毫秒爲單位。
    ②initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏客戶端不是用戶鏈接 Zookeeper服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 102000=20 秒。
    ③syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime時間長度,總時間長度就是 5*2000=10 秒。
    ④dataDir:存儲內存中數據庫快照的位置。
    ⑤clientPort:監聽客戶端鏈接的端口
    ⑥server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號。
    dataDir目錄下建立myid文件,將內容設置爲上⑥中A值,用來標識不一樣的服務器。分佈式

  5. 將安裝文件複製到其它節點ide

    $ scp -r /home/hadoop/zookeeper hadoop@slave1:/home/hadoop/$ scp -r /home/hadoop/zookeeper hadoop@slave1:/home/hadoop/
  6. 修改對應機器上的myid工具

    $ echo "1" > /home/hadoop/zookeeper/data/myid
    $ cat /home/hadoop/zookeeper/data/myid

0x04 啓動ZooKeeper集羣

在ZooKeeper集羣的每一個結點上,執行啓動ZooKeeper服務的腳本,以下所示:
各節點上啓動 (這裏啓動順序爲master > slave1 > slave2 )
啓動順序:
Hadoop——>Zookeeper——>HBase
中止順序
HBase——>Zookeeper——>Hadoop

hadoop@master:/home/hadoop/zookeeper/bin/$ zkServer.sh start
hadoop@slave1:/home/hadoop/zookeeper/bin/$ zkServer.sh start
hadoop@slave2:/home/hadoop/zookeeper/bin/$ zkServer.sh start

1103208-20170219180214394-318725261.png
其中,QuorumPeerMain是zookeeper進程,啓動正常。
如上依次啓動了全部機器上的Zookeeper以後能夠經過ZooKeeper的腳原本查看啓動狀態,包括集羣中各個結點的角色(或是Leader,或是Follower),以下所示,是在ZooKeeper集羣中的每一個結點上查詢的結果:
1103208-20170219180318144-1392740456.png
1103208-20170219180334988-594092337.png
1103208-20170219180358363-1406709683.png
經過上面狀態查詢結果可見,slave1是集羣的Leader,其他的兩個結點是Follower。
另外,能夠經過客戶端腳本,鏈接到ZooKeeper集羣上。對於客戶端來講,ZooKeeper是一個總體(ensemble),鏈接到ZooKeeper集羣實際上感受在獨享整個集羣的服務,因此,你能夠在任何一個結點上創建到服務集羣的鏈接。

0x05 中止ZooKeeper進程

$ zkServer.sh stop
參考連接
http://blog.csdn.net/cruise_h/article/details/19046357
https://yq.aliyun.com/articles/36329

0x06 常見問題

  1. Error contacting service. It is probably not running.
    網上看了下'Error contacting service. It is probably not running.'類錯誤不外乎3種答案:
    1,配置文件zoo.cfg中的datadir文件夾未建立致使
    2,防火牆未關閉,建議永久關閉防火牆-->chkconfig iptables of
    3,修改sh腳本里的一個nc的參數來解決,可在本身的版本中並無找到nc的調用。-->nc屬於老版本,新版本沒有了nc
    可是,個人都不是上述問題,個人問題是myid文件配置錯誤。

    myid的文件,文件中的內容只有一行,爲本主機對應的id值,也就是上圖中server.id中的id

相關文章
相關標籤/搜索