一、Zookeeper的节点
1、持久节点 PERSISTENT
节点创建后就会一直存在,不会因客户端会话失效就删除
2、持久序顺序节点 PERSISTENT_SEQUENTIAL
特性与持久节点一样,只不过创建的时候,zookeeper会自动增加一个递增的数字作为节点名
3、临时节点 EPHEMERAL
客户端会话失效或者链接断开后,节点自动删除,且不能有子节点
4、临时顺序节点 EPHEMERAL_SEQUENTIAL
特性与临时节点一样,创建的时候,zookeeper会自动增加一个递增的数字作为节点名,一般用于分布式锁和leader选举
二、通知机制(watch)
客户端监听它关心的节点,当节点发生数据改变、被删除、增删子节点时,zookeeper会通知客户端。可以使用zookeeper的watch机制实现一个简单的发布订阅功能
三、权限控制(acl)
1、access controller lists
acl由三部分组成schema:id:permissions,schema表示某种权限机制world、ip、auth、digest。id表示允许访问的用户,permissions是权限组合字符串,crwda,表示create、read、write、delete、admin
2、权限控制方案schema
world:world下只有一个id,就是anyone,表示所有用户
ip:IP控制策略,使用客户端的ip地址作为id,可以设置ip段,例如:192.168.100.1/100
auth:不需要任何id,只要是通过auth的用户都有权限
digest:用户和密码的方式认证,使用username:BASE64(SHA1(password))作为id
sasl:id为用户的uid,通过sasl Authentication用户的id,在zk3.4.4版本后sasl是通过Kerberos实现(即只有通过Kerberos认证的用户才可以访问权限的znode)
3、权限示例
A、ip地址认证模式
IP地址认证模式会验证客户端来源的IP,根据IP来源分别是否有权限,示例如下
zkCli.sh -server 127.0.0.1:2181
create /test test_data
setAcl /test ip:192.168.24.14:crwda
当 get /test 时,此时已经没有权限
[zk: 127.0.0.1:2181(CONNECTED) 8] get /test
org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /test
通过另一种方式进入即可
zkCli.sh -server 192.168.24.14:2181
get /test
[zk: 192.168.24.14:2181(CONNECTED) 0] get /test
test_data
B、auth认证模式
不需要指定id,为当前连接中所有认证过的用户(登陆)授权,因为指不指定id都是为当前登陆的用户
addauth digest user1:user1
addauth digest user2:user2
create /test data auth::cdrwa
getAcl /test
返回如下:
'digest,'user1:oMOD60B8cRkgiY51xfdG0FFW3FI=
: cdrwa
'digest,'user2:ExK4ZEpM5XR9l8dLA7B6b79kLIo=
: cdrwa
C、digest模式
需要指定用户名和密码,只授权给指定的登陆用户,并且密码需要使用BASE64(SHA1(password))加密
在shell环境下,可以使用如下方式得到密码
echo -n horace:horace | openssl dgst -binary -sha1 | openssl base64
addauth digest horace:horace
create /test1 data digest:horace:W37bqnoLIAdZoDhHQatGel1g8gU=:cdrwa
getAcl /test1
四、目录配额(quota)
1、子节点限制
创建节点
create /path
查看配额
listquota /path
设置子节点数量
setquota -n 2 /path
创建子节点
create /path/a
create /path/b
create /path/c
超出会打印警告日志
Quota exceeded: /quota count=3 limit=2
2、节点数据大小限制
创建节点
create /path
查看配额
listquota /path
设置子节点数量
setquota -b 2 /path
set /path Horace
超出会打印警告日志
Quota exceeded: /quota bytes=6 limit=2
3、总结
所有的配额限制不会产生实际的作用,超出了会在zookeeper中打印日志,数据会被实际保存下来
注意:本文归作者所有,未经作者允许,不得转载