ZooKeeper进阶笔记

  • 5. ZooKeeper工作原理
  • 6. ZooKeeper应用场景
  • 7. 访问控制ACL
  • 8 ACL访问控制列表
  • 8.1 为什么要用ACL
  • 8.2 何为ACL
  • 8.3 ACL种类
  • 8.4 如何设置ACL
  • 二、思考


5. ZooKeeper工作原理

  • ZooKeeper使用原子广播协议叫做Zab(ZooKeeper Automic Broadcast)协议
  • Zab协议有两种模式
  • 恢复模式(选主):因为ZooKeeper也是主从架构;当ZooKeeper集群没有主的角色leader时,从众多服务器中选举leader时,处于此模式
  • 广播模式(同步):当集群有了leader后,客户端向ZooKeeper集群读写数据时,集群处于此模式
  • 为了保证事务的顺序一致性,ZooKeeper采用了递增的事务id号(zxid)来标识事务,所有提议(proposal)都有zxid

6. ZooKeeper应用场景

  • ZooKeeper应用场景
  1. NameNode使用ZooKeeper实现高可用.
  2. Yarn ResourceManager使用ZooKeeper实现高可用.
  3. 利用ZooKeeper对HBase集群做高可用配置
  4. kafka使用ZooKeeper
  • 保存消息消费信息比如offset.
  • 用于检测崩溃
  • 主题topic发现
  • 保持主题的生产和消费状态

7. 访问控制ACL

  • 参考《访问控制ACL》

8 ACL访问控制列表

8.1 为什么要用ACL

zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题

8.2 何为ACL

ACL(Access Control List)可以设置某些客户端,对zookeeper服务器上节点的权限,如增删改查等

8.3 ACL种类

ZooKeeper 采用 ACL(Access Control Lists)策略来进行权限控制。ZooKeeper 定义了如下5种权限。

  • CREATE: 创建子节点的权限。
  • READ: 获取节点数据和子节点列表的权限。
  • WRITE:更新节点数据的权限。
  • DELETE: 删除子节点的权限。
  • ADMIN: 设置节点ACL的权限。

注意:CREATE 和 DELETE 都是针对子节点的权限控制。

8.4 如何设置ACL

  1. 五种权限简称
  • CREATE -> 增 -> c
  • READ -> 查 -> r
  • WRITE -> 改 -> w
  • DELETE -> 删 -> d
  • ADMIN -> 管理 -> a
  • 这5种权限简写为crwda
  1. 鉴权模式
  • world:默认方式,相当于全世界都能访问
  • auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
  • digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
  • ip:使用Ip地址认证
  1. 演示auth方式
# 1)增加一个认证用户
# addauth digest 用户名:密码明文
addauth digest wph:wph

# 2)设置权限
# setAcl /path auth:用户名:密码明文:权限
setAcl /zk_test auth:wph:wph:rw

# 3)查看ACL设置
getAcl /zk_test

二、思考

  1. 假设五台ZooKeeper服务器,分别为zk1,zk2,zk3,zk4,zk5,sid分别为1、2、3、4、5,依次启动zk1,zk2,zk3,zk4,zk5。问哪台是leader,为什么这台是leader?
  2. 同一个客户端同时发起多次请求操作时ZooKeeper内部是如何操作的?多个客户端同时发起多个请求时又是如何操作的?
  3. 自己编写代码,完成zookeeper原生API下的增加节点、删除节点、修改节点等操作;其中一个自定义的方法要用到监听器
  4. 使用curator API完成增加节点、删除节点、修改节点等操作;其中一个自定义的方法要用到监听器