zookeeper介绍
★ 什么是zookeeper
zookeeper 是 Google 的 Chubby一个开源的实现,是Hadoop 的分布式协调服务。
zookeeper包含有一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
★ zookeeper的角色
大部分的分布式应用都需要一个主控、协调器或控制器来管理物理分布的子进程。
zookeeper提供通用的分布式锁服务,用以协调分布式应用。
★ zookeeper特性
摘自别处。
一、Zookeeper是简单的
二、Zookeeper是富有表现力的
三、Zookeeper具有高可用性
四、Zookeeper采用松耦合交互方式
五、Zookeeper是一个资源库
★ zookeeper 部署
一、zk服务器集群规模不小于3个节点,要求各服务器之间系统时间要保持一致。
二、在hadoop5的/usr/local目录下,解压缩zk....tar.gz,设置环境变量
三、在conf目录下,修改文件 vi zoo_sample.cfg zoo.cfg
四、编辑该文件,执行vi zoo.cfg
修改dataDir=/hadoopdat/zk/data
新增 server.5=hadoop5:2888:3888
server.6=hadoop6:2888:3888
server.7=hadoop7:2888:3888
五、创建文件夹mkdir /hadoopdat/zk/data
六、在data目录下,创建文件myid,值为5
七、把zk目录复制到hadoop6和hadoop7中
八、把hadoop6中相应的myid的值改为6
把hadoop7中相应的myid的值改为7
九、启动,在三个节点上分别执行命令zkServer.sh start
十、检验,在三个节点上分别执行命令zkServer.sh status 状态如下所示:
这是一个follower
这是一个leader
★ zookeeper概述
Zookeeper 不仅可以单机提供服务,同时也支持多机组成集群来提供服务 , 实际上 Zookeeper 还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个 Zookeeper 实例;
nitLimit:这个配置项是用来配置Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒;
syncLimit:这个配置项标识Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒;server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
分别在3台机器上启动ZooKeeper的Server:sh bin/zkServer.sh start;运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)。Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。为什么一定要超过半数呢?这跟Zookeeper的复制策略有关:zookeeper确保对znode 树的每一个修改都会被复制到集合体中超过半数的机器上。
★ zookeeper数据类型
在zk集群中,每个节点叫做znode
节点Znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点
ZNode有两种类型,短暂的ephemeral和persistent
ZNode的类型在创建时确定并且之后不能再修改
短暂ZNode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
持久znode不依赖于客户端会话,只有当客户端明确要删除持久znode时才会被删除
Znode有四种形式的目录节点:
PERSISTENT
PERSISTENT_SEQUENTIAL
EPHEMERAL
EPHEMERAL_SEQUENTIAL
★ zookeeper的角色
领导者:leader 负责进行投票的发起和决议,更新系统状态
学习者:learner 包括跟随者follower和观察者observer。
follower用于接受客户端请求并向客户端返回结果,在选举中参与投票
observer可以接受客户端连接,将 写请求转发给leader,但observer不参与投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
client:请求的发起方
★ zookeeper的shell操作
集群搭建完成以后,通过jps命令,可以查看到zookeeper的后台进程
在Hadoop基础上多了一个QuorunPeerMain的进程
进入客户端:
[root@hadoop6 bin]# zkCli.sh 进入客户端模式
可用的命令
范例:
over