Zookeeper

分享一下我的偶像大神的人工智能教程!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

此为博主(yjclsx)原创文章,如若转载请标明出处,谢谢!

一、Zookeeper简介

Zookeeper(简称ZK)是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集群管理/leader选举等。
Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中数据的一致性。也正是基于这样的特性,使得Zookeeper成为了解决分布式一致性问题的利器。

1.1、Zookeeper特性

顺序一致性:从一个客户端发起的事务请求,最终将会严格地按照其发起的顺序被应用到Zookeeper中去。
原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的。
单一视图:无论客户端连接的是哪一个Zookeeper服务器,其看到的服务器端数据模型都是一致的。
可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务器状态将会被一致保留下来。除非有另外一个事务对其更改。
实时性:通常所说的实时性是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,Zookeeper仅仅能保证在一段时间内,客户端最终一定能从服务器端读取最新的数据状态。

1.2、Zookeeper设计目标

简单的数据结构:Zookeeper就是以简单的树形结构来进行相互协调的(也叫树形名字空间)。
可以构建集群:一般Zookeeper集群通常由一组机器构成,一般3~5台机器就可以组成一个Zookeeper集群了,只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。
顺序访问:对于来自每一个客户端的每一个请求,Zookeeper都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序,应用程序可以使用Zookeeper的这个特性来实现更高层次的同步。
高性能:由于Zookeeper将全量数据存储在内存中,并直接服务与所有的非事务请求,因此尤其是在读操作为主的场景下性能非常突出。在JMeter压力测试下(100%读请求场景下),其结果大约在12~13W的QPS。

1.3、Zookeeper组成

ZK server根据其身份特性分为三种:Leader、Follower、Observer,其中Follower和Observer又统称Learner(学习者)。
Leader:负责客户端的writer类型请求。
Follower:负责客户端的reader类型请求,参与leader选举等。
Observer:特殊的“Follower”,其可以接受客户端reader请求,但不参与选举。(扩容系统支撑能力,提高了读取速度。因为它不接受任何同步的写入请求,只负责与leader同步数据)

1.4、Zookeeper典型应用场景

Zookeeper从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式。
典型应用场景:配置管理、集群管理、发布与订阅、数据库切换、分布式日志的收集、分布式锁、队列管理等等。
Zookeeper的使用场景非常广泛,如Hadoop、Storm、消息中间件、RPC服务框架、数据库增量订阅与消费组件(如Mysql Binlog)、分布式数据库同步系统(如淘宝的Otter)等。

1.5、ZAB和Paxos

理解Zookeeper的原理,必须了解ZAB和Paxos,他们是Zookeeper数据一致性的核心算法。

二、Zookeeper安装和部署

可参考我的博文:“Zookeeper的安装与部署”。

三、Zookeeper客户端命令

help命令

显示客户所支持的所有命令,如:
ZooKeeper -server host:port cmd args
connecthost:port
getpath [watch]
lspath [watch]
setpath data [version]
rmrpath
delquota[-n|-b] path
quit
printwatcheson|off
create[-s] [-e] path data acl
statpath [watch]
close
ls2path [watch]
history
listquotapath
setAclpath acl
getAclpath
syncpath
redocmdno
addauthscheme auth
deletepath [version]
setquota-n|-b val path

connect命令

连接zk服务端,与close命令配合使用可以连接或者断开zk服务端。
如connect 127.0.0.1:2181

get命令

获取节点信息,注意节点的路径皆为绝对路径,也就是说必要要从/(根路径)开始。
如get /
hello world
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x5
mtime = Thu Apr 27 15:09:00 CST 2017
pZxid = 0xc
cversion = 1
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
详解:
hello world为节点数据信息
cZxid节点创建时的zxid
ctime节点创建时间
mZxid节点最近一次更新时的zxid
mtime节点最近一次更新的时间
cversion子节点数据更新次数
dataVersion本节点数据更新次数
aclVersion节点ACL(授权信息)的更新次数
ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength节点数据长度,本例中为hello world的长度
numChildren子节点个数

ls命令

获取路径下的节点信息,注意此路径为绝对路径,类似于linux的ls命令。
如ls /zookeeper

set命令

设置节点的数据。
如set /zookeeper “hello world”

rmr命令

删除节点命令,此命令与delete命令不同的是delete不可删除有子节点的节点,但是rmr命令可以删除,注意路径为绝对路径。
如rmr /zookeeper/znode
delquota命令
删除配额,-n为子节点个数,-b为节点数据长度。
如delquota –n 2,请参见listquota和setquota命令。

quit命令

退出客户端程序。
printwatches命令
设置和显示监视状态,on或者off。
如printwatches on

create命令

创建节点,其中-s为顺序充点,-e临时节点。
如create /zookeeper/node1”test_create” world:anyone:cdrwa
其中acl处,请参见getAcl和setAcl命令。

stat命令

查看节点状态信息。如stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x1f
mtime = Thu Apr 27 16:05:14 CST 2017
pZxid = 0xc
cversion = 1
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1
与get命令大体相同,请参见get命令。

close命令

断开客户端与服务端的连接。

ls2命令

ls2为ls命令的扩展,比ls命令多输出本节点信息。
如 ls /zookeeper

history命令

列出最近的历史命令。
如history
0 - ls /
1 - ls /
2 - ls2 /
3 - history
4 - listquota /zookeeper
5 – history
基本格式为:命令ID-命令,可以与redo命令配合使用。

listquota命令

显示配额。
如listquota /zookeeper
absolute path is/zookeeper/quota/zookeeper/zookeeper_limits
Output quota for /zookeepercount=2,bytes=-1
解释:
/zookeeper节点个数限额为2,长度无限额。

setAcl命令

设置节点Acl。
此处重点说一下acl,acl由大部分组成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions。
其中scheme和id是相关的,下面将scheme和id一起说明。
scheme和id
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段
super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
permissions
CREATE(c): 创建权限,可以在在当前node下创建child node
DELETE(d): 删除权限,可以删除当前的node
READ(r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes
WRITE(w): 写权限,可以向当前node写数据
ADMIN(a): 管理权限,可以设置当前node的permission
综上,一个简单使用setAcl命令,则可以为:
setAcl /zookeeper/node1 world:anyone:cdrw

getAcl命令

获取节点Acl。

getAcl /zookeeper/node1
'world,'anyone
: cdrwa
 
 
  • 1
  • 2
  • 3

注:可参见setAcl命令。

sync命令

强制同步。
如sync /zookeeper
由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。

redo命令

再次执行某命令。
如redo 10
其中10为命令ID,需与history配合使用。

addauth命令

节点认证。
如addauth digest username:password,可参见setAcl命令digest处。
使用方法:
一、通过setAcl设置用户名和密码
setAcl pathdigest:username:base64(sha1(password)):crwda
二、认证
addauth digest username:password

delete命令

删除节点。
如delete /zknode1

setquota命令

设置子节点个数和数据长度配额。
如setquota –n 4 /zookeeper/node 设置/zookeeper/node子节点个数最大为4
setquota –b 100 /zookeeper/node 设置/zookeeper/node节点长度最大为100

此为博主(yjclsx)原创文章,如若转载请标明出处,谢谢!

这里写图片描述

给我偶像的人工智能教程打call!http://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值