详解zookeeper安装使用

news2024/12/23 5:36:29

目录

1.概述

1.1.功能

1.2.特点

1.3.数据结构

2.安装

2.1.Windows

2.2.Linux

3.基础操作

3.1.增

3.2.删

3.3.改

3.4.查

3.5.监听

4.JAVA操作Zookeeper

4.1.依赖

4.2.客户端

4.3.增

4.4.删

4.5.查

4.6.改


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。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch:使用tensorboardX可视化网络模型时add_graph位置报错

1.报错信息 TypeError: graph() got an unexpected keyword argument ‘use_strict_trace’ 提示 graph()这个函数多了一个参数’use_strict_trace’&#xff1b; 也觉得应该是tensorboardX版本问题&#xff0c;但uninstall 再insatall之后也不行&#xff0c;用另一台机子也…

STM32H5开发(3)----电源控制RCC

STM32H5开发----3.电源控制&RCC STM32H503 供电STM32H562/563/573 LDO 供电STM32H562/563/573 SMPS供电LDO/SMPS 供电PWR 特性电源电压监测温度监测低功耗模式低功耗模式-SLEEP 模式低功耗模式-STOP 模式低功耗模式-STANDBY模式低功耗模式监控管脚VBAT模式复位触发源时钟源…

主机漏洞利用演示MS17-010(永恒之蓝)

ms17-010危害&#xff1a;对被攻击方的电脑造成蓝屏&#xff01; 申明&#xff1a;本篇文章的用意仅做学习使用 网络搭建环境&#xff1a; 软件&#xff1a;Vmware Workstation 17 攻击机&#xff1a;Kali 靶机环境&#xff1a;Windows 7 Nmap软件的基本功能&#xff1a; …

渐进式网络恢复调研

渐进式网络恢复调研 问题定义&#xff08;PNR) 如果发生重大网络中断&#xff08;例如由地震、洪水等大规模灾害&#xff09;&#xff0c;运营商必须通过一系列修复步骤来恢复其网络基础设施。优化这个序列以在恢复过程中最大化提供的服务数量的问题通常称为渐进式网络恢复&a…

Phong光照模型原理及着色器实现

现实世界中的照明极其复杂&#xff0c;取决于太多因素&#xff0c;我们无法以有限的处理能力来计算这些因素。 因此&#xff0c;OpenGL 中的光照基于使用简化模型的现实近似值&#xff0c;这些模型更容易处理并且看起来相对相似。 这些照明模型基于我们所理解的光物理学。 其中…

桥接模式-处理多维度变化

程序员小名去摆摊卖奶茶了&#xff0c;口味有香、甜。 型号有大、中、小。假如小名先在家里把这些奶茶装好&#xff0c;那么最少要装2x3 6杯奶茶&#xff0c;如果此时新增一个口味&#xff1a;酸&#xff0c;那么就需要多装3杯奶茶了。而且这样做&#xff0c;等客户买走一种&a…

c++网络编程:Boost.asio源码剖析

1、前言 Boost库是一个可移植、提供源代码的C库&#xff0c;作为标准库的后备&#xff0c;是C标准化进程的开发引擎之一。Boost库由C标准委员会库工作组成员发起&#xff0c;其中有些内容有望成为下一代C标准库内容。在C社区中影响甚大&#xff0c;是不折不扣的“准”标准库。…

HCIA练习4

题目如下&#xff1a; 目录 第一步&#xff1a;IP的规划 第二步&#xff1a;缺省路由 第三步&#xff1a;开启telnet 第四步&#xff1a;编写ACL表 第五步&#xff1a;测试 思路分析&#xff1a; 华为默认允许所有&#xff0c;所以我们可以先写拒绝要求&#xff0c;再写允…

MobaXterm通过SSH访问Ubuntu服务器遇到的一个问题

在Windows下的MobaXterm界面配置完ubuntuIP以后显示access denied&#xff0c;排查发现是因为在ubuntu那边忘记安装了SSH Serve&#xff0c;安装过程如下&#xff1a; 第一步&#xff1a;安装所需包 让我们从打开终端输入一些必要命令开始。 注意&#xff0c;在安装新的包或…

【独家解答】面试题曝光:Spring容器中的Bean会不会被GC?

大家好&#xff0c;我是你们的小米&#xff01;今天&#xff0c;我们来聊一个有关Spring容器中的Bean的话题&#xff0c;也是面试中经常被问到的问题&#xff1a;“Spring 容器中的Bean是否会被GC呢&#xff1f;为什么&#xff1f;”让我们一起揭开这个神秘的面纱&#xff0c;解…

记录一次软件安全测试过程

一.前言 xx的安测已经过去一段时间了,这两天xx需求刚发布。xx的外呼需求文档还没确定,所以趁着这个时间,进行一下复盘。这次xx安测,全程参与,经历了3轮,从5月份开始,到6月底正式通过安测,实属不易。安测主要分为漏洞扫描、越权扫描、日志审查、软件版本基线检查下面也将…

Visual Studio 2022 程序员必须知道高效调试手段与技巧(上)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; 什么是bug&#xff1f;&#x1f4ac; 调试是什么&#xff1f;有多重要&#x…

css设置八等分圆

现需要上图样式的布局&#xff0c;我通过两张向右方的图片&#xff0c;通过定位和旋转完成了布局。 问题&#xff1a; 由于是通过旋转获取到的样式&#xff0c;实际的盒子是一个长方形&#xff0c;当鼠标移入对应的箭头时选中的可能是其他盒子&#xff0c;如第一张设计稿可以看…

uniapp 语音文本播报功能

最近uniapp项目上遇到一个需求 就是在接口调用成功的时候加上语音播报 &#xff0c; ‘创建成功’ ‘开始成功’ ‘结束成功’ 之类的。 因为是固定的文本 &#xff0c;所以我先利用工具生成了 文本语音mp3文件&#xff0c;放入项目中&#xff0c;直接用就好了。 这里用到的工…

Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存

1.adb shell 获取app 进程的pid adb shell "ps|grep com.xxx包名"根据某个渠道包&#xff0c;去查询对应的pid&#xff0c;如下所示&#xff1a; 2.通过adb shell 查看设备的java dalvik 堆内存的最大值 执行命令行&#xff1a; adb shell getprop dalvik.vm.h…

【Java SE】继承与多态

目录 【1】继承 【1.1】为什么要继承 【1.2】继承概念 【1.3】继承的语法 【1.4】父类成员访问 【1.4.1】子类中访问父类的成员变量 【1.4.2】子类中访问父类的成员变量 【1.5】super关键字 【1.6】子类构造方法 【1.7】super和this 【1.8】再谈初始化 【1.9】prot…

element-plus中的collapse组件中的箭头图标移到左边问题解决(改进版)

1、问题BUG 这个问题虽然解决了&#xff0c;但是依旧有一些bug&#xff0c;首先我们来看一下&#xff0c;他的样式变成了什么样的。 下面就是我们修改后的样子了&#xff0c;但是对于我们的需求来说&#xff0c;左边的箭头样式是没问题了 可是到了箭头到了右边却变成了下面的…

17_LinuxLCD驱动

目录 Framebuffer设备 LCD驱动简析 LCD驱动程序编写 LCD屏幕参数节点信息修改 LCD 屏幕背光节点信息 使能Linux logo显示 设置LCD作为终端控制台 Framebuffer设备 先来回顾一下裸机的时候LCD驱动是怎么编写的,裸机LCD驱动编写流程如下: 1.初始化I.MX6U的eLCDIF控制器,…

Gumbel Softmax Trick

Gumbel Softmax Trick 重参数化技巧&#xff08;re-parameters trick&#xff09;Gumbel softmax trick基于Softmax的采样基于Gumbel-max的采样基于Gumbel-softmax采样Softmax中的温度系数tau 算法学习之gumbel softmax 【Learning Notes】Gumbel 分布及应用浅析 gumbel-softma…

Failed to connect to 127.0.0.1 port 7890科学上网导致的问题

找了很多种解法&#xff1a; 首先这个.config配置文件有两个地方存在&#xff1a;先使用第一种方式&#xff0c;不管用再试第二种 第一个位置git安装路径&#xff1a;不需要重启 E:\git\Git\etc&#xff0c;这个需要看你自己的安装路径&#xff0c;找到http_proxy删除即可第二…