搭建Zookeeper单机运行环境

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

搭建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,它的重要作用是在某个路径中存储内存中的快照数据,将内存中的数据长期化到该路径中,以便在宕机时可以将数据进行还原。
  1. 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
  1. ./zkServer.sh start
复制代码

检察zookeeper服务历程信息。ps -ef|grep zookeeper

zookeeper历程id是19038,如今执行如下命令:

   端口2181被zookeeper所占用。
  1.5 毗连zookeeper服务

在终端中使用如下命令毗连zookeeper服务。
  1. ./zkCli.sh -server 127.0.0.1:2181
复制代码

1.6 停止zookeeper服务

  1. ./zkServer.sh stop
复制代码

1.7 检察状态

  1. ./zkServer.sh status
复制代码

   检察zookeeper所有命令:
  在毗连到zookeeper服务后,再执行help命令检察zookeeper提供的命令列表,效果如下:
  

  1.8 使用create命令创建znode

使用create命令创建znode。

本文使用Curator来使用ZooKeeper服务器,Curator是Zookeeper的Java Client。
添加依赖:
  1.      <dependency>
  2.             <groupId>org.apache.curator</groupId>
  3.             <artifactId>curator-recipes</artifactId>
  4.             <version>5.6.0</version>
  5.      </dependency>
复制代码
创建常量类:
  1. public class ClientConstant {
  2.     public static final String IP="192.168.159.112";
  3.     public static final String port="2181";
  4. }
复制代码
测试代码如下:
  1. //create命令创建znode
  2. @Test
  3. void contextLoads() throws Exception {
  4.     String connectionString= ClientConstant.IP+":"+ClientConstant.port;
  5.     RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,3);
  6.     CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
  7.     client.start();
  8.     client.create().forPath("/a","avalue".getBytes(StandardCharsets.UTF_8));
  9.     client.close();
  10. }
复制代码

如果重复创建相同的path,则出现异常。可以使用checkExists()方法判断path是否存在,代码如下:
  1. //checkExists()判断path是否存在
  2. @Test
  3. public void checkPath() throws Exception {
  4.     String connectionString= ClientConstant.IP+":"+ClientConstant.port;
  5.     RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,3);
  6.     CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
  7.     client.start();
  8.     Stat stat = client.checkExists().forPath("/a");
  9.     if(stat==null){
  10.         client.create().forPath("/a","avalue".getBytes(StandardCharsets.UTF_8));
  11.     }else{
  12.         System.out.println("已经存在路径/a,不能重复创建");
  13.     }
  14. }
复制代码

1.9 使用ls命令检察所有子节点

刚刚创建的xttroot和a节点是在/根节点下:
  1. ls /
复制代码

测试代码如下:
  1. @Test
  2. public void testLS() throws Exception{
  3.     String connectionString= ClientConstant.IP+":"+ClientConstant.port;
  4.     RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,3);
  5.     CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
  6.     client.start();
  7.     List<String> childrenPath = client.getChildren().forPath("/");
  8.     childrenPath.forEach(System.out::println);
  9.     client.close();
  10. }
复制代码

1.10 使用get命令检察节点对应的值


   从运行效果来看,节点/zookeeper没有对应的值。
  测试代码如下:
  1. //get命令查看节点对应的值
  2. @Test
  3. public void testGet() throws Exception {
  4.     String connectionString= ClientConstant.IP+":"+ClientConstant.port;
  5.     RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,3);
  6.     CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
  7.     client.start();
  8.     System.out.println(new String(client.getData().forPath("/xttroot")));
  9.     System.out.println(new String(client.getData().forPath("/a")));
  10.     client.close();
  11. }
复制代码

1.11 使用set命令对节点设置新的值


  1. //set命令对节点设置新值
  2. @Test
  3. public void testSet() throws Exception {
  4.     String connectionString= ClientConstant.IP+":"+ClientConstant.port;
  5.     RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,3);
  6.     CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
  7.     client.start();
  8.     if(client.checkExists().forPath("/newNode")!=null){
  9.         client.delete().forPath("/newNode");
  10.     }
  11.     client.create().forPath("/newNode","oldNodeValue".getBytes(StandardCharsets.UTF_8));
  12.     System.out.println(new String(client.getData().forPath("/newNode")));
  13.     client.setData().forPath("/newNode","newNodeValue".getBytes(StandardCharsets.UTF_8));
  14.     System.out.println(new String(client.getData().forPath("/newNode")));
  15.     client.close();
  16. }
复制代码

1.12 使用delete命令删除节点


测试代码如下:
  1. //delete命令删除节点
  2. @Test
  3. public void testDelete() throws  Exception{
  4.     String connectionString= ClientConstant.IP+":"+ClientConstant.port;
  5.     RetryPolicy retryPolicy=new ExponentialBackoffRetry(1000,3);
  6.     CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
  7.     client.start();
  8.     if(client.checkExists().forPath("/newNode")!=null){
  9.         client.delete().forPath("/newNode");
  10.     }
  11.     client.create().forPath("/newNode","oldNodeValue".getBytes(StandardCharsets.UTF_8));
  12.     System.out.println(new String(client.getData().forPath("/newNode")));
  13.     client.delete().forPath("/newNode");
  14.     System.out.println(new String(client.getData().forPath("/newNode")));
  15.     client.close();
  16. }
复制代码

   节点不存在时会报异常。
    这些步调成功搭建了一个单机环境下的Zookeeper服务,并实现对节点进行CRUD使用。生产中肯定是集群了,所以写这个只是方便复习命令。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表