Zookeeper原理及应用汇总

1 Zookeeper简介-分布式服务框架

   ZooKeeper为分布式应用程序提供高效且可靠的分布式协调服务,提供的服务:配置管理、统一命名服务、分布式同步、组服务等,是Google Chubby的开源实现,Hadoop和Hbase的重要组件;是一个典型的分布式数据一致性的解决方案,分布式应用程序可基于它实现诸如数据发布/订阅、负载均衡、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。

   ZooKeeper的设计目标就是将复杂易出错的分布式一致性服务封装起来,构成高效可靠的原语集,并以一系列简单易用的接口提供给用户使用,支持Java和C的接口。

   ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

   ZooKeeper是以FastPaxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有lead才能提交proposer[申请]。在解决分布式数据一致性方面,ZooKeeper并没有直接采用Paxos算法,而是使用ZAB的一致性协议。

   ZooKeeper的基本运转流程:

   1、选举Leader。               2、同步数据。

   3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。

   4、Leader要具有最高的zxid。

   5、集群中大多数的机器得到响应并follow选出的Leader

2 常用命令

四字命令

功能描述

conf

输出相关服务配置的详细信息。

cons

列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。

dump

列出未经处理的会话和临时节点。

envi

输出关于服务环境的详细信息(区别于 conf 命令)。

reqs

列出未经处理的请求

ruok

测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。

stat

输出关于性能和连接的客户端的列表。

wchs

列出服务器 watch 的详细信息。

wchc

通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。

wchp

通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

 

3 命令行工具

[sgwdev_linuxuser@tydicbin]$ ./zkCli.

zkCli.cmd  zkCli.sh  

[sgwdev_linuxuser@tydicbin]$ ./zkCli.sh -server 192.168.1.165:2181

Connecting to192.168.1.165:2181

4 简单操作

1)ls 查看ZooKeeper指定节点下一级所有子节点

ls path [watch]

2)get 获取ZooKeeper指定节点的数据内容和属性信息

get path [watch]

3)set 更新指定节点的数据内容,version为指定ZNode数据结点的版本,不指定更新后

dataVersin会+1

set path data[version]

4)create 创建一个ZooKeeper节点,-s:顺序节点;-e:临时节点;默认为永久节点;

acl: 权限控制,默认不做控制

create [-s] [-e]path data acl

5)delete 在没有没有子结点时删除ZooKeeper指定节点

delete path[version]

5 开源客户端

Curator(全世界应用最广泛)   ,   ZkClient

6 目标

1)简单的数据模型

ZooKeeper服务器内存中的数据模型,由系列的ZNode节点构成,树型结构命名空间-7.1.1

2)构建集群 7.3

3)顺序访问 7.8

对于客户端每个请求会分配一个全局唯一的递增编号,编号反映所有事务操作的先后顺序。

4)高性能

全量数据存储在内存中,直接服务于客户端所有非事务请求,尤其适合于以读操作为主场景

7 概念

1)集群角色

   通常分布式集群是主备模式(Master/Slave);ZooKeeper采用Leader、Follower、Observer三角色,通过Leader选举选定Leader服务器,为客户端提供读和写服务,Follower和Observer节点提供读服务,Observer节点不参与Leader选举和写操作“过半写成功”策略,故可以在不影响写性能的情况下提升集群的读性能 7.7

2)会话

3)数据节点ZNode

   所有ZNode以模型结构存储在内存中,数据节点ZNode包含数据内容和系列的属性信息,

如。分持久PERSISTENT,临时节点EPHEMERAL和顺序节点SEQUENTIAL,可组成4种组合型节点。持久节点:创建后只有主动进行删除操作才移除,否则一直有效;临时节点:生命周期与Client会话绑定,在Client会话失效时,这个客户端所创建的所有临时结点都会删除,SEQUENTIAL,创建节点后追加整形数字,由父节点维护的自增数字,

4)版本

    ZNode内Stat数据结构,记录ZNode三个数据版本,version当前版本;cversion当前子节点版本;aversion当前ACL版本 7.1.3

5)Watcher 事件监听器

   用户在指定节点注册一些Watcher,并且在特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端上去,该机制是ZooKeeper实现分布式协调服务的重要特性。7.1.4

6)ACL 访问控制列表(AccessControl List) ,通过ACL策略进行权限控制,5种权限

   CREATE:创建子节点权限        READ:获取节点数据和子节点列表的权限

   WRITE:更新节点数据的权限     DELETE:删除子节点数据的权限

   ADMIN:设置节点ACL的权限   7-1-5

7)ZAB协议ZooKeeperAtomic Broadcast 原子消息广播协议,保证数据一致性的核心算法

8 Zookeeper结构


角色:Zookeeper=服务端+客户端

服务端

支持群集,包括文件系统和通知机制

客户端

连接服务端,操作数据,注册要监听的数据,接收通知

 

功能:Zookeeper=文件系统+通知机制

文件系统

存储和管理数据,以树型的结构存储

通知机制

监控文件系统的数据变化,通知监听的客户端

8.1文件系统


Zookeeper数据结构特点:

路径唯一标识

树型存储结构,与文件系统目录树结构类似

例:/Apps/App3/SubApp1

节点下可以创建子节点

可以针对节点进行增,删,改,查,创建子节点操作

各个节点下可以存储数据,数据可以有多个版本。

临时节点

一旦创建这个节点的客户端与服务器失去联系,这个节点也将自动删除,

Zookeeper 的客户端和服务器通信采用长连接方式,

每个客户端和服务器通过心跳来保持连接,

这个连接状态称为 session,如果节点是临时节点,

这个 session 失效,节点也就删除了.

临时节点下不能创建子节点

永久节点

创建这个节点的客户端与服务器失去联系,这个节点不会删除。

节点的名称可以自动编号

如 App1 已经存在,再创建的话,将会自动命名为 App2     

节点可以被监控

节点中存储数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的.

8.2通知机制


Zookeeper 的客户端和服务器通信采用长连接方式,客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,每个客户端和服务器通过心跳来保持连接,zookeeper会通知客户端。

8.3总结



Zookeeper 原理:

1

存储

负责存储和管理数据

2

注册

然后接受客户端的注册,监听相关的数据

3

变化

一旦这些数据的状态发生变化

4

通知

Zookeeper 负责通知已经在 Zookeeper 上注册的那些客户端

5

业务处理

客户端做出相应的反应

Zookeeper 特点:

顺序一致性

按照客户端发送请求的顺序更新数据。

原子性

更新要么成功,要么失败,不会出现部分更新。

单一性

无论客户端连接哪个server,都会看到同一个视图。

可靠性

一旦数据更新成功,将一直保持,直到新的更新。

及时性

客户端会在一个确定的时间内得到最新的数据。

Zookeeper功能:

1

名称服务

统一命名服务,唯一的名称,树形的名称结构,便于人识别和记住,不会重复

2

配置维护

分布式应用配置项的管理

3

分布式同步

状态同步服务

4

组服务

集群管理

注:Zoopkeeper 提供了一套很好的分布式集群管理的机制,从而可以设计出多种多样的分布式的数据管理模型,而不仅仅局限于下面提到的几个常用应用场景。

8.4容错节点

zookeeper集群的容错能力情况:若2n+1=集群PC总数,n即为可容纳的故障节点。
例如:3台能容错1台,5台能容错2台,7台能容错3台。


附:

     关于Zookeeper 可参考相应资料,涉及内容:

            1)Zookeeper概述、原理及应用汇总              2)Zookeeper分布式服务框架内容总结:包括四字命令、命令行工具操作、目标、概念、 Zookeeper结构等说明 

            3)4大应用场景(配置中心、集群管理、等)  4)Linux Evi集群(三台PC)部署

            下载地址:Zookeeper概述、原理及应用汇总


            ZK 常见4大应用场景&JAVA 实现DEMO Code 以及 Zookeeper源代码3.4.9版本 可参考相应资料,下载地址:Zookeeper公司内部交流学习、培训总结

    内容截图如下:





   有不妥或不正确的地方请指出,大家一同学习、进步!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值