Zookeeper
什么是Zookeeper
Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
1、zookeeper是为别的分布式程序服务的
2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等
4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata);
并为用户程序提供数据节点监听服务;
启动单机
1.Zoolnspector文件
- 在里面创建一个data空文件夹
- 把conf里面的zoo....改成zoo.cfg
- 右键zoo.cfg以记事本打开,把data文件夹路径放里面
- 点击bin—zkServer.cmd和zkCli.cmd输入 ls /回车完成
Zookeeper说明
创建节点(znode) 方法:
create:
提供了两套创建节点的方法,同步和异步创建节点方式。
口
同步方式:
参数1,节点路径《名称) : InodeName (不允许递归创建节点,也就是说在父节点不存在
的情况下,不允许创建子节点)
参数2,节点内容: 要求类型是字节数组(也就是说,不支持序列化方式,如果需要实现序
列化,可使用java相关序列化框架,如Hessian、Kryo框架)
参數3,节点权限: 使用Ids.OPEN_ACL_UNSAFE开放权限即可。(这个参数一般在权展
没有太高要求的场景下,没必要关注)
参数4,节点类型: 创建节点的类型: CreateMode,提供四种首点象型
PERSISTENT(持久节点)
PERSISTENT SEQUENTIAL(持久顺序节点)
EPHEMERAL(临时节点)
EPHEMERAL SEQUENTAL(临时顺序节点)
- 引入依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
Zookeeper客户端连接
- 实现增删改查
private static final String ZK_ADDRESS="0.0.0.0:2181";
private static final Integer ZK_TIMEOUT=2000;
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
//连接zookeeper
//步骤一:创建zookeeper对象
/*
参数一:代表连接地址
*/
ZooKeeper zooKeeper=new ZooKeeper(ZK_ADDRESS, ZK_TIMEOUT, new Watcher() {
//连接方法
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println("成功建立连接!");
}
});
//创建节点
String result=zooKeeper.create("/zk01","zkvalue01".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("创建成功:"+result);
/* //更改节点
Stat stat = zooKeeper.setData("/zk01", "zkvalueset01".getBytes(), 0);
System.out.println("更改成功"+stat);*/
/*//获取节点
byte[] value = zooKeeper.getData("/zk01",false,new Stat());
System.out.println(new String(value,"UTF-8"));*/
/*//删除
zooKeeper.delete("/zk01",-1);*/
//关闭连接
zooKeeper.close();
}