一、zookeeper /ˈzuːkiːpə(r)/ 介绍
它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper包含一个简单的原语集,提供Java和C的接口。
简单来说 zookeeper=文件系统+监听通知机制
1、Znode节点(不可能会重名)
1.1 什么是节点
代表一个服务的名称,就是服务实例描述的抽象。
2.1 Znode
znode 是一个跟 Unix 文件系统路径相似的节点,可以往这个节点存储 或获取数据。 Zookeeper 底层是一套数据结构。这个存储结构是一个树形结构,其上的每一个节点, 我们称之为“znode” zookeeper 中的数据是按照“树”结构进行存储的。而且 znode 节点还分为 4 中不同的类 型。 每一个 znode 默认能够存储 1MB 的数据(对于记录状态性质的数据来说,够了) 可以使用 zkCli 命令,登录到 zookeeper 上,并通过 ls、create、delete、get、set 等命令 操作这些 znode 节点.
(节点路径 key) ,节点数据 (value)
key == / + key名称
value== 数据(服务的实际地址)
key == value 一对一关系
2.2 Zonde 操作(create,set,delete,deleteall,get,rmr)(key,value)
客户端
1.命令行
1.1 创建节点 (almosc 是自己随意取的名字),不可以重复创建,一个节点只能对应一个
creat /alomsc "localhost:8080"
1.2 查询节点
get /alomsc
1.3 修改节点
set /alomsc "localhost:8090"
1.4删除节点
rmr /alomsc -- 删除当前节点和所有的子节点
delete/alomsc -- 只能删除没有子节点的节点
1.5创建子节点 --在alomsc下创建子节点
create /alomsc/child "childName"
节点类型:
持久化节点(存储在磁盘上,必须通过rmr,delete,deleteall 来进行删除)
临时节点 (存储在内存,删除可以手动,zookeeper关闭的时候也会删除)
顺序节点 (创建节点的时候会添加顺序)--常见分布式锁
创建临时节点,另外临时节点是不允许有子节点的
create -e /alomsc "temporary"
创建顺序节点,顺序节点下面是可以有子节点的
create -s /alomsc "sequence"
节点版本号:
version:节点(set,delete)
为什么会出现版本号的原因:
其原因和java中线程锁的原理差不多,防止有多个客户端对同一个节点操作产生错误。
2.java api (修改的时候根据的版本号要根据最新的版本号)
String path ="localhost:2181"; // 启动java客户端 5000是超时时间 ZooKeeper zooKeeper = new ZooKeeper(path, 5000, new Watcher() { @Override public void process(WatchedEvent watchedEvent) { Event.KeeperState state = watchedEvent.getState(); System.out.println(state.toString()); } }); byte[] data = "localhots:8099".getBytes(); // 创建 // zooKeeper.create("/alomsc",data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); System.out.println("success"); // 获取版本号 Stat stat = zooKeeper.exists("/alex",true); // 修改 ,返回当前版本号 Stat stat1 = zooKeeper.setData("/alex", data, stat.getVersion()); System.out.println("版本号:"+stat.getVersion()); System.out.println("版本号2:"+stat1.getVersion()); // 删除 // zooKeeper.delete("/almosc000000004",0);
ls / 列出根目录节点下的所有文件 改目录下有两个节点
stat /zookeeper 查看节点状态
zookeeper 是节点名称
[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
cZxid:创建节点时的事务id
pZxid:子节点列表最后一次被修改的事务id
cversion:节点版本号
dataCersion:数据版本号
aclVerson:acl权限版本号
3.zkClien
4.aurator