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应用场景
- NameNode使用ZooKeeper实现高可用.
- Yarn ResourceManager使用ZooKeeper实现高可用.
- 利用ZooKeeper对HBase集群做高可用配置
- 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
- 五种权限简称
- CREATE -> 增 -> c
- READ -> 查 -> r
- WRITE -> 改 -> w
- DELETE -> 删 -> d
- ADMIN -> 管理 -> a
- 这5种权限简写为crwda
- 鉴权模式
- world:默认方式,相当于全世界都能访问
- auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
- digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
- ip:使用Ip地址认证
- 演示auth方式
# 1)增加一个认证用户
# addauth digest 用户名:密码明文
addauth digest wph:wph
# 2)设置权限
# setAcl /path auth:用户名:密码明文:权限
setAcl /zk_test auth:wph:wph:rw
# 3)查看ACL设置
getAcl /zk_test
二、思考
- 假设五台ZooKeeper服务器,分别为zk1,zk2,zk3,zk4,zk5,sid分别为1、2、3、4、5,依次启动zk1,zk2,zk3,zk4,zk5。问哪台是leader,为什么这台是leader?
- 同一个客户端同时发起多次请求操作时ZooKeeper内部是如何操作的?多个客户端同时发起多个请求时又是如何操作的?
- 自己编写代码,完成zookeeper原生API下的增加节点、删除节点、修改节点等操作;其中一个自定义的方法要用到监听器
- 使用curator API完成增加节点、删除节点、修改节点等操作;其中一个自定义的方法要用到监听器