Zookeeper的作用及命令行操作
Zookeeper是什么
1、ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目。
2、ZooKeeper是一个经典的分布式数据一致性解决方案(基于Paxos算法),致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调服务。
3、Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式
二、zookeeper做什么
1. 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图
2.可靠性:具有简单、健壮、良好的性能,如果消息被到一台服务器接受,那么它将被所有的服务器接受。
3 .实时性: 保证客户端将在一个时间间隔范围内获得服务器的更新信息
4、等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
5.原子性:更新只能成功或者失败,没有中间状态。
6 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面
三、zookeeper的作用
1、 命名服务
在zookeeper的文件系统里创建一个目录,即有唯一的path。通过path即能管理上层
2、配置管理
将配置信息放到zookeeper的目录下,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,相应跟着变化。
3、集群管理
主负责:机器退出和加入、选举master
机器加入会创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知
4、分布式锁
保障了zookeeper的一致性文件系统
锁服务可以分为两类,一个是保持独占,另一个是控制时序。
5、队列管理
两种类型的队列:
1、 同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
2、队列按照 FIFO 方式进行入队和出队操作。
四、ZooKeeper服务架构 - 容灾能力
ZooKeeper能够完成选举即能够正常对外提供服务。
ZooKeeper选举时,当某一个实例获得了半数以上的票数时,则变为leader。
对于n个实例的服务,n可能为奇数或偶数。
n为奇数时,假定n=2*x+1 ,则成为leader的节点需获得x+1票,容灾能力为x。
n为偶数时,假定 n = 2*x+2 ,则成为leader的节点需要获得x+2票 (大于一半),容灾能力为x。
五、Zookeeper选举流程
目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
1、服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
2、服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
3、服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
4、服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
5、服务器5启动,后面的逻辑同服务器4成为小弟。
六、ZooKeeper客户端常用命令使用
zkCli.sh -server host1:24002 2>&1|tee /home/username/.jline
得到的结果是world,anyone:cdrwa,说明是具有所有权限
解析如下:
(1)ZK的节点有5种操作权限:
缩写 crdwa
CREATE:创建子节点
READ:获取节点、子节点
WRITE:设置节点数据
DELETE:删除子节点
ADMIN:设置权限
(2)身份的认证有4种方式:
1 world:默认方式,相当于全世界都能访问
2 auth:代表已经认证通过的用户(cli中通过addauth digest user:pwd 来添加当前上下文中的授权用户)
3 digest:即用户名:密码这种方式认证,这也是业务系统中最常用
4 ip:使用Ip地址认证



