Zookeeper 特性

Zookeeper 特性

  • 会话(session)
    客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输
  • 数据节点(znode)
  • 版本
  • Watcher
    事件监听器,客户端可以在节点上注册监听器,当特定的事件发生后,zk会通知到感兴趣的客户端;eventType: NodeCreated、NodeDeleted、NodeDataChanged、NodeChildrenChange
  • ACL
    Zk采用ACL(access control lists)策略来控制权限,5中权限:create、read,write,delete,admin
  • 集群角色

会话(session)

客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输
会话

Zookeeper数据模型

ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”。

  • 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。
  • 通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。

Zookeeper节点类型

  • 持久节点(PERSISTENT)
  • 持久顺序节点(PERSISTENT_SEQUENTIAL)
  • 临时节点(EPHEMERAL)
  • 临时顺序节点(EPHEMERAL_SEQUENTIAL)

持久节点和临时节点的区别:

  • 持久节点:客户点链接断开后,数据(znode)还在
  • 临时节点:客户点链接断开后,数据(znode)不在

对于持久节点和临时节点,同一个znode下,节点的名称是唯一的!这是实现分布式锁的基础。顺序节点(带序号)不会报错。
临时节点下面不能创建节点。

Zookeeper节点状态属性

属性 类型 作用
czxid long 节点被创建的Zxid值
mzxid long 节点被修改的Zxid值
pzxid long 子节点最有一次被修改时的事务ID
ctime long 节点被创建的时间
mtime long 节点最后一次被修改的时间
dataVersion long 节点被修改的版本号
cversion long 节点的所拥有子节点被修改的版本号
aclVersion long 节点的ACL被修改的版本号
emphemeralOwner long 如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0
dataLength int 节点数据域的长度
numChildren int 节点拥有的子节点个数
  • 事务ID可以识别出请求的全局顺序:czxid mzxid pzxid
  • 基于CAS理论保证分布式数据原子性操作:dataVersion cversion aclVersion

ACL保障数据的安全

[zk: localhost:2181(CONNECTED) 18] getAcl /node1
'world,'anyone
: cdrwa

ACL机制,表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等)。
scheme:授权的策略;id:用户授权;permission:权限。

scheme:授权的策略

zookeeper提供了如下几种机制(scheme):

  • 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段

world是默认方式,谁都能访问。auth和digest都要通过 用户名:密码 的方式认证,auth是明文,digest是密文。

id:验证模式

不同的 scheme 验证方式不一样。

  • world: anyone
  • auth: username:password(明文)
  • digest: username:password(BASE64(SHA1))
  • ip: 限制链接的客户端 IP

permission:权限

cdrwa:

  • create(c):是否有创建节点的权限
  • detete(d):是否有删除节点的权限
  • read(r):是否有读取数据的权限
  • write(w):是否有修改节点数据的权限
  • admin(a):是否有给字节的设置权限的权限

`

posted @ 2021-01-09 15:17  qianbuhan  阅读(286)  评论(0)    收藏  举报