ZooKeeper集群管理
来源:互联网 发布:apche怎么使用php 编辑:程序博客网 时间:2024/06/05 00:39
ZooKeeper应用场景
1.数据订阅和发布
实现思路:
发布方注册一个节点/data
订阅节点监听这个/data 节点
只有节点发生变化,证明有新的数据产生,从而去获取数据
注意:不要在zookeeper上存储大量数据
2.分布式的协调通知(屏障)
实现思路:
注册一个节点/score
每个节点干完活之后,注册自己的子节点
排名节点判断数量是否满足,如果满足,开始排名工作
3.集群管理
实现思路:
每台机器注册临时节点,如果节点挂掉,是可以检测到的
4.集群的负载均衡
实现思路:
每台机器定时向zk服务集群通过自身的节点数据汇报负载情况,zk通过实施监控,从而做任 务分发,达到集群的负载均衡
5.实现分布式锁
实现思路:
多个节点同时抢注/park03 顺序节点,根据最小的顺序号来决定资源分配给谁。
客户端实现
final CountDownLatch cdl = new CountDownLatch(1);
ZooKeeper zk = new ZooKeeper(“192.168.1.61:2181”, 3000, new Watcher() {
@Override
public void process(WatchedEvent event) {
if (event.getState() == KeeperState.SyncConnected) {
System.out.println(“连接成功”);
cdl.countDown();
}
}});
cdl.await();
注意:Zookeeper这个方法是非阻塞方法,必须连接成功才能进行数据的传递,所以需要手动闭锁。
创建节点:
path:创建的路径名
data:存储的数据,要的是字节数组
acl:此节点的权限,Ids.OPEN_ACL_UNSAFE表示所有用户都可以操作此节点
createMode:节点类型:
EPHEMERAL:普通临时节点
EPHEMERAL_SEQUENTIAL:临时顺序节点
PERSISTENT:普通持久节点
PERSISTENT_SEQUENTIAL:持久顺序节点
zk.create(“/01”,”hellozk”.get PERSISTENT Bytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
获得节点数据:
path:指定路径
watch:观察者
Stat stat=new Stat();
byte[] data=zk.getData(“/park01”,null,null);
System.out.println(“数据为:”+new String(data));
System.err.println(stat);
节点数据更新:
path:
data:
version:数据版本号,用来更新数据的,注意,更新的版本号要和当前的版本号一直,否则更新不成功
此外,每成功进行一次写操作,数据版本号递增1
如果想无论如何都更新,忽略版本号,写-1
zk.setData(“/park01”,”helloZK”.getBytes(),-1);
得到当前结点的子节点:
List list=zk.getChildren(“/park01”,null);
for(String path:list){
System.out.println(path);
}
删除节点:
delete 只能删除为空的目录,假如有子节点,不能直接删除
zk.delete(“/park01”,-1);
持续监听节点是否更新:
for (;;) {
final CountDownLatch cdl1 = new CountDownLatch(1);
zk.getData(“/park01”, new Watcher() {
@Override
public void process(WatchedEvent event(闭锁会一直阻塞在这里知道获得值)) {
if (event.getType() == EventType.NodeDataChanged) {
System.out.println(“节点数据发生变化”);
cdl1.countDown();
}
}}, null);
cdl1.await();
}
CountDownLatch类,可以让线程一直等待,直到计数减为0。
监听创建并取得返回值:
// 删除 与 创建 EXISTS监听
zk.create(“/park04”,”helloworld”.getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL,new StringCallback() {
public void processResult(int rc, String path, Object ctx, String name) {
System.out.println(“rc:” + rc + “path:” + path + “ctx:” + ctx + “name:” + name);
}
}, “data”);
Rc:创建的状态码 0代表成功 -110代表失败
Path:节点的路径
Ctx:附件
Name:节点的名字
- Zookeeper 集群管理应用
- 利用zookeeper管理集群
- zookeeper--分布式集群管理
- zookeeper集群管理
- ZooKeeper集群管理
- ZooKeeper集群管理
- ZooKeeper应用场景-集群管理
- Zookeeper(五)集群管理
- ZooKeeper集群部署管理详细版
- Zookeeper管理多个HBase集群
- zookeeper集群管理配置优化总结
- 使用zookeeper管理多个hbase集群
- 使用zookeeper管理多个hbase集群
- ZooKeeper之(五)集群管理
- DUBBO服务管理配置Zookeeper集群服务
- 使用zookeeper管理多个hbase集群
- ZooKeeper之(五)集群管理
- 一步到位分布式开发Zookeeper实现集群管理
- 滴滴2016校招测评题(建水库问题)
- c 求字符串内无重复字符的最长子串
- [LeetCode]171. Excel Sheet Column Number(Excel表格列号)
- 【数据结构_堆_1098】堆的判断
- 2017腾讯基础研究岗位面试经历
- ZooKeeper集群管理
- 知名技术团队博客
- bing和on的绑定事件的区别小结
- bootstrap源码jQuery插件之button.js源码分析笔记
- SpringMVC注解(二)
- TCP阻塞控制
- 线程安全杂谈之ThreadLocal
- js内置对象之Number
- Hadoop集群安装步骤