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(); } }