内容简介:ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件。linux下安装zookeeper:目录结构:
1.zookeeper简介
ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件。
2.设计目标
- 简单的数据结构:共享的树形结构,类似文件系统,存储于内存;
- 可以构建集群:避免单点故障,3-5台机器就可以组成集群,超过半数正常工作就能对外提供服务;
- 顺序访问:对于每个读请求,zk会分配一个全局唯一的递增编号,利用这个特性可以实现高级协调服务;
- 高性能:基于内存操作,服务于非事务请求,适用于读操作为主的业务场景。3台zk集群能达到13w QPS;
3.应用场景
- 数据发布订阅 (以下都是基于数据发布订阅)
- 负载均衡
- 命名服务
- Master选举
- 集群管理
- 配置管理
- 分布式队列
- 分布式锁
4.zookeeper基础
linux下安装zookeeper:
目录结构:
bin →存放系统脚本
conf → 存放配置文件
contrib → zk附加功能支持
dist-maven → maven仓库文件
docs → zk文档
lib → 依赖的第三方库
recipes → 经典场景样例代码
src → zk源码
其中bin和conf是非常重要的两个目录,也是经常用的。
bin目录:
其中zkServer为服务器,启动后默认端口为2181
zkCli为命令行客户端
conf目录:这里就不一一列举了,具体查阅资料
5.ZK的特性
Zk的特性会从会话、数据节点,版本,Watcher,ACL权限控制,集群角色这些部分来了解,其中重点需要掌握的数据节点与Watcher。
5.1 会话
客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输;
会话(session)是zookepper非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关。
会话状态图:
Zk客户端和服务端成功连接后,就创建了一次会话,ZK会话在整个运行期间的生命周期中,会在不同的会话状态之间切换,这些状态包括:
CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE
- 一旦客户端开始创建Zookeeper对象,客户端状态就会变成CONNECTING状态。
- 同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED.
通常情况下,由于断网或其他原因,客户端与服务端出现断开情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重连上后,状态又变为CONNECTED,一般客户端的状态总是介于CONNECTING和CONNECTED之间。
但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态
5.2 ZK数据模型
ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”.
注意:创建节点的时候必须设置值,不然节点是创建不成功的。
- 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据
- 通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。
5.3 ZK节点类型
节点类型是非常重要的,是项目实战的基础。
a、Znode有两种类型:
短暂(ephemeral)(create -e /testlinshi/linshi test1 客户端断开连接zk删除ephemeral类型节点,即linshi节点)
持久(persistent) (create -p /testlinshi/linshi test2 客户端断开连接zk不删除persistent类型节点)
b、Znode有四种形式的目录节点(默认是persistent,持久)
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL
创建znode时带-s参数即是顺序节点,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
c、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序.
5.4 zookeeper节点状态属性
如图
5.5 ACL保障数据的安全
举个例子查看znode的ACL信息
world anyone cdrwa 三个字段为ACL信息,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等),即schemepermissions。
zookeeper提供了如下几种机制(scheme):
- world: 它下面只有一个id, 叫anyone,world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的
- auth: 它不需要id,只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation,也支持username/password形式的authentication)
- digest:它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
- ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16,
表示匹配前16个bit的IP段
机制为auth:
addauth digest username:123456 # 需要先添加一个用户
setAcl /testAcl-auth auth:username:123456:crwa # 然后才可以拿着这个用户去设置权限,设置auth机制
getAcl /testAcl-auth # 密码都是以密文的形式存储的
机制为digest:
create /testAcl-digest1 123
addauth digest username1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ= # 需要先添加一个用户
setAcl /testAcl-digest1 digest:username1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ=:crwa # 然后才可以拿着这个用户去设置权限,设置digest机制
注意设置digest机制的时候密码都是以密文形式的
getAcl /testAcl-digest1 # 密码都是以密文的形式存储的
密文也可以在 linux 下通过命令获取:
shell>
java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider username1:123456
username1:123456-> username1: IkghJ5CIcrw6bRa3Zu2aSo2IblQ=
Permission
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)
CREATE(c):创建子节点的权限
DELETE(d):删除节点的权限 (删除当前节点下的任意节点的权限)
READ(r):读取节点数据的权限
WRITE(w):修改节点数据的权限
ADMIN(a):设置子节点权限的权限
5.6 zookeeper日志可视化
前面以及讲了两个非常重要的配置一个是dataDir,存放的快照数据,一个是dataLogDir,存放的是事务日志文件。
查看快照文件:
查看日志文件则是用另一个类LogFormatter
java -cp /usr/local/zookeeper-3.4.14/zookeeper-3.4.14.jar:/usr/local/zookeeper-3.4.14/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.14
以上所述就是小编给大家介绍的《zookeeper基础》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP高级程序设计
Kevin McArthur / 汪泳 等 / 人民邮电出版社出版 / 2009.7 / 45.00元
今天,PHP已经是无可争议的Web开发主流语言。PHP 5以后,它的面向对象特性也足以与Java和C#相抗衡。然而,讲述PHP高级特性的资料一直缺乏,大大影响了PHP语言的深入应用。 本书填补了这一空白。它专门针对有一定经验的PHP程序员,详细讲解了对他们最为重要的主题:高级面向对象、设计模式、文档、测试和标准PHP库等内容。同时,为适应目前Web开发的新趋势,作者还全面探讨了MVC架构和Z......一起来看看 《PHP高级程序设计》 这本书的介绍吧!