zoukankan      html  css  js  c++  java
  • zookeeper练习

    命令行操作

    配置环境变量:vi /etc/profile

    export ZOOKEEPER_HOME=/root/hd/zookeeper-3.4.10
    export PATH=$ZOOKEEPER_HOME/bin:$PATH

    声明环境变量:source /etc/profile
    发送到其他机器
    scp /etc/profile hsiehchou122:/etc/
    scp /etc/profile hsiehchou123:/etc/
    scp /etc/profile hsiehchou124:/etc/
    启动zookeeper
    zkServer.sh start
    查看zookeeper状态
    zkServer.sh status

    1)启动客户端
    bin/zkCli.sh

    2)连接其它机器客户端操作
    没有太大必要,每台机器内容都一样
    connect hsiehchou122:2181
    connect hsiehchou123:2181
    connect hsiehchou124:2181

    3)查看历史操作记录
    history

    4)查看当前节点的内容
    ls /

    5)存储:创建节点
    create /hsiehchou 10(存储的数据)

    6)查看节点的值
    get /hsiehchou

    10
    cZxid = 0x400000004
    ctime = Sat Feb 23 20:05:58 PST 2019
    mZxid = 0x400000004
    mtime = Sat Feb 23 20:05:58 PST 2019
    pZxid = 0x400000004
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0

    7)创建节点的可选项

    create [-s] [-e] path data acl

    [-p]永久节点–默认
    [-e] 短暂节点
    [-s] 带序号

    create -e /re hm
    注意:此时-e创建的是临时的短暂节点,退出客户端后消失。退出客户端:quit

    create -s /re hm
    注意:此时-s创建是带序号的节点,可以创建节点名相同的,序号依次累加

    [zk: localhost:2181(CONNECTED) 1] create -s /mm hm
    Created /mm0000000002
    [zk: localhost:2181(CONNECTED) 2] create -s /mm hm
    Created /mm0000000003
    [zk: localhost:2181(CONNECTED) 3] create -s /mm hm
    Created /mm0000000004
    [zk: localhost:2181(CONNECTED) 4] create /re hm
    Created /re
    [zk: localhost:2181(CONNECTED) 5] create /re hm
    Node already exists: /re

    创建短暂带序号节点
    create -e -s /tt bt

    8)修改节点值
    set path data [version]
    例如:set /re hm2 1
    [version] 版本
    注意:设置版本号 必须从0开始

    9)删除节点
    delete path
    [zk: localhost:2181(CONNECTED) 12] ls /
    [mm0000000004, re, zookeeper, mm0000000002, mm0000000003, hsiehchou]
    [zk: localhost:2181(CONNECTED) 13] delete /mm0000000002
    [zk: localhost:2181(CONNECTED) 14] ls /
    [mm0000000004, re, zookeeper, mm0000000003, hsiehchou]

    10)创建子节点
    create /re/pa qi

    11)递归删除
    rmr /re

    12)监听
    获得监听(文件):get path watch
    获得当前节点下增减变化(文件夹):ls path watch

    13)查看当前节点的状态
    stat /hsiehchou

    节点状态信息

    czxid:zookeeper事务id
    ctime:节点创建时间
    mZxid:最后更新的czxid
    mtime:最后修改的时间*
    pZxid:最后更新子节点的czxid
    cversion:子节点的变化号、子节点修改次数
    dataVersion:数据变化号
    aclVersion:访问控制列表的变化号
    ephemeralOwner:临时节点判断
    dataLength:节点数据长度
    numChildren:子节点个数

    JAVA-API 练习

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hsiehchou</groupId>
    <artifactId>ZKTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    <dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.10</version>
    </dependency>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>RELEASE</version>
    <scope>compile</scope>
    </dependency>
    </dependencies>
    </project>
    练习1

    ZkClient类

    package com.hsiehchou.zk;
    import org.apache.zookeeper.*;
    import org.apache.zookeeper.data.Stat;
    import org.junit.Before;
    import org.junit.Test;
    import java.io.IOException;
    import java.util.List;
    public class ZkClient {
    private String conected = "hsiehchou121:2181,hsiehchou122:2181,hsiehchou123:2181,hsiehchou124:2181";
    //毫秒
    private int timeout = 2000;
    ZooKeeper zkCli = null;
    //连接zookeeper集群
    @Before
    public void init() throws IOException {
    //String:连接集群的IP端口号,Int:超时设置,Watcher:监听
    zkCli = new ZooKeeper(conected, timeout, new Watcher() {
    //回调方法,显示/节点
    public void process(WatchedEvent watchedEvent) {
    List<String> children;
    //获得节点信息 get
    try {
    children = zkCli.getChildren("/",true);
    } catch (KeeperException e) {
    e.printStackTrace();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    });
    }
    //测试 是否连通集群 创建节点
    @Test
    public void createNode() throws KeeperException, InterruptedException {
    String p = zkCli.create("/bq", "sk".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    System.out.println(p);
    }
    //查看子节点
    @Test
    public void getChild() throws KeeperException, InterruptedException {
    List<String> children = zkCli.getChildren("/", true);
    for(String c:children){
    System.out.println(c);
    }
    }
    //删除子节点数据:delete path
    @Test
    public void deleteData() throws KeeperException, InterruptedException {
    zkCli.delete("/da", -1);
    }
    //修改数据:set path data
    @Test
    public void setData() throws KeeperException, InterruptedException {
    zkCli.setData("/hsiehchou","nihao".getBytes(),-1);
    //查看/hsiehchou
    byte[] data = zkCli.getData("/hsiehchou", false, new Stat());
    System.out.println(new String(data));
    }
    //指定节点是否存在
    @Test
    public void testExist() throws KeeperException, InterruptedException {
    Stat exists = zkCli.exists("/hsiehchou", false);
    System.out.println(exists == null ? "no have":"have");
    }
    }
    练习2

    WatchDemo类

    package com.hsiehchou.watch;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    import java.io.IOException;
    public class WatchDemo {
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
    String connected = "hsiehchou121:2181,hsiehchou122:2181,hsiehchou123:2181,hsiehchou124:2181,";
    //毫秒
    int timeout = 2000;
    //1.连接zookeeper集群
    ZooKeeper zkCli = new ZooKeeper(connected, timeout, new Watcher() {
    //监听回调
    public void process(WatchedEvent watchedEvent) {
    System.out.println("正在监听中.........");
    }
    });
    //2.监听: ls / watch get / watch
    zkCli.getChildren("/", new Watcher() {
    public void process(WatchedEvent watchedEvent) {
    System.out.println("此时监听的路径是:"+watchedEvent.getPath());
    System.out.println("此时监听的类型为:"+watchedEvent.getType());
    System.out.println("有人正在修改数据!!!");
    }
    },null);
    Thread.sleep(Long.MAX_VALUE);
    }
    }

    WatchDemo1类

    package com.hsiehchou.watch;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    import java.io.IOException;
    public class WatchDemo1 {
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
    ZooKeeper zkCli = new ZooKeeper("hsiehchou121:2181,hsiehchou122:2181,hsiehchou123:2181,hsiehchou124:2181", 2000, new Watcher() {
    public void process(WatchedEvent watchedEvent) {
    }
    });
    byte[] data = zkCli.getData("/re", new Watcher() {
    //具体监听的内容
    public void process(WatchedEvent watchedEvent) {
    System.out.println("此时监听的路径是:" + watchedEvent.getPath());
    System.out.println("此时监听的类型为:" + watchedEvent.getType());
    System.out.println("有人正在修改数据!!!");
    }
    }, null);
    System.out.println(new String(data));
    Thread.sleep(Long.MAX_VALUE);
    }
    }
    练习3

    ZkClient类

    package com.hsiehchou.qq;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    /**
    * 实现对zookeeper / 的监听
    */
    public class ZkClient {
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
    //1.获取zookeeper的连接
    ZkClient zkCli = new ZkClient();
    zkCli.getConnect();
    //2.指定监听的节点路径
    zkCli.getServers();
    //3.写业务逻辑,一直监听
    zkCli.getWatch();
    }
    //1.获得zookeeper连接
    private String connected = "hsiehchou121:2181,hsiehchou122:2181,hsiehchou123:2181,hsiehchou124:2181";
    //毫秒
    private int timeout = 2000;
    ZooKeeper zkCli;
    public void getConnect() throws IOException {
    zkCli = new ZooKeeper(connected, timeout, new Watcher() {
    public void process(WatchedEvent watchedEvent) {
    List<String> children;
    try {
    children = zkCli.getChildren("/", true);
    //服务器列表
    ArrayList<String> serverList = new ArrayList<String>();
    //获取每个节点的数据
    for (String c:children){
    byte[] data = zkCli.getData("/" + c, true, null);
    serverList.add(new String(data));
    }
    //查看服务器列表
    System.out.println(serverList);
    } catch (KeeperException e) {
    e.printStackTrace();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    });
    }
    //2.指定监听节点路径
    public void getServers() throws KeeperException, InterruptedException {
    List<String> children = zkCli.getChildren("/", true);
    //存储服务器列表
    ArrayList<String> serverList = new ArrayList<String>();
    for (String c:children){
    byte[] data = zkCli.getData("/" + c, true, null);
    //添加集合中
    serverList.add(new String(data));
    }
    //打印服务器列表
    System.out.println(serverList);
    }
    //3.一直监听
    public void getWatch() throws InterruptedException {
    //循环监听
    Thread.sleep(Long.MAX_VALUE);
    }
    }
  • 相关阅读:
    技术问答集录(二)(RPC和MVC框架&syn,lock区别)
    Zookeeper同一台机器集群部署
    Linux——JDK安装
    VirtualBox CentOs7 设置ssh连接

    ThreadLocal
    关于Centos 7上面的防火墙配置
    windows下使用命令行关闭进程
    强类型 弱类型语言 静态 动态语言
    无法启动此程序 ,因为计算机中丢失MSVCP120.dll
  • 原文地址:https://www.cnblogs.com/hsiehchou/p/10427596.html
Copyright © 2011-2022 走看看