关注微信公众号:CodingTechWork,一起学习进步。
??对zk的学习和简单使用进行一个总结。
数据模型特点
树形层次结构
,树中的节点被称为znode
。znode可以用于存储数据
,并且有一个与之相关联的ACL
。1MB
以内。具有原子性
。客户端读取一个znode的数据时,要么读到所有数据,要么读操作全部失败(不会存在读取部分数据这种状态)。同样,写操作也是一样,要么全部调换znode存储数据,要么写不成功而失败,不会出现部分写现象。路径必须是绝对路径
,每条路径从一个斜杠字符开始
。路径引用中不包含“.”这种不合法表示
,不支持路径解析。hadoop是通过URI,如hdfs://ns1/user/userA保留词
,不能作为路径表示中的一部分。zk中使用/zookeeper子树
保存管理信息
。??znode分为短暂和持久两种大类型。类型在创建时被确定且后面不能再修改。
奇数个
服务器,运行一个计算机集群上,这个计算机集群被称为一个集合体,zk通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,就能够提供服务。对znode树的每一个修改都会被复制到集合体中超过半数的机器上。??因为zk生产环境一般是使用复制模式,即集合体中半数以上的机器处于可用状态,zk就可以继续提供服务,比如在一个有5个节点的集合体中,任意2台机器故障,都可以保证服务继续。而在6个节点的集合体里,只能够容忍2台机器出现故障,如果出现3台机器,剩下3台机器没有超过集合体的半数,无法判断是否可用。
??zk使用了Zab协议
,经历领导者选举
和原子广播
两个循环重复的阶段。
领导者(leader)
的机器,其他机器称为跟随者(follower)
,一旦半数以上的跟随者将其状态与领导者同步了,则表明该阶段完成。如果领导者机器出现故障,则剩余机器会选出一个新的领导者机器。若旧领导者恢复正常,会变成一个跟随者。一般选举只需要200毫秒
。
??一个跟随者有可能滞后于领导者几个更新,而每个客户端都有可能被连接到领导者,但客户端对此无法控制,无法知道自己是否连接到领导者机器。所以客户端最好是全部连接到领导者机器,若实现不了,最好不要连接到领导者机器。对zk进行配置,使得领导者不接受任何客户端连接,领导者任务就变成了协调更新,可以将leaderServes属性设置为no来实现,推荐操作3台服务器的集群中使用该配置。
zxid(ZooKeeper Transaction ID)
。会话介绍
“滴答时间”
:tick time定义了zk的基本时间周期,被集合体的服务器用来定义相互交互的时间表。2秒(2000毫秒)
,则会话超时
时间为4-40秒
。设置太低
,繁忙的网络会导致数据包传输延迟,导致会话过期,机器会出现“振动(flap)”现象
,即在很短的时间内反复出现离开后又重新加入组的情况。
zk对象在生命周期中可以通过getState()
方法查询对象的状态,返回值States是zk对象不同状态的枚举类型值。
CONNECTING状态
,建立连接完成后,进入CONNECTED状态
。通过注册观察对象,进入CONNECTED后,观察对象会收到一个WatchedEvent通知
,KeeperState值为SyncConnected
。Disconnected事件
。(重连是zk自动发起)close()
方法或者出现会话超时(观察事件KeeperState的值为Expired
时),zk实例会转换到第三个状态CLOSED
。zk对象不再被认为是活跃的(通过State使用isAlive()方法判断),且不能再用。??配置服务是分布式应用中的基本服务之一,使集群中的机器可以共享配置信息中公共部分。zk可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和更新配置文件。
??分布式锁能够在一组进程之间提供互斥机制,使任何时刻只有一个进程可以持有锁。可以用于在大型分布式系统中实现领导者选举,在任何时间点,持有锁的那个进程就是系统的领导者。(不同于zk自身的领导者选举)
使用顺序znode来为竞争锁的进程强制排序,zk是顺序的仲裁者,负责分配顺序号。
tar xzf zookeeper-x.y.z.tar.gz
export ZOOKEEPER_HOME=~/sw/zookeeper-x.y.z
export PATH=$PATH:%ZOOKEEPER_HOME/bin
配置 | 说明 |
---|---|
zoo.cfg | 一般放在conf子目录或者/etc/zookeeper子目录中,若设置环境变量ZOOCFGDIR,可以保存在该环境变量所指定的目录 |
tickTime=2000 | 指定zk基本事件单元(毫秒) |
dataDir=/Users/tom/zookeeper | dataDir指定zk存储持久数据的本地系统位置 |
clientPort=2181 | 指定zk用于监听客户端连接的端口 |
zkServer.sh start
server.n=hostname:port:port
initLimit和syncLimit参数是强制的,都是以滴答参数(tickTime)的倍数进行度量。
操作 | 描述 |
---|---|
create | 创建一个znode(必须要有父节点) |
delete | 删除一个znode(不能有任何子节点) |
exists | 测试一个znode存在与否并且查询它的元数据 |
getACL、setACL | 获取/设置一个znode的ACL |
getChildren | 获取一个znode的子节点列表 |
getData、setData | 获取/设置一个znode所保存的数据 |
sync | 将客户端的znode视图与zk同步 |
netstat -na | grep 2181 | wc -l
netstat -an | grep -I 2181
echo stat | nc localhost 2181
echo conf | nc localhost 2181 | grep "max"
./zkCli.sh -server localhost ls
./zkCli.sh -server localhost ls /
3. 查看具体组
./zkCli.sh -server localhost ls /brokers
操作 | 描述 |
---|---|
get path [watch] | 1. 获取指定节点信息(包括数据内容和节点状态信息); 2. 节点路径必须以 / 开头;3. watch为可选参数,表示是否注册监听,若添加该参数,则其他客户端修改节点数据后,当前客户端可收到数据变更通知; 4. 示例: get /znode 或get /znode watch |
stat path [watch] | 用于查看节点状态信息,与get命令类似。如stat / |
set path data [version] | 对指定znode添加内容,version表示可以指定的dataVersion |
ls path [watch] | 获取当前路径下的子节点列表(仅仅包含下一级子节点) |
ls2 path [watch] | ls的增强版,获取当前路径下的子节点列表(仅仅包含下一级子节点)以及当前节点下的状态信息 |
delete path [version] | 删除指定节点,当指定节点下有子节点时,该节点无法删除 |
rmr path | 增强版delete,可以递归删除指定节点 |
create [-s] [-e] path data acl | 创建节点,-s表示顺序节点,-e表示临时节点,acl表示设置权限控制 |
sync path | 强制同步,由于请求在半数以上的服务器上生效就表示此请求生效,name就会有一些服务器数据是旧的,sync可以强制这些服务器同步更新操作 |
setAcl path acl | 设置节点acl,格式为:scheme:id:permissions |
getAcl path | 获取节点acl信息,如getAcl /node1 |
listquota path | 显示节点配额 |
setquota [-n val1 | -b val2] path |
delquota [-n | -b] path |
监听端口:使用ruok,代表Are you OK?
echo ruok | nc localhost 2181
返回结果为imok,代表I‘m OK
klist -kt
和kinit -kt
)scheme:id:permission
来识别:方案 | 说明 |
---|---|
world | 只有一个用户:anyone,代表所有人。(默认权限) |
ip | 使用ip地址认证 |
auth | 使用已添加认证的用户认证 |
digest | 使用用户名:密码 方式认证 |
权限模式 | 授权对象 |
---|---|
ip | 通常是一个ip地址或者ip段,如"192.168.0.10"或"192.168.0.1/24" |
digest | 自定义,通常是“username:BASE64(SHA-1(username:password))”,如“userA:jfCYslg7DFSjtoeFAdfs7FD=” |
world | 只有一个id:anyone |
super | 与digest模式一致 |
权限 | ACL简写 | 说明 |
---|---|---|
CREATE | c | 可以创建子节点,create |
DELETE | d | 可以删除子节点(仅仅是下一级节点),delete |
READ | r | 可以读取节点数据及显示子节点列表,getChildren、getData |
WRITE | w | 可以设置节点数据,setData |
ADMIN | a | 可以设置节点访问控制权限列表,setACL |
命令 | 使用方式 | 描述 |
---|---|---|
getAcl | getAcl <path> |
读取ACL权限 |
setAcl | setAcl <path> <acl> |
设置ACL权限 |
addauth | addauth <scheme> <auth> |
设置认证 |
refer by >
官网:https://zookeeper.apache.org
《Hadoop权威指南-第四版》
Zookeeper——入门介绍(相关原理、安装启动及使用操作)
原文:https://www.cnblogs.com/Andya/p/14729177.html