Zookeeper的安装

概览

1.Zookeeper简介
2.Zookeeper的安装
3.Zookeeper的配置
4.启动集群
5.数据同步测试

1.Zookeeper简介

Zookeeper功能简介

ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现分布式应用程序可以基于ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。

在Zookeeper中共有三个角色

1. Leader
2. Follower
3. Observe

一个 ZooKeeper 集群同一时刻只会有一个 Leader,其他都是 Follower 或 Observer。

2.Zookeeper的安装

这次我们是在之前的Hadoop集群搭建的基础上安装的,所以没有搭建好的小伙伴最好先配置好Hadoop集群,不然还要安装jdk

在虚拟机的/usr下创建个zookeeper文件夹mkdir zookeeper
然后将zookeeper的安装包(压缩包)上传到该文件夹下

解压

1
2
3
4
5
6
[root@master usr]# mkdir zookeeper
[root@master usr]# ls
bin etc games hadoop include java lib lib64 libexec local sbin share src tmp zookeeper
[root@master usr]# cd zookeeper/
#解压
[root@master zookeeper]# tar -zxf zookeeper-3.4.12.tar.gz

3.Zookeeper的配置(先在一台节点上配置)

添加一个zoo.cfg配置文件

1
2
3
4
#进入到Zookeeper的配置目录
cd /usr/zookeeper/zookeeper-3.4.12/conf
#copy出来一个配置文件
cp zoo_sample.cfg zoo.cfg

这是zoo.cfg中各项的含义

zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg。其中各配置项的含义,解释如下:

1.tickTime:CS通信心跳时间 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。 tickTime=2000

2.initLimit:LF初始通信时限 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5

3.syncLimit:LF同步通信时限 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。 syncLimit=2

4.dataDir:数据文件目录 Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。 dataDir=/home/michael/opt/zookeeper/data

5.clientPort:客户端连接端口 客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2181

6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口) 这个配置项的书写格式比较特殊,规则如下: server.N=YYY:A:B

修改配置文件(zoo.cfg)
将dataDir=/tmp/zookeeper 改为 dataDir=/usr/zookeeper/data
然后在最后追加

1
2
3
4
5
6
#master,slave1,slave2这是我的三台虚拟机主机名
#并且在/usr/hosts文件中做了ip映射
#所以可以直接写主机名称,如果你没有做映射,将主机名替换为ip地址
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

然后我们在/usr/zookeeper文件夹下创建一个data文件夹

1
2
3
4
[root@master conf]# cd /usr/zookeeper/
[root@master zookeeper]# ls
zookeeper-3.4.12 zookeeper-3.4.12.tar.gz
[root@master zookeeper]# mkdir data

然后在data下创建一个myid文件(ZooKeeper 配置很简单,每个节点的配置文件(zoo.cfg)都是一样的,只有 myid 文件不一样。myid 的值必须是 zoo.cfg中server.{数值} 的{数值}部分。)
在(/usr/zookeeper/data 需要自己创建)创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)

1
2
3
4
5
6
7
#建立文件
[root@master data]# touch myid
#传入值
[root@master data]# echo 1 > myid
#查看
[root@master data]# cat myid
1

然后我们把配置好的zookeeper传给另外两台主机slave1和slave2

1
2
scp -r /usr/zookeeper root@slave1:/usr
scp -r /usr/zookeeper root@slave2:/usr

注意:在其他节点上一定要修改myid的内容
在slave1应该讲myid的内容改为2(echo 2 > myid
在slave2应该讲myid的内容改为3 (echo 3 > myid

4.启动集群(注意关闭防火墙)

在master , slave1 , slave2分别启动zookeeper

1
2
3
4
5
6
#进入zookeeper下的bin文件夹
[root@master usr]# cd /usr/zookeeper/zookeeper-3.4.12/bin
[root@master bin]# ls
README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer.cmd zkServer.sh
#启动服务
[root@master bin]# ./zkServer.sh start

查看状态

1
2
3
4
5
6
7
8
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@master bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower #这里是follower便可以认为启动成功

5.数据同步测试

进入到zkCilent

1
./zkCli.sh

在主机master上创建一个文件,看看是否同步到其他机器上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#查看
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
#创建文件 /路径 内容
[zk: localhost:2181(CONNECTED) 1] create /test hello
Created /test
#查看文件内容
[zk: localhost:2181(CONNECTED) 2] get /test
hello
cZxid = 0x100000002
ctime = Fri Oct 19 21:51:21 CST 2018
mZxid = 0x100000002
mtime = Fri Oct 19 21:51:21 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

在其他机器上也进行查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#进入到zkCli
[root@slave1 bin]# ./zkCli.sh
#查看
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2181(CONNECTED) 1] get /test
hello
cZxid = 0x100000002
ctime = Fri Oct 19 21:51:21 CST 2018
mZxid = 0x100000002
mtime = Fri Oct 19 21:51:21 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

再到slave2上查看,数据是同步的

删除

1
2
3
[zk: localhost:2181(CONNECTED) 3] delete /test
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper]

再到其他机器进行查看,发现也删除了,表示你的zookeeper的集群安装已完成

退出zkCli

1
[zk: localhost:2181(CONNECTED) 5] quit

结束zkServer

1
2
#结束服务
[root@master bin]# ./zkServer.sh stop

接下来还会介绍hadoop+zookeeper3节点高可用集群搭建