zoukankan      html  css  js  c++  java
  • 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

                                                                                                           

  • 相关阅读:
    wx.showToast 延时跳转~~~
    wx.request 获取不到post传递的值
    G,sql中select 如果太长,可以在后面放G,竖行显示~~~~
    用for语句从数组中剔除数据,注意,count,要放到for语句之外才行
    读代码还是读文档,来自知乎
    聊聊我对写好程序的认识
    open() 函数以 r+ 模式打开文件
    open()
    Python 流程控制:while
    Python 序列
  • 原文地址:https://www.cnblogs.com/alomsc/p/12747224.html
Copyright © 2011-2022 走看看