Zookeeper不仅可以单机提供服务,同时也支持多机组成集群来提供服务,实际上Zookeeper还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个Zookeeper实例。
Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。
集群容灾性:3台机器只要有2台可用就可以选出leader并且对外提供服务(2n+1台机器,可以容n台机器挂掉)。
这里我使用hadoop1,hadoop2,hadoop3为例,搭建步骤。
安装之前请先关闭防火墙!!!
1、官网下载zookeeper安装包
zookeeper-3.4.5.tar.gz
2、解压缩、重命名、设置环境变量
[root@hadoop1 install]# tar -zxvf zookeeper-3.4.5.tar.gz
[root@hadoop1 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:2888:3888
server.1=hadoop2:2888:3888
server.2=hadoop3:2888:3888
2888表示zookeeper程序监听端口,3888表示zookeeper选举通信端口。
5、创建文件夹mkdir /install/zookeeper/data
和/install/zookeeper/dataLog
6、在data目录下,创建文件myid,值为0
[root@hadoop1 data]# vim myid
[root@hadoop1 data]# more myid
0
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
[root@hadoop2 data]# vi myid
[root@hadoop2 data]# more myid
1
hadoop3同上
8、启动,在三个节点上分别执行命令
[root@hadoop1 install]# zkServer.sh start
JMX enabled by default
Using config: /install/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
9、检验,在三个节点上分别执行命令
[root@hadoop1 install]# zkServer.sh status
JMX enabled by default
Using config: /install/zookeeper/bin/../conf/zoo.cfg
Mode: follower
能够看到是leader,还是follower。
停止
[root@hadoop1 install]# zkServer.sh stop
10、命令行操作
进入命名行:执行zkCli.sh
如果配置文件中更改了端口号2181,则需要指定端口zkCli.sh -server IP:port
。
zkCli.sh -server ubuntu:21818
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 = 0x100000002
ctime = Tue Mar 31 01:37:29 PDT 2015
mZxid = 0x100000004
mtime = Tue Mar 31 01:41:55 PDT 2015
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0