1、ZooKeeper介绍
Zookeeper是一种分布式架构,是为分布式应用提供协调服务的Apache开源项目,使用类似于文件系统的树型数据结构,目的是实现分布式协作。
2、ZooKeeper角色
(1)领导者(Leader):领导者负责进行投票的发起和决议,更新系统状态。
(2)学习者(Learner):
>>跟随者(Follower):Follower用于接收客户请求并向客户端返回结果,在选举领导者过程中参与投票。
>>观察者(Observer):Observer可以接收客户端连接,将写请求转发给leader节点,但Observer不参与投票过程,只同步leader的状态。Observer的目的是为了扩展系统,提高读取速度。
(3)客户端(Client):请求发起方。
3、ZooKeeper节点
Zookeeper的节点数目必须是奇数,机器的时间必须是同步的。Zookeeper具有容错性,允许坏掉若干台机器,N=2*n+1,总机器数为N,允许坏掉n台。节点名称:znode,和namenode很类似,数据会存放在zookeeper的JVM内存中(读取速度快),本地也有备份。
4、ZooKeeper集群
Zookeeper集群分为两部分:服务端和客户端,客户端可以连接集群中的任意一台机器。Zookeeper从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者,做出相应的反应,从而实现集群中类似Master/Slave管理模式。
应用场景有:统一命名服务(Name Service)、配置管理(Configuration Management)、集群管理(Group Membership)、共享锁(Locks)/同步锁。
5、ZooKeeper配置参数详解
(1)tickTime:这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。
(2)dataDir:顾名思义就是Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
(3)clientPort:这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求。
(4)Zookeeper Client命令
$ bin/zkCli.sh
子命令:ls、get、create、delete、set等等。
6、ZooKeeper的单机部署(本地配置)
(1)解压安装包:tar -zxf zookeeper-3.4.5.tar.gz -C /opt/modules/
(2)复制配置文件:$ cp conf/zoo_sample.cfg conf/zoo.cfg
创建目录:$ mkdir /opt/modules/zookeeper-3.4.5/data/zkData
指定本地存储数据的路径:
/opt/modules/zookeeper-3.4.5/conf/zoo.cfg中修改
dataDir=/opt/modules/zookeeper-3.4.5/data/zkData
(3)启动Zookeeper命令:$ bin/zkServer.sh start
查看Zookeeper状态:$ bin/zkServer.sh status
查看Zookeeper进程:$ jps
2414 QuorumPeerMain
启动Zookeeper客户端命令:$ bin/zkCli.sh
(4)在Zookeeper客户端执行的命令
得到查看数据:get /test
创建节点和数据:create /test "123456"
删除数据:rmr /test
退出Zookeeper客户端:quit或者Ctrl+C
在客户端启动的时候会有一个ZooKeeperMain进程
7、ZooKeeper的分布式部署
(1)解压安装包:tar -zxf zookeeper-3.4.5.tar.gz -C /opt/app/
(2)修改配置文件
指定存储数据的路径:
/opt/app/zookeeper-3.4.5/conf/zoo.cfg中修改
dataDir=/opt/app/zookeeper-3.4.5/data/zkData
添加分布式节点的主机名称及端口号
/opt/app/zookeeper-3.4.5/conf/zoo.cfg中,在clientPort=2181下面添加:
server.1=hadoop-senior.ibeifeng.com:2888:3888
server.2=hadoop-senior02.ibeifeng.com:2888:3888
server.3=hadoop-senior03.ibeifeng.com:2888:3888
在/opt/app/zookeeper-3.4.5/data/zkData中vim myid,只输入1。编写机器的ID编号。
(3)远程分发配置到各个节点
[beifeng@hadoop-senior zookeeper-3.4.5]$ pwd
/opt/app/zookeeper-3.4.5
[beifeng@hadoop-senior zookeeper-3.4.5]$ scp -r ../zookeeper-3.4.5/ hadoop-senior02.ibeifeng.com:/opt/app/
[beifeng@hadoop-senior zookeeper-3.4.5]$ scp -r ../zookeeper-3.4.5/ hadoop-senior03.ibeifeng.com:/opt/app/
(4)分发到其他节点后,修改/opt/app/zookeeper-3.4.5/data/zkData中的myid为2或3。
(5)启动Zookeeper命令:$ bin/zkServer.sh start,在ZooKeeper启动的时候会有一个选举的过程
查看Zookeeper状态:$ bin/zkServer.sh status
显示状态:Mode: follower或者Mode: leader