zookeeper

1、上传安装包到集群服务器

2、解压

3、修改配置文件

进入zookeeper的安装目录的conf目录

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

 

配置文件里改

# The number of milliseconds of each tick

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/root/zkdata

clientPort=2181

 

#autopurge.purgeInterval=1

server.1=ip号:2888:3888

server.2=ip号:2888:3888

server.3=ip号:2888:3888

 

对3台节点,都创建目录 mkdir /root/zkdata 存放数据

对3台节点,在/root/zkdata目录中生成myid文件,内容分别为各自的id: 1,2,3

hdp20-01上:  echo 1 > /root/zkdata/myid

hdp20-02上:  echo 2 > /root/zkdata/myid

hdp20-03上:  echo 3 > /root/zkdata/myid

 

从配置好的服务器上scp安装目录到其他两个节点

scp -r zookeeper-3.4.6/ 第二台ip号:$PWD

scp -r zookeeper-3.4.6/ 第三台ip号:$PWD

 

 

启动zookeeper集群

zookeeper没有提供自动批量启动脚本,需要手动一台一台地起zookeeper进程

在每一台节点上的zookeeper目录下的bin目录下,运行命令:

/zkServer.sh start

 

启动后,用jps应该能看到一个进程:QuorumPeerMain

但是,光有进程不代表zk已经正常服务,需要用命令检查状态:

 

在每一台节点上的zookeeper目录下的bin目录下,运行命令:

./zkServer.sh status

能看到角色模式:为leader或follower,即正常了。

 

 

 

public class Zktest {
    ZooKeeper zooKeeper=null;
    @Before
    public void init() throws Exception {
        zooKeeper=new ZooKeeper("192.168.26.41,192.168.26.42,192.168.26.43",1000,null);
    }

    /**
     * 创建节点
     * @throws Exception
     */
    @Test
    public void create() throws Exception {
        /**
         * 参数一  key
         * 参数2  value
         * 参数3 访问权限  ZooDefs.Ids.OPEN_ACL_UNSAFE 完全开发权限 任何客户端都可以访问
         * CREATOR_ALL_ACL 只有创建者有acl权限
         * READ_ACL_UNSAFE 只能读
         * 参数4  CreateMode.PERSISTENT
         */
        String s = zooKeeper.create("/cat", "ela".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(s);
    }

    /**
     * 更新节点
     * @throws Exception
     */
    @Test
    public void setNode() throws Exception {
        Stat stat = zooKeeper.setData("/dog", "狗".getBytes(), -1);
        System.out.println(stat.getAversion());
    }

    @Test
    public void get() throws Exception {
        /**
         * 1. 节点路径
         * 2. 是否要监听
         * 3. null  最新的版本
         */
        Stat stat = new Stat();
        stat.setVersion(1);
        byte[] data = zooKeeper.getData("/dog", false, stat);
        String str = new String(data,"utf-8");
        System.out.println(str);
    }

    @Test
    public void listnode() throws KeeperException, InterruptedException {

        List<String> children = zooKeeper.getChildren("/a/b", null);

        for (String child : children) {
            System.out.println(child);
        }
    }
    @After
    public void after() throws InterruptedException {
        zooKeeper.close();
    }

 

  

 

 

public class WatchTest {
    ZooKeeper zooKeeper = null;

    @Before
    public void init() throws Exception {
        zooKeeper = new ZooKeeper("192.168.26.41:2181,192.168.26.42:2181,192.168.26.43:2181",
                10000, new Watcher() {
            public void process(WatchedEvent event) {//事件
                if (event.getType() == Event.EventType.NodeDataChanged) {
                    System.out.println("mysql的数据库的地址发生了改变。。。。。。。。");
                    try {
                        byte[] data = zooKeeper.getData("/mysql", true, null);
                        String str = new String(data, "UTF-8");
                        System.out.println("新数据=================");
                        System.out.println(str);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if(event.getType() == Event.EventType.NodeChildrenChanged){
                    System.out.println("*********** 子节点改变");
                    List<String> children = null;
                    try {
                        children = zooKeeper.getChildren("/a/b", true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println("================================");
                    for (String child : children) {
                        System.out.println(child);
                    }
                }

            }
        });
    }


    @Test
    public void get() throws Exception{
        byte[] data = zooKeeper.getData("/mysql", true, null);
        List<String> children = zooKeeper.getChildren("/a", true);
        String str = new String(data, "UTF-8");
        System.out.println(str);
        System.out.println("开始监听了数据拿到了");
        Thread.sleep(Long.MAX_VALUE);
    }
}

 

posted @ 2020-08-19 10:02  neona  阅读(126)  评论(0编辑  收藏  举报