Zookeeper是一個分布式、開源的分布式應用程序協調服務,是Google的Chubby的開源實現,也是和Hadoop、Hbase相互配合的重要組件,作用就是為分布式應用程序提供一致性服務,包括配置維護、名字服務、分布式同步等
接下來在之前配置好hadoop集群環境的3台虛擬機上配置zookeeper集群,配置zookeeper集群之前和hadoop一樣,都要配置各主機之間可以正常通信,包括:主機名修改、hosts映射、開放端口或者關閉防火牆這些,配置和hadoop之前的准備工作完全一樣,這里就不細說了
首先去apache官網下載zookeeper,首頁網址是:http://zookeeper.apache.org/
然后點擊下方的download超鏈接,再次點擊下面另一個download超鏈接就進入鏡像選取頁面,進行下載即可
地址是:http://www.apache.org/dyn/closer.cgi/zookeeper/
這里下載的版本是:zookeeper-3.4.6,下載成功之后,上傳到其中一台主機的指定目錄下,這里三台主機是:hadoopha、hadoop1、hadoop2,這里上傳到hadoopha下
在/usr/下新建目錄zookeeper:mkdir /usr/zookeeper
然后zookeeper安裝包並放到新建好的目錄下:
$ tar -xvzf zookeeper-3.4.6.tar.gz $ mv zookeeper-3.4.6/ /usr/zookeeper/
然后在指定位置創建數據目錄和日志目錄,這個自己定義:
$ mkdir /usr/zookeeper/zookeeper $ mkdir /usr/zookeeper/zookeeper/log
然后在數據目錄下創建myid文件,並寫入ID:
echo 1 > /usr/zookeeper/zookeeper/myid
這個myid文件內容是集群中各個節點的標識,必須是數字,到后續應該對每台機器依次修改
然后進入zookeeper的安裝目錄下的conf目錄執行如下操作編輯配置文件:
cd /usr/zookeeper/zookeeper-3.4.6/conf && mv zoo_sample.cfg zoo.cfg && vim zoo.cfg
數據目錄去掉注釋修改配置如下:
dataDir=/usr/zookeeper/zookeeper
追加一行事務日志目錄配置:
dataLogDir=/usr/zookeeper/zookeeper/log
保留文件數目配置,默認為3:
autopurge.snapRetainCount=3
添加一行清理頻率的配置,單位是小時,默認為0,表示不會自動清理,應該根據需要配置一個>=1的整數,這里配置為1:
autopurge.purgeInterval=1
在最后添加如下配置:
server.1=hadoopha:2888:3888
server.2=hadoop1:2888:3888
server.3=hadoop2:2888:3888
這個定義了每個主機對應的節點,server.x,x數值應和myid保持一致,當zookeeper啟動時會讀取myid文件和zoo.cfg配置信息,然后確定唯一的節點
后面的端口號是集群中Leader和Follower之間進行通信的端口,一般不用修改,保存即可
然后把配置好的整個目錄發送到另外兩台主機,實現文件同步:
$ scp -r /usr/zookeeper/ hadoop1:/usr/ $ scp -r /usr/zookeeper/ hadoop2:/usr/
復制完成之后,修改另外兩台機器的myid文件分別是:hadoop1->2,hadoop2->3
現在都配置完畢了,接下來在3台主機上依次運行bin/zkServer.sh start啟動Zookeeper服務,一定是每台主機都要啟動
啟動流程是:系統首先會選取Leader,充當Leader的這台機器相當於領導者,負責進行投票的發起和決議,更新系統狀態;然后會進行同步數據,通過配置好的端口進行;最后進入工作流程。
啟動成功之后,可以通過命令jps查看執行進程
如果有QuorumPeerMain這個進程則代表啟動成功
可以通過:bin/zkServer.sh status查看各節點角色
此時,hadoop1為leader節點,其他的節點均為follower,這個結果是選舉出來的
可以通過命令:bin/zkServer.sh stop來停止zookeeper服務
接下來可以測試一下服務的故障轉移是否好用:
在hadoop1節點中殺死leader服務進程:
可以看出進程確實不存在了,然后在剩余兩個節點分別執行:bin/zkServer.sh status,可以發現hadoop3由follower節點變為leader節點,說明故障進行了轉移,zookeeper集群是可用的