分佈式協調服務-Zookeeper

什麼是 zookeeper?

Zookeeper 是google的chubby一個開源實現,是hadoop的分佈式協調服務
它包含一個簡單的原語集,分佈式應用程序能夠基於它實現同步服務,配置維護和命名服務等。
在Hbase中會用到。
Zk(zookeeper簡稱)能夠用來保證數據在zk集羣之間的數據的事物性一致。
Zk默認數據2M如下。node

 

zookeeper架構圖

 

如何搭建Zookeeper服務器集羣

zk服務器集羣規模不小於3節點,要求服務器之間系統時間要保持一致。ruby

將下載的zookeeper複製到/usr/local 裏,解壓:bash

tar –zxvf  zookeeper-3.4.5.tar.gz

重命名:服務器

mv  zookeeper-3.4.5.tar.gz zk

在hadoop的/usr/local目錄下,解壓縮zk….tar.gz,設置環境變量
設置環境變量:
加入:markdown

export  ZOOKEEPER_HOME=/usr/local/zk

在PATH 後面追加:架構

:$ZOOKEEPER_HOME/bin

使環境變量生效:ssh

source /etc/profile

在conf目錄下,修改文件分佈式

mv  zoo_sample.cfg  zoo.cfg
[root@hadoop zk]# cd conf
[root@hadoop conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@hadoop conf]# mv zoo_sample.cfg zoo.cfg
[root@hadoop conf]# ls
configuration.xsl  log4j.properties  zoo.cfg

編輯該文件:
vi zoo.cfg
修改dataDir=/usr/local/zk/dataoop

新增學習

server.0=hadoop:2888:3888
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888

這裏講下zookeeper的角色:

領導者(leader):負責投票的發起和決議,更新系統狀態
學習者(learner):包括追隨者(follower)和觀察者(observer),follower用於接受客戶端請求並向客戶端返回結果,在選主過程當中參與投票。
observer 能夠接受客戶端鏈接,將寫請求轉發給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是爲了擴展系統,提升讀取速度。
客戶端(client),請求發起方。

建立文件夾 :
進入zk文件夾下,建立data文件夾。
[root@hadoop zk]# mkdir data
在data目錄下,建立文件myid,值爲0

[root@hadoop zk]# cd data
[root@hadoop data]# ls
[root@hadoop data]# vi myid 

把zk目錄複製到hadoop1和hadoop2中

scp  -r  zk hadoop1:/usr/local
scp  -r  zk hadoop2:/usr/local

環境變量也要複製過去

[root@hadoop local]# scp /etc/profile hadoop1:/etc/
profile                            100% 2037     2.0KB/s  00:00
[root@hadoop local]# scp /etc/profile hadoop2:/etc/
profile                            100% 2037     2.0KB/s  00:00

記得在hadoop1和hadoop2節點上:
source /etc/profile
使環境變量生效

把hadoop1中相應的myid的值改成1,把hadoop2中相應的myid的值改成2

[root@hadoop local]# ssh hadoop1
Last login: Mon May 11 08:22:01 2015 fromhadoop
[root@hadoop1 ~]# vi /usr/local/zk/data
[root@hadoop1 ~]# vi /usr/local/zk/data/myid
 [root@hadoop1~]# exit
logout
Connection to hadoop1 closed.
[root@hadoop local]# ssh hadoop2
Last login: Mon May 11 08:21:48 2015 fromhadoop
[root@hadoop2 ~]# vi /usr/local/zk/data/myid
[root@hadoop2 ~]# exit
logout
Connection to hadoop2 closed.

啓動,在三個節點上分別執行命令zkServer.sh start

[root@hadoop zk]# cd bin
[root@hadoop bin]# ls
README.txt   zkCli.cmd  zkEnv.cmd  zkServer.cmd
zkCleanup.sh zkCli.sh   zkEnv.sh   zkServer.sh
[root@hadoop bin]# zkServer.sh start
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

其餘兩個節點相似上面操做

[root@hadoop bin]# ssh hadoop1
Last login: Mon May 11 08:24:36 2015 fromhadoop
 [root@hadoop1~]# cd /usr/local
[root@hadoop1 local]# cd zk
[root@hadoop1 zk]# cd bin
[root@hadoop1 bin]# ls
README.txt   zkCli.cmd  zkEnv.cmd  zkServer.cmd
zkCleanup.sh zkCli.sh   zkEnv.sh   zkServer.sh
[root@hadoop1 bin]# zkServer.sh start
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@hadoop1 bin]# ssh hadoop2
Last login: Mon May 11 08:25:52 2015 fromhadoop
[root@hadoop2 ~]# cd /usr/local/zk/bin
[root@hadoop2 bin]# zkServer.sh start
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

檢驗,在三個節點上分別執行命令zkServer.sh status
查看選舉結果:

[root@hadoop2 bin]# zkServer.sh status
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Mode: follower

[root@hadoop1 bin]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zk/bin/../conf/zoo.cfg
Mode: leader

[root@hadoop bin]# zkServer.sh status
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Mode: follower

Zookeeper的使用(命令行操做)

Zookeeper有目錄結構,稱做節點,節點能夠賦值,能夠添加,能夠刪除
終端:zkCli.sh 能夠進入命令行

[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls/zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 4] ls/zookeeper/quota
[]

建立了一個節點,給它賦值hadoop,經過get 命令得到它的值。

[zk: localhost:2181(CONNECTED) 5] create/cloud  hadoop
Created /cloud
[zk: localhost:2181(CONNECTED) 6] ls /
[cloud, zookeeper]
[zk: localhost:2181(CONNECTED) 7] get /cloud
hadoop
cZxid = 0x100000002
ctime = Mon May 11 10:07:07 CST 2015
mZxid = 0x100000002
mtime = Mon May 11 10:07:07 CST 2015
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

能夠set 設置值 你會發如今其餘的兩個zookeeper服務器上,會得到這個值,也就是所謂的事物一致性。

Zookeeper的節點

Znode有兩種類型,短暫的和持久的。 Znode的類型在建立時肯定給而且以後不能 在修改。 短暫znode的客戶端會話結束時,zookeeper會將該短暫的znode刪除,短暫znode不能夠有子節點。 持久znode不依賴與客戶端會話,只有當客戶端明確要刪除該持久znode時纔會被刪除。

相關文章
相關標籤/搜索