Zookeeper介绍和节点的操作 (一)

一、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

 

 

 

 

 

 

 

 

 

                                                                                                       

 

posted @ 2020-04-21 19:23  AlexZS  Views(2435)  Comments(0Edit  收藏  举报