1.什么是ZooKeeper?
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
注意,这是一个协调平台,不是管理平台。类似于红绿灯,可以协调帮助道路通畅。
ZooKeeper起到了一个协调各个框架的作用。它并不是直接为我们的数据提供服务。
ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,他负责存储和挂历大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,ZooKeeper就将负责通知已经在ZooKeeper上注册的那些观察者做出相应的反应。
所以,ZooKeeper = 文件系统 + 通知机制
2.ZooKeeper集群特点
1)Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。
2)Leader负责进行投票的发起和决议,更新系统状态
3)Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票
4)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
5)全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
6)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
7)数据更新原子性,一次数据更新要么成功,要么失败。
8)实时性,在一定时间范围内,client能读到最新数据。
3.ZooKeeper的数据结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
4.安装配置ZooKeeper
1、解压ZooKeeper文件到/opt/module/下
tar -xzvf zookeeper-3.4.10.tar.gz -C /opt/module/
2、配置环境变量
编辑sudo vim /etc/profile.d/my_env.sh
在内部添加如下内容:
#ZOOKEEPER_HOME export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10 export PATH=$PATH:$ZOOKEEPER_HOME/bin
然后重新打开一个会话,以使环境变量生效。可以通过在命令行输入zk然后按table键看是否有补全备选项来测试ZooKeeper安装是否成功。
然后分发环境变量
xsync /etc/profile.d/my_env.sh
3、配置ZooKeeper
进入配置文件的文件夹/opt/module/zookeeper-3.4.10/conf,,并将zoo_sample.cfg重命名为zoo.cfg:
cd /opt/module/zookeeper-3.4.10/conf mv zoo_sample.cfg zoo.cfg
其实现在ZooKeeper已经可以单机启动了。(因为ZooKeeper默认的配置就是单机模式)
接下来继续配置ZooKeeper的集群模式,因为单机模式没人用…………
4、编辑zoo.cfg文件,vim zoo.cfg
将dataDir=/tmp/zookeeper更改为:(该目录的唯一要求是当前用户对该文件夹具有写权限)
dataDir=/opt/module/zookeeper-3.4.10/zkData
5、配置集群机器,每台机器分配一个不同的Serverid
在zoo.cfg配置文件最后添加如下内容:
server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
server.x
中的x即为每台机器的id,对于Serverid只有一个要求,即每台机器的serverid需各不相同即可。记住自己设置的id。
以上配置2,3,4就是Serverid
6、在zkData文件夹里新建一个myid文件,内容是本机的Serverid
没有zkData文件夹的话,创建一个zkData文件夹:
cd /opt/module/zookeeper-3.4.10 mkdir zkData
然后在zkData文件夹中新建文件myid
在myid中写入本机的id,当前机器serverid是2,所以myid文件中只写入2。
7、(可选配置)配置Zookeeper的LogDIR:配置bin/zkEnv.sh文件
vim /opt/module/zookeeper-3.4.10/bin/zkEnv.sh
将ZOO_LOG_DIR="."
改为ZOO_LOG_DIR="/opt/module/zookeeper-3.4.10/logs"
或者:
ZOO_LOG_DIR="${ZOOKEEPER_HOME}/logs"
8、分发ZooKeeper到集群各个机器。
xsync /opt/module/zookeeper-3.4.10/
9、到集群的另外两台机器中分别修改其serverid
echo 3 > /opt/module/zookeeper-3.4.10/zkData/myid echo 4 > /opt/module/zookeeper-3.4.10/zkData/myid
10、启动
ZooKeeper集群官方没有给群启脚本,所以需要在每台机器上同时发送执行命令:
zkServer.sh start
关闭同理:
zkServer.sh stop
然后可以通过命令:zkServer.sh status
来查看集群中各个机器的状态,其中follower为从机,leader为主机。