搭建Zookeeper单机运行环境
搭建Zookeeper单机运行环境
1.1 下载Zookeeper
Zookeeper官方网址:http://zookeeper.apache.org。
点击download后选择版本下载即可。
1.2 创建zoo.cfg配置文件
在conf文件夹中自带一个名称为
zoo_sample.cfg
的配置文件,该配置文件是zookeeper的核心配置文件,与zookeeper有关的几乎所有配置都要在此文件中进行定义。
但zookeeper默认使用名称为
zoo.cfg
的配置文件,所以还要将
zoo_sample.cfg
改名为
zoo.cfg
。
配置zoo.cfg中的内容如下:
在大部分情况下,使用默认配置即可,但这里需要配置的选项是
dataDir
,它的主要作用是在某个路径中存储内存中的快照数据,将内存中的数据持久化到该路径中,以便在宕机时可以将数据进行还原。
dataDir=/usr/local/apache-zookeeper-3.8.4-bin/dataDir
该路径不要包含中文
1.3 核心配置选项tickTime、dataDir、clientPort
tickTime
:作为主从复制关系的zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔tickTime时间就发送一个心跳嗅探数据包给对方,探测一下对方的计算机是否正常工作。tickTime时间单位为毫秒。dataDir
:保存zookeeper内存数据的文件夹。clientPort
:这是提供给客户端连接zookeeper服务器的端口,
1.4 启动zookeeper服务
使用如下命令启动zookeeper
./zkServer.sh start
查看zookeeper服务进程信息。
ps -ef|grep zookeeper
zookeeper进程id是19038,现在执行如下命令:
端口2181被zookeeper所占用。
1.5 连接zookeeper服务
在终端中使用如下命令连接zookeeper服务。
./zkCli.sh -server 127.0.0.1:2181
1.6 停止zookeeper服务
./zkServer.sh stop
1.7 查看状态
./zkServer.sh status
查看zookeeper所有命令:
在连接到zookeeper服务后,再执行help命令查看zookeeper提供的命令列表,效果如下:
1.8 使用create命令创建znode
使用
create
命令创建znode。
本文使用
Curator
来操作ZooKeeper服务器,
Curator
是Zookeeper的Java Client。
添加依赖:
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.6.0</version></dependency>
创建常量类:
publicclassClientConstant{publicstaticfinalStringIP="192.168.159.112";publicstaticfinalString port="2181";}
测试代码如下:
//create命令创建znode@TestvoidcontextLoads()throwsException{String connectionString=ClientConstant.IP+":"+ClientConstant.port;RetryPolicy retryPolicy=newExponentialBackoffRetry(1000,3);CuratorFramework client =CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();
client.create().forPath("/a","avalue".getBytes(StandardCharsets.UTF_8));
client.close();}
如果重复创建相同的path,则出现异常。可以使用
checkExists()
方法判断path是否存在,代码如下:
//checkExists()判断path是否存在@TestpublicvoidcheckPath()throwsException{String connectionString=ClientConstant.IP+":"+ClientConstant.port;RetryPolicy retryPolicy=newExponentialBackoffRetry(1000,3);CuratorFramework client =CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();Stat stat = client.checkExists().forPath("/a");if(stat==null){
client.create().forPath("/a","avalue".getBytes(StandardCharsets.UTF_8));}else{System.out.println("已经存在路径/a,不能重复创建");}}
1.9 使用ls命令查看所有子节点
刚刚创建的xttroot和a节点是在
/
根节点下:
ls /
测试代码如下:
@TestpublicvoidtestLS()throwsException{String connectionString=ClientConstant.IP+":"+ClientConstant.port;RetryPolicy retryPolicy=newExponentialBackoffRetry(1000,3);CuratorFramework client =CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();List<String> childrenPath = client.getChildren().forPath("/");
childrenPath.forEach(System.out::println);
client.close();}
1.10 使用get命令查看节点对应的值
从运行结果来看,节点
/zookeeper
没有对应的值。
测试代码如下:
//get命令查看节点对应的值@TestpublicvoidtestGet()throwsException{String connectionString=ClientConstant.IP+":"+ClientConstant.port;RetryPolicy retryPolicy=newExponentialBackoffRetry(1000,3);CuratorFramework client =CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();System.out.println(newString(client.getData().forPath("/xttroot")));System.out.println(newString(client.getData().forPath("/a")));
client.close();}
1.11 使用set命令对节点设置新的值
//set命令对节点设置新值@TestpublicvoidtestSet()throwsException{String connectionString=ClientConstant.IP+":"+ClientConstant.port;RetryPolicy retryPolicy=newExponentialBackoffRetry(1000,3);CuratorFramework client =CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();if(client.checkExists().forPath("/newNode")!=null){
client.delete().forPath("/newNode");}
client.create().forPath("/newNode","oldNodeValue".getBytes(StandardCharsets.UTF_8));System.out.println(newString(client.getData().forPath("/newNode")));
client.setData().forPath("/newNode","newNodeValue".getBytes(StandardCharsets.UTF_8));System.out.println(newString(client.getData().forPath("/newNode")));
client.close();}
1.12 使用delete命令删除节点
测试代码如下:
//delete命令删除节点@TestpublicvoidtestDelete()throwsException{String connectionString=ClientConstant.IP+":"+ClientConstant.port;RetryPolicy retryPolicy=newExponentialBackoffRetry(1000,3);CuratorFramework client =CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();if(client.checkExists().forPath("/newNode")!=null){
client.delete().forPath("/newNode");}
client.create().forPath("/newNode","oldNodeValue".getBytes(StandardCharsets.UTF_8));System.out.println(newString(client.getData().forPath("/newNode")));
client.delete().forPath("/newNode");System.out.println(newString(client.getData().forPath("/newNode")));
client.close();}
节点不存在时会报异常。
这些步骤成功搭建了一个单机环境下的Zookeeper服务,并实现对节点进行CRUD操作。生产中肯定是集群了,所以写这个只是方便复习命令。
版权归原作者 别团等shy哥发育 所有, 如有侵权,请联系我们删除。