权限控制模式
schema:授权对象
ip : 192.168.1.1
Digest : username:password
world : 开放式的权限控制模式,数据节点的访问权限对所有用户开放。 world:anyone
super :超级用户,可以对zookeeper上的数据节点进行操作
连接状态
KeeperStat.Expired 在一定时间内客户端没有收到服务器的通知, 则认为当前的会话已经过期了。
KeeperStat.Disconnected 断开连接的状态
KeeperStat.SyncConnected 客户端和服务器端在某一个节点上建立连接,并且完成一次version、zxid同步
KeeperStat.authFailed 授权失败
事件类型
NodeCreated 当节点被创建的时候,触发
NodeChildrenChanged 表示子节点被创建、被删除、子节点数据发生变化
NodeDataChanged 节点数据发生变化
NodeDeleted 节点被删除
None 客户端和服务器端连接状态发生变化的时候,事件类型就是None
curator
Curator本身是Netflix公司开源的zookeeper客户端;
curator提供了各种应用场景的实现封装
curator-framework 提供了fluent风格api
curator-replice 提供了实现封装
curator连接的重试策略
ExponentialBackoffRetry() 衰减重试
RetryNTimes 指定最大重试次数
RetryOneTime 仅重试一次
RetryUnitilElapsed 一直重试知道规定的时间
zookeeper的实际应用场景
zookeeper能够实现哪些场景
订阅发布
watcher机制
统一配置管理(disconf)
分布式锁
redis
zookeeper
数据库
负载均衡
ID生成器
分布式队列
统一命名服务
master选举
数据发布订阅/ 配置中心
实现配置信息的集中式管理和数据的动态更新
实现配置中心有两种模式:push 、pull。
长轮训
zookeeper采用的是推拉相结合的方式。 客户端向服务器端注册自己需要关注的节点。一旦节点数据发生变化,那么服务器端就会向客户端
发送watcher事件通知。客户端收到通知后,主动到服务器端获取更新后的数据
- 数据量比较小
- 数据内容在运行时会发生动态变更
- 集群中的各个机器共享配置
负载均衡
请求/数据分摊多个计算机单元上
分布式锁
通常实现分布式锁有几种方式
- redis。 setNX 存在则会返回0, 不存在
- 数据方式去实现
创建一个表, 通过索引唯一的方式
create table (id , methodname …) methodname增加唯一索引
insert 一条数据XXX delete 语句删除这条记录
mysql for update
- zookeeper实现
排他锁
共享锁(读锁)
实现共享锁,使用java api的方式 使用有序节点的特性进行处理
命名服务
master选举
7*24小时可用, 99.999%可用
master-slave模式
使用zookeeper解决