0


Zookeeper 一、介绍与使用

Zookeeper 介绍与使用

zookeeper是什么

是分布式协调框架,主要解决分布式应用中的数据问题:

  • 统一命名服务
  • 状态同步
  • 集群管理
  • 健康检查
  • 分布式应用配置等

可以把zookeeper当成一个数据库,不过存储的数量少,并且是基于内存的数据库。

两个核心概念:文件系统数据结构,监听通知机制

安装

  1. # 检查java环境
  2. java -version
  3. # 下载解压zookeeperwget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper‐3.6.3/apache‐zookeeper‐3.6.3‐bin.tar.gz
  4. tar zxvf apachezookeeper3.6.3bin.tar.gz
  5. cd apachezookeeper3.6.8bin
  6. # 重命名配置文件cp zoo_sample.cfg zoo.cfg
  7. # 启动zookeepercd../bin
  8. ./zkServer.sh start
  9. # 检查是否启动成功
  10. ./zkServer.sh status
  11. #ZooKeeper JMX enabled by default#Using config: /data/zookeeper/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg#Client port found: 2181. Client address: localhost.#Mode: standalone# 客户端连接
  12. ./zkCli.sh

文件系统数据结构

zookeeper文件存储结构类似linux文件系统,每个节点既是一个目录,节点下可以拥有数据部分和子节点

  1. 持久化目录节点 PERSISTENT客户端zk断开连接之后,节点仍然会存在。只要不删除就一直会存在# 创建持久化目录节点 不带任何参数,默认创建持久化节点。节点必须目录必须使用绝对路径create /aaa 123#创建持久化节点/aaa 值是123get /aaa #获取/aaa 节点的值set /aaa 456#修改/aaa 节点的值delete /aaa #删除/aaa 节点。如果节点下有子节点,是不能删除的create /aaa/bbb 456#创建/aaa的子节点bbb 值是456create /aaa/ccc 456 create /aaa/bbb/ddd 456ls /aaa #查看/aaa 下的子节点列表ls -R /aaa #递归查看/aaa 下的子节点列表deleteall /aaa #删除/aaa节点及所有子节点
  2. 持久化顺序编号目录节点 PERSISTENT_SEQUENTIAL创建顺序节点默认会创建一个编号,顺序递增[zk: localhost:2181(CONNECTED)16] create /ssCreated /ss[zk: localhost:2181(CONNECTED)17] create -s /ss/ss 123Created /ss/ss0000000000[zk: localhost:2181(CONNECTED)18] create -s /ss/ss 456Created /ss/ss0000000001[zk: localhost:2181(CONNECTED)19] create -s /ss/ss 789Created /ss/ss0000000002[zk: localhost:2181(CONNECTED)20] create -s /ss/ss 1000Created /ss/ss0000000003[zk: localhost:2181(CONNECTED)21] create /ss
  3. 临时目录节点 EPHEMERAL当客户端主动和zk主动断开连接之后,会立刻删除临时节点。临时节点下不可以创建新的节点create -e /eee 123create /aaacreate -e /aaa/eee #在持久化节点/aaa 创建临时节点eee
  4. 临时顺序编号目录节点 EPHEMERAL_SEQUENTIAL和持久化顺序节点类似
  5. 容器节点 Container如果容器节点下新增子节点并且删除,zk会有个定时任务(默认60s检查一次),清除容器节点create -c /ccc
  6. TTL节点默认禁用,启动时增加配置zookeeper.extendedTypesEnabled=true,指定时间内没有修改节点数据,就会被清除,但不稳定

节点状态 stat /aaa

  1. cZxid:创建znode的事务IDZxid的值)。
  2. mZxid:最后修改znode的事务ID
  3. pZxid:最后添加或删除子节点的事务ID(子节点列表发生变化才会发生改变)。
  4. ctimeznode创建时间。
  5. mtimeznode最近修改时间。
  6. dataVersionznode的当前数据版本。
  7. cversionznode的子节点结果集版本(一个节点的子节点增加、删除都会影响这个
  8. 版本)。
  9. aclVersion:表示对此znodeacl版本。
  10. ephemeralOwnerznode是临时znode时,表示znode所有者的 session ID 如果
  11. znode不是临时znode,则该字段设置为零。
  12. dataLengthznode数据字段的长度。
  13. numChildrenznode的子znode的数量。

监听通知机制

客户端可以创建监听器,监听节点发生的变化。可以监听节点本身及子节点的所有变化

使用java客户端连接zookeeper

  1. publicstaticvoidmain(String[] args)throwsException{//重试策略RetryPolicy retryPolicy =newExponentialBackoffRetry(1000,3);// 建立客户端CuratorFramework client =CuratorFrameworkFactory.builder().connectString("192.168.10.102:2181").sessionTimeoutMs(60*1000)// 会话超时时间.connectionTimeoutMs(5000)// 连接超时时间.retryPolicy(retryPolicy).build();
  2. client.start();//创建节点//System.out.println(client.create().forPath("/curator", "123".getBytes()));//子节点//System.out.println(client.create().forPath("/curator/test1", "123".getBytes()));//临时节点//System.out.println(client.create().withMode(CreateMode.EPHEMERAL).forPath("/curator/test1/eee", "123".getBytes()));//创建监听器CuratorCacheListener listener =CuratorCacheListener.builder()//监听节点的创建,和子节点的创建.forCreates(System.out::println)//监听节点的内容的改变,和子节点内容的改变.forChanges((oldNode, node)->System.out.println("oldNode:"+ oldNode +" node:"+ node))//监听节点的删除,和子节点的删除.forDeletes(System.out::println).forInitialized(()->{//监听器初始化System.out.println("listener init...");}).build();//将zk目录下的数据缓存在本地CuratorCache cache =CuratorCache.build(client,"/aaa");//添加目录下的监听器
  3. cache.listenable().addListener(CuratorCacheListener.builder().forAll(listener).build());
  4. cache.start();System.in.read();}
标签: zookeeper 分布式

本文转载自: https://blog.csdn.net/l577125882/article/details/125187707
版权归原作者 llllllxj 所有, 如有侵权,请联系我们删除。

“Zookeeper 一、介绍与使用”的评论:

还没有评论