zoukankan      html  css  js  c++  java
  • zookeeper基础

    Zookeeper安装

    ​ 1、安装jdk并配置java环境

    ​ 2、下载并解压zookeeper

    tar -zxvf  apache-zookeeper-3.7.0-bin.tar.gz(根据下载的版本号不同包名不同)
    

    ​ 3、重命名配置文件

    cp zoo_sample.cfg  zoo.cfg (zoo_sample.cfg是一个模板文件,zookeeper默认找zoo.cfg)
    

    ​ 4、启动zookeeper

    ​ 进入zookeeper的bin目录:

    zkServer.sh start
    

    ​ 5、用zookeeper客户端连接服务端

    zkCli.sh [-server ip:2181]
    

    zookeeper节点类型

    • PERSISTENT-持久目录节点

      ​ 客户端与zookeeper断开连接后节点依然存在

    • EPHEMERAL-临时目录节点

      ​ 客户端断开该节点被删除(如检测上线状态功能)

    • PERSISTENT_SEQUENTIAL-持久化顺序节点

    • EPHEMERAL_SEQUENTIAL -临时顺序节点

    Zookeeper使用

    ​ 1、查看节点(必须跟上路径)

    ls /
    

    ​ 2、创建节点并存入数据(创建节点时指定数据)

    create /zkNode dataStr 创建节点并存入数据(持久节点)
    create -s /znNode1 创建顺序节点,会在节点名称后更少顺序号(持久顺序节点)
    create -e /ephemeral  创建临时节点(对话结束时自动删除)
    

    acl:权限,定义什么用户能够操作该节点,,能做什么操作。

    3、修改节点数据

    set  /zkNode dataUpdate
    

    4、获取数据

    get /zkNode  只查看数据
    get -s /zkNode  加-s查询节点详细信息
    

    5、删除节点(如果存在子节点则不能删除)

    delete  /zkNode
    

    监听通知机制

    采用java代码实现

    maven引入依赖

    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.5.5</version>
    </dependency>
    

    监听代码

    public class ZookeeperProSync implements Watcher {
        private static CountDownLatch connectedSemaphore=new CountDownLatch(1);
        private static ZooKeeper zk=null;
        private static Stat stat=new Stat();
    
        public static void main(String[] args) throws Exception
        {
            String path="/jianting";
            zk=new ZooKeeper("ip:端口",5000,new ZookeeperProSync());
            connectedSemaphore.await();
            System.out.println(new String(zk.getData(path, true, stat)));
            Thread.sleep(Integer.MAX_VALUE);
        }
        @Override
        public void process(WatchedEvent event) {
            if (event.getState() == KeeperState.SyncConnected)
            {
                if(EventType.None==event.getType()&&null==event.getPath()) {
                    System.out.println("连接成功");
                    connectedSemaphore.countDown();
                }
                if(event.getType()==EventType.NodeDataChanged) {
                    System.out.println("数据已经修改");
                    try {
                        System.out.println(new String(zk.getData(event.getPath(), true,stat)));
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    集群搭建

    如果只有一台服务器可搭建伪集群

    1、将配置文件zoo.cfg复制三份

    ​ zoo-1.cfg zoo-2.cfg zoo-3.cfg

    2、修改每个配置文件的端口及数据存在路径,保证三个不一样即可。

    ​ tickTime=2000 时间心跳

    ​ initLimit=10 当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。表示10个心跳,即10*2000

    ​ syncLimit=5 ollower和leader之间发送消息,请求和应答的最大时间长度。表示5个心跳

    ​ dataDir 数据存放目录。集群模式下该文件夹下需要一个myid文件,文件内容为一个1-255之间的数字,这个数字为下方server.id中的id,表示zk进程的id

    server.1=ip1:port1:port2
    server.2=ip2:port3:port4
    server.3=ip3:port5:port6
    

    3、创建myid文件在配置文件的dataDir配置的目录下

    4、启动集群

    ​ zkServer start zoo1文件地址

    ​ zkServer start zoo2文件地址

    ​ zkServer start zoo3文件地址

    5、查看状态

    ​ zkServer status zoo1文件地址

    ​ zkServer status zoo2文件地址

    ​ zkServer status zoo3文件地址

  • 相关阅读:
    [数据结构]线性表
    对C语言中指针的一些新认识
    Qt做动画旋转旋转图片
    延时程序执行Qt
    关于部分网页打不可的问题
    关于QString中的arg()函数使用方法
    Qt5.3.0 for Android开发环境配置
    QMenu,contextmenuevent,窗体透明
    Qt自定义窗体,边框,圆角窗体
    一个良好的团队
  • 原文地址:https://www.cnblogs.com/puxuebing/p/15698401.html
Copyright © 2011-2022 走看看