赞
踩
ZK是什么主要用来做什么
它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
linux下安装部署zk(先把zk装起来,之后的功能啥的都能试一试,先单机)
-conf 文件下 mv zoo_sample.cfg zoo.cfg
-创建数据文件夹,修改配置文件数据文件存储位置
-mkdir zkData
-bin文件下 ./zkServer.sh start
-验证zk当前状态 jps 、ps -ef|grep zookeeper、netstat -ntlp|grep 2181
-bin文件下 ./zkCli.sh
-退出客户端 quit
-bin文件下 ./zkServer.sh stop 或者直接kill 进程
提供了什么功能
zooKeeper=文件系统+通知机制。
zk文件系统
zk的命名空间就是zk的应用文件系统和linux文件系统很像,也是树状,这样可以确定每个路径都是唯一的,同时对于命名空间的操作都是绝对路径的操作。与linux文件系统不同的是,linux文件系统有目录和文件的区别,而zk统一的叫znode,一个znode节点可以包含znode同时也可以包含数据(znode只适合存储比较小的数据,不能超过1M,最好小于1K)。
文件系统特点总结:
从“/”开始,只能有绝对路径;只有“znode”概念没有文件和目录概念,znode既有文件功能(存数)又有目录功能。
四种znode节点类型
节点有两个维度,一个是永久的还是临时的,另一个是否有序。组合成的四种类型如下:
1:PERSISTENT // 持久化节点 , 节点创建后会被持久化,只有主动调用delete方法的时候才可以删除节点。
2:PERSISTENT_SEQUENTIAL // 持久化排序节点, 排序节点:创建的节点名称后自动添加序号,如节点名称为"node-",自动添加为"node-1",顺序添加为"node-2"
3:EPHEMERAL // 临时节点, 临时节点:节点创建后在创建者超时连接或失去连接的时候,节点会被删除。临时节点下不能存在字节点。
4:EPHEMERAL_SEQUENTIAL // 临时排序节点, 排序节点:创建的节点名称后自动添加序号,如节点名称为"node-",自动添加为"node-1",顺序添加为"node-2"
zkcli客户端操作文件系统(命令行操作命令):以根节点为例,“/”
1、help -查看帮助
2、查看节点
ls /
3、查看节点详细信息
stat /
信息说明:
1)czxid-创建节点的事务zxid
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于 zxid2,那么zxid1在zxid2之前发生。
2)ctime - znode被创建的毫秒数(从1970年开始)
3)mzxid - znode最后更新的事务zxid
4)mtime - znode最后修改的毫秒数(从1970年开始)
5)pZxid-znode最后更新的子节点zxid
6)cversion - znode子节点变化号,znode子节点修改次数
7)dataversion - znode数据变化号
8)aclVersion - znode访问控制列表的变化号
9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
10)dataLength- znode的数据长度
11)numChildren - znode子节点数量
4、创建节点 create [-s] [-e] path data acl
4、1 创建持久节点 create /lasting (不加参数默认创建持久节点,后边没有跟数据)
查看znode详细信息是这样的(datalength=0,没有数据)
4、2 往这个znode添加数据 set /lasting 123testdata (创建节点的时候就添加数据:create /lasting 123testdata),当前datalength=11
4、3 获取刚才添加的数据 get /lasting
4、4 不支持递归创建znode create /aaa/bbb/ccc
4、5 创建临时节点 create -e /temporary -e 临时节点参数
查看临时节点的详情
临时节点添加数据
临时节点获取数据
4、6 断开session连接,临时节点没了,上图ephemeralOwner=0x100005d04a70003就表示,这个节点所属的就是这个session
4、7 临时节点不支持有子节点
4、8 创建持久顺序节点(-s参数)持久顺序节点会在节点名称后边添加序号,
4、9 创建临时顺序节点(-e -s)
创建顺序节点会把无序节点的数值也带上
5、 删除节点,delete /lasting/aa000000 deleteall /lasting(删除节点下边还有子节点的)
6、节点的监听 ls -w path
当有其他的session改变此节点的子节点时,会触发
7、节点数据的监听 get -w path
8、关于data version (分布式环境会用到)
set path data [version]
作用是更新path路径节点的数据内容,data为更新的数据,version为指定数据被更新的版本,如果version比当前的dataVersion还小,则会报错
delete path [version]
删除路径为path的节点,version指定被删除数据的版本,一般不指定,表示删除最新的数据版本,若version为旧的版本则会报错
zookeeper znode节点的ACL权限
ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限。ZooKeeper使用ACL来控制对其znode(ZooKeeper数据树的数据节点)的访问。ACL实现与UNIX文件访问权限非常相似:它使用权限位来允许/禁止针对节点的各种操作以及位应用的范围。与标准UNIX权限不同,ZooKeeper节点不受用户(文件所有者),组和world(其他)的三个标准范围的限制。
zk利用ACL策略控制节点的访问权限,如节点数据读写、节点创建、节点删除、读取子节点列表、设置节点权限等。
在传统的文件系统中,一个文件拥有某个组的权限即拥有了组里的所有权限,文件或子目录默认会继承自父目录的ACL。而在Zookeeper中,znode的ACL是没有继承关系的,每个znode的权限都是独立控制的,只有客户端满足znode设置的权限要求时,才能完成相应的操作。Zookeeper的ACL,分为三个维度:scheme、id、permission,通常表示为:scheme:id:permission,schema代表授权策略,id代表用户,permission代表权限。
一、scheme
scheme既采取的授权策略,不同的策略对应不同的校验方式,下面是几种常见的scheme:
1、world
语法:world:anyone:cdrwa
创建节点默认的scheme,所有人都可以访问
2、digest
语法:digest:username:BASE64(SHA1(password)):cdrwa
digest:是授权方式
username:BASE64(SHA1(password)):是id部分
cdrwa:权限部份
用户名+密码授权访问方式,也是常用的一种授权策略。id部份是用户名和密码做sha1加密再做BASE64加密后的组合,比如设置一个节点的用户名为root,密码为123456,则表示方式为:
原:root:BASE64(SHA1(123456))
正确:root:u53OoA8hprX59uwFsvQBS3QuI00=。
密码加密需要用到zk的一个工具类来生成,
执行命令(执行位置在 lib下):java -cp zookeeper-3.7.0.jar:slf4j-api-1.7.30.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider root:123456
2、1设置权限
setAcl /ccc digest:root:u53OoA8hprX59uwFsvQBS3QuI00=:cdrwa
2、2给当前session添加权限
addauth digest root:123456
验证,退出当前session,还有没有权限
3、ip
基于客户端IP地址校验,限制只允许指定的客户端能操作znode。
比如,设置某个节点只允许IP为127.0.0.1的客户端能读写该写节点的数据:ip:127.0.0.1:rw
语法:setAcl /node ip:127.0.0.1:cdrwa
二、id
id是验证模式,不同的scheme,id的值也不一样。scheme为digest时,id的值为:username:BASE64(SHA1(password)),scheme为ip时,id的值为客户端的ip地址。scheme为world时,id的值为anyone。scheme为auth时,id为 username:password。
三、permission
znode可以拥有的权限还记得之前的授权语句,如:
digest:username:BASE64(SHA1(password)):cdrwa中的cdrwa即是permission。
CREATE(r):创建子节点的权限
DELETE(d):删除节点的权限
READ(r):读取节点数据的权限
WRITE(w):修改节点数据的权限
ADMIN(a):设置子节点权限的权限
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。