关注微信公众号: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