ZOOKEEPER入门
zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
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查看操作手册
1、 ls 命令来查看当前 ZooKeeper 中所包含的内容
2、创建一个新的 znode ,使用 create /zkPro myData
3、 get 命令来确认第二步中所创建的 znode 是否包含我们所创建的字符串:
4. set 命令来对 zk 所关联的字符串进行设置:
5.创建节点:
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 提供了一套很好的分布式集群管理的机 制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型