ZOOKEEPER入门

zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

zookeeper工作原理

ZOOKEEPER入门

1.每个Server在内存中存储了一份数据;

2.Zookeeper启动时,将从实例中选举一个leader(Paxos 协议)

3.Leader负责处理数据更新等操作 ,其他Follower节点负责接收客户端的读写请求。

4.一个更新操作成功,当且仅当大多数Server在内存中成功修改数据

 

Zookeeper的安装与配置

1.配置JAVA环境,检验环境:java -version

2.下载并解压zookeeper
# tar -zxvf zookeeper-3.4.12.tar.gz
# cd zookeeper-3.4.12

3.重命名配置文件zoo_sample.cfg

# cp conf/zoo_sample.cfg conf/zoo.cfg

配置zoo.cfg

  • dataDir=/var/zookeeper
  • server.1=node011:2888:3888
  • server.2=node012:2888:3888
  • server.3=node013:2888:3888
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

每台服务器创建文件夹/tmp/zookeeper,在每个目录中创建文件myid 文件,写入当前实例的server id,即1.2.3

服务1:echo 1 > myid

服务2:echo 2 > myid

服务3:echo 3> myid

 

4:启动zookeeper

# bin/zkServer.sh start

5:检测是否成功启动,用zookeeper客户端连接下服务端

# bin/zkCli.sh

Zookeeper使用客户端命令操作zookeeper

0.help查看操作手册

ZOOKEEPER入门

1、 ls 命令来查看当前 ZooKeeper 中所包含的内容

2、创建一个新的 znode ,使用 create /zkPro myData

3、 get 命令来确认第二步中所创建的 znode 是否包含我们所创建的字符串:

ZOOKEEPER入门

4. set 命令来对 zk 所关联的字符串进行设置:

5.创建节点:

ZOOKEEPER入门

Zookeeper角色

领导者(leader),负责进行投票的发起和决议,更新系统状态
学习者(learner),包括跟随者(follower)和观察者(observer)
follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票 
Observer可以接受客户端连接,将写请求转发给 leader,但observer不参加投票过程,只同步leader 的状态,observer的目的是为了扩展系统,提高读取 速度

 

Zab协议

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。
实现这个机制的协议叫做Zab协议,它是Paxos算法的改进版,Paxos算法是目前非常出名的一个分布式一致性算法。

Zab协议的两种模式,它们分别是:
恢复模式(选主): 当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后 ,恢复模式就结束了。
广播模式(同步): 状态同步保证了leader和Server具有相同的系统状态。

 

Zookeeper事务的一致性

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议( proposal)都在被提出的时候加上了zxid。

 

Zookeeper总结

Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用 来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、 Server 之间状态同步等。
Zoopkeeper 提供了一套很好的分布式集群管理的机 制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型