Zookeeper不僅可以單機提供服務,同時也支援多機組成叢集來提供服務,實際上Zookeeper還支援另外一種僞叢集的方式,也就是可以在一台實體機上運作多個Zookeeper執行個體。
Zookeeper通過複制來實作高可用性,隻要集合體中半數以上的機器處于可用狀态,它就能夠保證服務繼續。
叢集容災性:3台機器隻要有2台可用就可以選出leader并且對外提供服務(2n+1台機器,可以容n台機器挂掉)。
這裡我使用hadoop1,hadoop2,hadoop3為例,搭建步驟。
安裝之前請先關閉防火牆!!!
1、官網下載下傳zookeeper安裝包
zookeeper-3.4.5.tar.gz
2、解壓縮、重命名、設定環境變量
[[email protected] install]# tar -zxvf zookeeper-3.4.5.tar.gz
[[email protected] install]# mv zookeeper-3.4.5 zookeeper
vim /etc/profile
export ZOOKEEPER_HOME=/install/zookeeper
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
3、在conf目錄下,修改檔案
mv zoo_sample.cfg zoo.cfg
4、編輯該檔案,執行
vi zoo.cfg
修改
#zk的的快照日志存放目錄
dataDir=/install/zookeeper/data
#zk的事務日志的存放目錄,如果不配置dataLogDir,
#那麼zk的事務日志和快照日志都将存儲在dataDir中,這樣将嚴重影響zk的性能
dataLogDir=/install/zookeeper/dataLog
新增
server.0=hadoop1::
server.1=hadoop2::
server.2=hadoop3::
2888表示zookeeper程式監聽端口,3888表示zookeeper選舉通信端口。
5、建立檔案夾
mkdir /install/zookeeper/data
和
/install/zookeeper/dataLog
6、在data目錄下,建立檔案myid,值為0
[[email protected] data]# vim myid
[[email protected] data]# more myid
7、把zookeeper目錄複制到hadoop2和hadoop3中
cd /install
scp -r zookeeper/ hadoop2:/install/
scp -r zookeeper/ hadoop3:/install/
複制環境變量
scp /etc/profile hadoop2:/etc/
scp /etc/profile hadoop3:/etc/
使環境變量生效
ssh hadoop2
source /etc/profile
ssh hadoop3
source /etc/profile
把hadoop2,hadoop3中相應的myid的值分别改為1,2
[[email protected] data]# vi myid
[[email protected] data]# more myid
1
hadoop3同上
8、啟動,在三個節點上分别執行指令
[[email protected] install]# zkServer.sh start
JMX enabled by default
Using config: /install/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
9、檢驗,在三個節點上分别執行指令
[[email protected] install]# zkServer.sh status
JMX enabled by default
Using config: /install/zookeeper/bin/../conf/zoo.cfg
Mode: follower
能夠看到是leader,還是follower。
停止
[[email protected] install]# zkServer.sh stop
10、指令行操作
進入命名行:執行
zkCli.sh
如果配置檔案中更改了端口号2181,則需要指定端口
zkCli.sh -server IP:port
。
ZooKeeper -server host:port cmd args
connect host:port
get path [watch]
ls path [watch]
set path data [version]
rmr path
delquota [-n|-b] path
quit
printwatches on|off
create [-s] [-e] path data acl
stat path [watch]
close
ls2 path [watch]
history
listquota path
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
setquota -n|-b val path
檢視目錄
[zk: localhost:2181(CONNECTED) 6] ls /zookeeper
建立目錄
[zk: localhost:2181(CONNECTED) 10] create /liguodong hadoop
Created /liguodong
檢視内容
[zk: localhost:2181(CONNECTED) 13] get /liguodong
hadoop
cZxid = 0x100000002
ctime = Tue Mar 31 01:37:29 PDT 2015
mZxid = 0x100000002
mtime = Tue Mar 31 01:37:29 PDT 2015
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
修改内容
[zk: localhost:2181(CONNECTED) 2] set /liguodong chinese
cZxid = x100000002
ctime = Tue Mar :: PDT
mZxid = x100000004
mtime = Tue Mar :: PDT
pZxid = x100000002
cversion =
dataVersion =
aclVersion =
ephemeralOwner = x0
dataLength =
numChildren =