zookeeper一致性协议Zab

简介:
主要是用来维护和监控一个目录节点树中存储的数据的状态(维护一致性)


Path类型:
- PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;
- PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加
1,然后返回给客户端已经成功创建的目录节点名;
- EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除;
- EPHEMERAL_SEQUENTIAL:临时自动编号节点

目录节点 ACL(访问权限):
ALL、READ、WRITE、CREATE、DELETE、ADMIN
注:Zookeeper 中的目录节点权限不具有传递性,父目录节点的权限不能传递给子目录节点

标识了访问目录节点的身份列表(id):
默认:ANYONE_ID_UNSAFE = new Id("world", "anyone") 和 AUTH_IDS = new Id("auth", "") 分别表示任何人都可以访问和创建者拥有访问权限

Watcher 观察者模式
可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher KeeperState:
Disconnected
NoSyncConnected
SyncConnected
AuthFailed
ConnectedReadOnly
SaslAuthenticated
Expired
EventType node变更
None
NodeCreated
NodeDeleted NodeDataChanged,就算设置重复的数据也会有该事件
NodeChildrenChanged
AsyncCallback
DataCallback getData
ACLCallback setACL
ChildrenCallback getChildren
StatCallback exisit
StringCallback
VoidCallback
Children2Callback

Zookeeper一致性协议Zab,保证应用程序的HA和一致性
同类算法:分布式一致性算法(二阶段提交、paxos算法、raft算法)

场景使用:

  • 存储公共配置信息

1.集群中A机器创建一个PERSISTENT类型的/data目录,如下:zk.create("/testRootPath", "testRootData".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

2.其他机器在getData的时候添加watcher监控,一旦/data节点下的数据发送变化,则zookeeper服务器通知所有注册上来的观察者,回调它们的watcher方法,从而实现配置统一

  • 集群管理

1.master创建一个root节点,并且调用getChild(“/root”,true)方法,设置对root目录子节点的监控

2.datanode create 一个EPHEMERAL节点

3.触发master的Watcher process方法调用,在Globl配置中添加datanode ip或其他信息

  • master选主

由于master可能要做些特别的事情,比如发放任务给task节点,那么如何选出一台master节点(每台机器创建一个EPHEMERAL_SEQUENTIAL节点,然后zookeeper把seq最低的节点选举为master,当节点断开后,再从中选seq最低的节点为master)

  • 提供分布式同步支持(分布式锁等功能)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值