Zookeeper服务端的创建及简单的客户端创建节点

服务端创建

  服务端需要安装在linux系统上,这里以CentOS7为例。

  1、进入Zookeeper官网下载Zookeeper镜像。

  官网下载链接:http://mirror.bit.edu.cn/apache/zookeeper/

  建议选择最新版

  

  选择*********bin.tar.gz

  

 

  下载完成后是linux系统的压缩包gz包

  

  下载后.gz文件,上传到linux服务器中的/usr/local下

   

  解压安装

  命令: tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz 

  修改名字

  命令: mv apache-zookeeper-3.5.6-bin zookeeper-3.5.6

  进入解压后文件夹

  命令:cd /usr/local/zookeeper-3.5.6

  创建 data 和 log 文件夹

  命令:  # mkdir data

       # mkdir log

  进入conf文件夹

  命令:cd /usr/local/zookeeper-3.5.6/conf

   

  修改文件名字为zoo.cfg

  命令:mv zoo_sample.cfg zoo.cfg

  编辑zoo.cfg文件

  命令:vim zoo.cfg

  修改dataDir路径为:

  dataDir=/usr/local/zookeeper-3.5.6/data

  添加dataLogDir:

  dataLogDir=/usr/local/zookeeper-3.5.6/log

  保存并退出

  在路径 /usr/local/zookeeper-3.5.6下开启服务

  命令:bin/zkServer.sh start

   

   使用命令查询状态:bin/zkServer.sh status

   

 

客户端链接测试

  先下载Zookeeper可视化工具ZooInspector下面是下载链接:

  https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

  软件是压缩包形式解压后如下图

  打开build

   

  运行jar文件

    

  打开后如下图所示

  

   点击开始按钮(上图中红框内的按钮)

  输入:ip地址:端口号 比如 192.168.0.1:2181 默认端口号为2181 点击ok 首次链接等待时间较长(注意!如果首次链接ip地址输入错误,需要关闭软件重新连接)

  

  连接成功后如下图所示:wsl是作者创建的测试节点

  

java程序链接:

  首先引入所需依赖,maven依赖(或者找到相应jar包也可以)

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

  创建测试类

public class ZKDemo {
    /**
     * 连接URL
     */
    private static final String CONNECTSTRING = "localhost:2181";
    /**
     * SESSION超时时间
     */
    private static final int SESSIONTIMEOUT = 10000;
    /**
     * 计数器 构造一个用给定计数初始化的对象 参数int类型
     */
    private static CountDownLatch countDown = new CountDownLatch(1);
    /**
     * 创建ZooKeeper对象
     */
    static ZooKeeper zkClient = null;

    public static void init() throws Exception {
        /**
         * 参数1: 连接URL 参数2: Session超时时间 参数3: Watcher对象
         */
        zkClient = new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, new Watcher() {

            public void process(WatchedEvent event) {
                KeeperState state = event.getState();
                if (state == state.SyncConnected) {
                    System.out.println("连接成功!");
                    
                    // countDown()方法 countDown-1
                    countDown.countDown();
                } else {
                    System.out.println("链接失败!");
                }
                System.out.println(event.getType() + "---" + event.getPath());
            }

        });

        System.out.println("计数开始···");
        
        // await()方法 countDown为0时继续执行
        countDown.await();
        
        System.out.println("计数结束···");
        
        /**
         * 设置权限(访问规则)
         * 参数1:指权限类型
         *              world:任何人可以访问
         *              auth:通过验证后可以访问
         *              digest:通过账户密码访问
         *              url:固定url可以访问
         * 参数2:指用户名和密码 格式:username:password
         */
        Id id = new Id("digest",DigestAuthenticationProvider.generateDigest("username:password"));
        
        /**
         * 参数1:访问范围
         *      ALL:全部
         * 参数2:访问规则
         */
        ACL a = new ACL(Perms.ALL,id);
        
        //设置访问规则集合
        List<ACL> list = new ArrayList<ACL>();
        
        list.add(a);
        
        /**
         * 创建节点 
         *      参数1:节点名
         *      参数2:节点内容,需要转为字节
         *      参数3:权限
         *              Ids.OPEN_ACL_UNSAFE:标识节点的接入权限
         *              或者选择已经创建的List<ACL> 集合 list
         *      参数4:节点类型  瞬时指close后删除
         *              PERSISTENT:持久态
         *              PERSISTENT_SEQUENTIAL:持久序列化态
         *              EPHEMERAL:瞬时态
         *              EPHEMERAL_SEQUENTIAL:序列化瞬时态
         */
        String create = zkClient.create("/wsl", "hellozk".getBytes(), list, CreateMode.PERSISTENT);
        System.out.println(create);
        /**
         * 读取节点
         * 参数1:权限方式
         * 参数2:认证规则(账号密码)
         */
        zkClient.addAuthInfo("digest", "admin:123".getBytes());
        
        /**
         * 获取数据
         * 参数1:读取的路径
         * 参数2:watcher对象
         * 参数3:Stat对象
         */
        byte[] data = zkClient.getData("/wsl", null, new Stat());
        
        System.out.println(new String(data));
        
        // 关闭
        zkClient.close();
    }

    public static void main(String[] args) throws Exception {
        init();
    }

}
posted @ 2019-12-26 21:10  行路读书爱人i  阅读(850)  评论(0编辑  收藏  举报