详解zookeeper安装使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 详解zookeeper安装使用

1.概述

1.1.功能

zookeeper,Apache旗下一款分布式服务的协调、管理组件。主要有两个功能:

  • 存储
  • 通知

1.存储

zookeeper的存储,类似数据库,用来存放数据,其中存放的是一些数量不大但是很重要、全局都需要的信息,比如可以用来当做注册中心、存放各个服务的信息。

2.通知

客户端向zookeeper服务器进行注册,声明自己想要观察该zookeeper server的何种信息,成为该zookeeper server的观察者,一旦所要观察的信息有变化,zookeeper会向注册在案的该信息对应的观察者发送通知。

1.2.特点

zookeeper有两大特点:

  • CP,强一致性、分区容错性。
  • 自带负载均衡,每次对集群中的访问会自动映射到当前负载最小的节点上去。

1.3.数据结构

zookeeper的数据模型结构与Unix文件系统很类似,是一棵树,每个节点称为znode,每一个znode默认能存储1MB数据,每个znode通过唯一路径标识。

2.安装

2.1.Windows

下载:

直接在官网上下载压缩包,解压即可。


启动:

指令脚本在安装目录下的bin目录下,Windows的启动脚本是zkServer.cmd

启动会报错,因为缺少配置文件:

zookeeper启动时去config目录下扫描的配置文件名为zoo.cfg,而该目录下默认下载安装后只有一个zoo_sample.cfg,这是zookeeper官方给出的一个配置文件模板,可以直接将其改名为zoo.cfg即可正常启动zookeeper。

启动客户端:

启动zookeeper服务器后,启动客户端即可在客户端中使用指令来操作zookeeper。

2.2.Linux

Linux的配置文件示例:

tickTime:心跳时间,沟通间隔,单位,心跳个数。

initLimit:服务器启动时的同步阶段耗时,单位,心跳个数。

syncLimit:从发出一个通知到收到响应的等待时间,单位,心跳个数。

server.编号:集群配置,集群中编号唯一,与数据目录下的myid中的值对齐。

节点IP:通信端口:选举端口;服务端口。

3.基础操作

3.1.增

不能创建空节点,只能创建带数据的节点。

-e  -s  可以混用,创建有序的临时节点。

3.2.删

3.3.改

3.4.查

查数据:

查状态:

  • cZxid: 这是导致创建znode更改的事务ID.
  • mZxid :这是最后修改znode更改的事务ID.
  • oZxid:这是用于添加或删除了节点的znode更改的事务ID。
  • ctime: 表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode创建时间
  • mtime: 表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode最近修改时间。
  • dataVersion: 表示对该znode的数据所做的更改次数
  • cversion: 这表示对此znode的了节点进行的更改次数
  • acIVersion: 表示对此znode的ACL进行更改的次数ephemeralOwner:如果znode是ephemera类型节点,则这是node所有者的 session D,如果ode不是ephemera#点,则该字段设置为零。
  • dataLength: 这是znode数据字段的长度
  • numChildren: 这表示znode的子节点的数量

3.5.监听

watch,监听机制, zookeeper通知功能的落地实现,Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件。比如可以监听节点数据变更、节点变更、状态变更等事件,通过这个事件机制,可以实现基于 zookeeper的分布式锁、集群管理等功能。

当数据发生变化的时候, zookeeper 会产生一个 watcher 事件,并且会发送到客户端。但是客户端只会收到一次通知。如果后续这个节点再次发生变化,那么之前设置 watcher 的客户端不会再次收到消息(watcher 是一次性的操作),可以通过循环监听去达到永久监听效果 。

ls  路径 watch   监听该路径下子节点的变化

get  路径  watch  监听该路径下数据的变化

4.JAVA操作Zookeeper

4.1.依赖

版本号,自己确定一下,这里博主用的3.5.8而已:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.8</version>
</dependency>

4.2.客户端

构造函数有三个参数:

  • 连接地址,zookeeper的IP地址
  • 会话超时时间,超过此时间server没有收到client的心跳会断开会话,清理该会话的临时数据。
  • watch通知,watch的数据有变的时候返回的通知。

4.3.增

三个参数:

  • path:路径
  • data:数据
  • ACL机制:使用zookeeper API中自带的枚举类CreateMode:创建临时节点还是永久节点(-e  还是  -s),使用zookeeper API中自带的枚举类

4.4.删

zooKeeper.delete(znodePath, -1);

在 ZooKeeper 中,当删除一个 znode(节点)时,需要传递一个版本号作为版本检查的条件。这个版本号用来确保在删除操作执行时,znode 的版本和指定的版本号是一致的。如果版本号不匹配,删除操作将会失败。

在删除方法 zooKeeper.delete(znodePath, version) 中,第二个参数 version 是用来指定要删除的 znode 的版本号。当 version 参数设置为 -1 时,表示不执行版本检查,即忽略 znode 的版本,直接删除该 znode。这意味着无论 znode 的版本是什么,都会被删除。

4.5.查

查节点:

查数据:

查状态:

4.6.改


version,版本号,要与dataVersion严格对齐,

可以查状态获得版本号,

修改成功后dataVersion会自加1。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
消息中间件 Kafka
kafka和zookeeper安装使用踩坑记录
kafka和zookeeper安装使用踩坑记录
|
算法 Java
Zookeeper笔记3——原理及其安装使用
Zookeeper到底能干什么? 1.配置管理:这个好理解。分布式系统都有好多机器,Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。
1453 0
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
2月前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)
|
4月前
|
监控 NoSQL Java
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决
|
1月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
43 2
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
47 1
|
2月前
分布式-Zookeeper-数据订阅
分布式-Zookeeper-数据订阅