zookeeper的访问

1 zookeeper的安装及配置

参考我的文章第5.1小结

2 命令行方式访问

help用法帮助
在这里插入图片描述

2.1 创建节点

语法格式
create [-s] [-e] path data acl

2.1.1 创建临时节点

create -e 路径 数据

create -e /my-ephemeral-node my-ephemeral-testdata

在这里插入图片描述
第二个客户端也能看到刚刚创建的临时节点
在这里插入图片描述
测试-e参数的临时性
关闭第一个客户端链接
在这里插入图片描述
关闭后从第二个客户端看不到临时节点啦
在这里插入图片描述

2.1.2 创建永久节点

create -e 路径 数据

create /my-persistent-node my-persistent-testdata

在这里插入图片描述

2.1.3 创建有序节点

create -s -e 路径 数据

create -s -e /my-sequential-node my-sequential-data1
create -s -e /my-sequential-node my-sequential-data2
create -s -e /my-sequential-node my-sequential-data3

在这里插入图片描述

2.1.4 acl访问控制

create -s -e 路径 数据 acl

acl的语法格式是 权限检验策略:用户:权限

  • 权限检验策略即scheme有五种类型:world、auth、digest、IP、super
  • 用户:可以通过addauth digest 用户:密码 任何人的话是anyone
  • 权限:crdwa,分别表示create,read,delete,write,admin
# 创建一个用户zhangsan,密码123456
addauth digest zhangsan:123456

# 创建一个用户lisi,密码123456
addauth digest lisi:123456

在这里插入图片描述

2.1.4.1 world策略

默认策略是world策略,固定用户是anyone,相当于全部都能访问

create /mynode mynode-testdata world:anyone:crdwa
delete /mynode

在这里插入图片描述

2.1.4.2 auth策略

auth检验策略表示给认证通过的所有用户设置acl权限

addauth digest zhangsan:123456
create /mynode mynode-testdata auth:zhangsan:crdwa
delete /mynode

在这里插入图片描述

另一个客户端需要添加相应用户才能链接
在这里插入图片描述

2.1.4.3 digest策略

与auth类似,但是auth只保证了用户名正确即可,digest可以把密码一起搭进去送命

@Test
public void testDigest() throws NoSuchAlgorithmException {

    String digest = DigestAuthenticationProvider.generateDigest("zhangsan:123456");
    System.out.println(digest);

}

在这里插入图片描述
把输出的字符串加到我们的用户中

create /mynode mynode-testdata digest:zhangsan:jA/7JI9gsuLp0ZQn5J5dcnDQkHA=:crdwa

在这里插入图片描述
另一个客户端链接不上,添加相应用户,并且密码经过digest算法换算后正确才能够访问
在这里插入图片描述

2.1.4.4 ip策略

指定ip进行访问

create /mynode mynode-testdata ip:192.168.245.210:crdwa

在这里插入图片描述
ip换成192.168.245.210就ok在这里插入图片描述

2.1.4.5 super策略

super策略指定的用户具有类似linux root用户的权限,可以操作任何znode节点

先产生个用户密码

    @Test
    public void testDigest() throws NoSuchAlgorithmException {

        String digest = DigestAuthenticationProvider.generateDigest("admin:123456");
        System.out.println(digest);

    }

在这里插入图片描述
zk启动是加入参数

-Dzookeeper.DigestAuthenticationProvider.superDigest=admin:0uek/hZ/V9fgiM35b0Z2226acMQ=

编辑启动脚本

cd /root/app/zookeeper-3.4.6/bin
# 直接跳转到110行进行编辑
vim +110 zkServer.sh

"-Dzookeeper.DigestAuthenticationProvider.superDigest=admin:0uek/hZ/V9fgiM35b0Z2226acMQ=" \

在这里插入图片描述
重启zk后,通过jinfo查看是否启动成功
在这里插入图片描述
测试
在node1的客户端创建一个znode
在这里插入图片描述
在第二个客户端,有两个可以访问刚刚添加的znode,一个是创建时指定的zhangsan:123456用户,另一个就是super 策略指定的admin用户
在这里插入图片描述

2.2. 获取节点信息

语法格式:
get path [watch]

get /my-ephemeral-node

在这里插入图片描述

2.3 修改节点的数据

语法格式:
set path data [version]

set  /my-ephemeral-node my-ephemeral-testdata-modified

set 后dataVersion+1
在这里插入图片描述
再set一次看看 dataVersioni再+1
在这里插入图片描述

2.4 删除节点

语法格式:
delete path [version]

在这里插入图片描述

3 java api方式

创建一个maven工程,在pom.xml文件中导入zookeeper依赖jar包

<!--junit依赖包-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<!--zookeeper依赖包-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.6</version>
</dependency>

3.1 创建节点

3.1.1 创建临时节点

public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/my-ephemeral-node";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // 创建临时节点
        zooKeeper.create(path, "my-ephemeral-testdata".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }
    
}

在这里插入图片描述
在这里插入图片描述

3.1.2 创建永久节点

public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/my-persistent-node";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // 创建永久节点
        zooKeeper.create(path, "my-persistent-testdata".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }

}

在这里插入图片描述

3.1.3 创建有序节点

public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/my-sequential-node";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // 创建有序节点
        zooKeeper.create(path, "my-sequential-data1".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
        zooKeeper.create(path, "my-sequential-data2".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
        zooKeeper.create(path, "my-sequential-data3".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }

}

在这里插入图片描述

3.1.4.1 world策略
public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/mynode";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // world
        zooKeeper.create(path, "mynode-testdata".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }

}

在这里插入图片描述
在这里插入图片描述

3.4.1.2 auth策略
public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/mynode";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // auth
        zooKeeper.addAuthInfo("digest","zhangsan:123456".getBytes());
        Id id = new Id();
        id.setId("zhangsan");
        id.setScheme("auth");
        ACL acl = new ACL();
        acl.setId(id);
        acl.setPerms(ZooDefs.Perms.ALL);
        List<ACL> acls = new ArrayList<>();
        acls.add(acl);
        zooKeeper.create(path, "mynode-testdata".getBytes(), acls, CreateMode.PERSISTENT);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }

}

在这里插入图片描述

3.4.1.3 digest策略
public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/mynode";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // digest
        Id id = new Id();
        id.setId("zhangsan:jA/7JI9gsuLp0ZQn5J5dcnDQkHA=");
        id.setScheme("digest");
        ACL acl = new ACL();
        acl.setId(id);
        acl.setPerms(ZooDefs.Perms.ALL);
        List<ACL> acls = new ArrayList<>();
        acls.add(acl);
        zooKeeper.create(path, "mynode-testdata".getBytes(), acls, CreateMode.PERSISTENT);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }

}

在这里插入图片描述
在这里插入图片描述

3.4.1.4 ip策略
public class TestZookeeper implements Watcher{

    public static ZooKeeper zooKeeper;

    @Test
    public void testCreate() throws IOException, KeeperException, InterruptedException {
        String path = "/mynode";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        // ip
        Id id = new Id();
        id.setId("192.168.245.210");
        id.setScheme("ip");
        ACL acl = new ACL();
        acl.setId(id);
        acl.setPerms(ZooDefs.Perms.ALL);
        List<ACL> acls = new ArrayList<>();
        acls.add(acl);
        zooKeeper.create(path, "mynode-testdata".getBytes(), acls, CreateMode.PERSISTENT);
    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeCreated == watchedEvent.getType()) {
                System.out.println("Node create success");
            }
        }
    }
}

在这里插入图片描述

zkCli.sh -server 192.168.245.210

在这里插入图片描述

3.4.1.5 super策略

老老实实参照命令行的把。。

3.2 获取节点信息

    @Test
    public void testGet() throws IOException, KeeperException, InterruptedException {
        String path = "/my-ephemeral-node";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        byte[] data = zooKeeper.getData(path, null, null);
        String result = new String(data);
        System.out.println(result);
    }

在这里插入图片描述

3.3 修改节点的数据

    @Test
    public void testUpdate() throws IOException, KeeperException, InterruptedException {
        String path = "/my-ephemeral-node";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.setData(path, "my-ephemeral-testdata-modified".getBytes(), -1);

        // 再次获取节点内容
        byte[] data = zooKeeper.getData(path, null, null);
        String result = new String(data);
        System.out.println(result);
    }

在这里插入图片描述

在这里插入图片描述

2.4 删除节点

    @Test
    public void testDelete() throws IOException, KeeperException, InterruptedException {
        String path = "/my-ephemeral-node";
        zooKeeper = new ZooKeeper("192.168.245.210:2181",60000, new TestZookeeper());
        zooKeeper.exists(path, true);
        zooKeeper.delete(path,-1);
    }

    @Override
    public void process(WatchedEvent watchedEvent) {
        if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
            if (Event.EventType.NodeDeleted == watchedEvent.getType()) {
                System.out.println("Node deleted");
            }
        }
    }

在这里插入图片描述
完整代码
https://gitee.com/bksnow/java-api-access-zookeeper

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值