Zookeeper(持续更新)

VIP-01 Zookeeper特性与节点数据类型详解


文章目录

  • VIP-01 Zookeeper特性与节点数据类型详解
  • 正文
    • 1. 什么是Zookeeper?
    • 2. Zookeeper 核心概念
      • 2.1、 文件系统数据结构
      • 2.2、监听通知机制
      • 2.3、Zookeeper 经典的应用场景
      • 3.2. 使用命令行操作zookeeper


正文

  1. 什么是Zookeeper
  2. Zookeeper核心概念
  3. Zookeeper实操
  4. Zookeeper ACLs权限控制
  5. ZooKeeper 内存数据和持久化
    在了解Zookeeper之前,需要对分布式相关知识有一定了解,什么是分布式系统呢?通常情况
    下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来
    共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算机上的程序组件,彼此通过
    信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调框架,在分布式系统架构中
    有广泛的应用场景。

1. 什么是Zookeeper?

官方文档上这么解释zookeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项
目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同
步服务、集群管理、分布式应用配置项的管理等。

在这里插入图片描述

2. Zookeeper 核心概念

上面的解释有点抽象,同学们暂时可以理解为 Zookeeper 是一个用于存储少量数据的基于内存
的数据库,主要有如下两个核心的概念:文件系统数据结构+监听通知机制。

2.1、 文件系统数据结构

Zookeeper维护一个类似文件系统的数据结构:
在这里插入图片描述
每个子目录项都被称作为 znode(目录节点),和文件系统类似,我们能够自由的增加、删除
znode,在一个znode下增加、删除子znode。
有四种类型的znode:
1、PERSISTENT­持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在
2、 PERSISTENT_SEQUENTIAL­持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL­临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL­临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
5. Container 节点(3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点
在未来会被Zookeeper自动清除,定时任务默认60s 检查一次)
6. TTL 节点( 默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启,不稳
定)
在这里插入图片描述

2.2、监听通知机制

客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点

  1. 如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通
  2. 如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应
    的客户端将被通知
  3. 如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构
    的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。
    注意:所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监
    听即被移除。递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触
    发一次。

2.3、Zookeeper 经典的应用场景

  1. 分布式配置中心
  2. 分布式注册中心
  3. 分布式锁
  4. 分布式队列
  5. 集群选举
  6. 分布式屏障
  7. 发布/订阅
  8. Zookeeper 实战
    3.1. zookeeper安装
    Step1:配置JAVA环境,检验环境:
1 java ‐version

Step2: 下载解压 zookeeper

1 wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper‐3.5.8/apache‐zookeepe
r‐3.5.8‐bin.tar.gz
2 tar ‐zxvf apache‐zookeeper‐3.5.8‐bin.tar.gz
3 cd apache‐zookeeper‐3.5.8‐bin

Step3: 重命名配置文件 zoo_sample.cfg

1 cp zoo_sample.cfg zoo.cfg

Step4: 启动zookeeper

1 # 可以通过 bin/zkServer.sh 来查看都支持哪些参数
2 bin/zkServer.sh start conf/zoo.cfg

Step5: 检测是否启动成功

1 echo stat | nc 192.168.109.200 // 前提是配置文件中中讲 stat 四字命令设置了了白名单
2 如:
3 4lw.commands.whitelist=stat

Step6: 连接服务器

1 bin/zkCli.sh ‐server ip:port

3.2. 使用命令行操作zookeeper

输入命令 help 查看zookeeper所支持的所有命令:

1 [zk: localhost:2181(CONNECTED) 80] help
2 ZooKeeper ‐server host:port cmd args
3 addauth scheme auth
4 close
5 config [‐c] [‐w] [‐s]
6 connect host:port
7 create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]
8 delete [‐v version] path
9 deleteall path
10 delquota [‐n|‐b] path
11 get [‐s] [‐w] path
12 getAcl [‐s] path
13 history
14 listquota path
15 ls [‐s] [‐w] [R] path
16 ls2 path [watch]
17 printwatches on|off
18 quit
19 reconfig [‐s] [‐v version] [[‐file path] | [‐members serverID=host:port1:port
2;port3[,...]*]] | [‐add serverId=host:port1:port2;port3[,...]]* [‐remove serverI
d[,...]*]
20 redo cmdno
21 removewatches path [‐c|‐d|‐a] [‐l]
22 rmr path
23 set [‐s] [‐v version] path data
24 setAcl [‐s] [‐v version] [R] path acl
25 setquota ‐n|‐b val path
26 stat [‐w] path
27 sync path
  1. 创建zookeeper 节点命令
1 create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]
2

中括号为可选项,没有则默认创建持久化节点
-s: 顺序节点
-e: 临时节点
-c: 容器节点
-t: 可以给节点添加过期时间,默认禁用,需要通过系统参数启用
(-Dzookeeper.extendedTypesEnabled=true, znode.container.checkIntervalMs : (Java system
property only) New in 3.5.1: The time interval in milliseconds for each check of candidate
container and ttl nodes. Default is “60000”.)
创建节点:

1 create /test‐node some‐data

如上,没有加任何可选参数,创建的就是持久化节点
在这里插入图片描述
查看节点:

1 get /test‐node

在这里插入图片描述
修改节点数据:

1 set /test‐node some‐data‐changed

在这里插入图片描述
查看节点状态信息:

1 stat /test‐node

在这里插入图片描述
Stat
cZxid:创建znode的事务ID(Zxid的值)。
mZxid:最后修改znode的事务ID。
pZxid:最后添加或删除子节点的事务ID(子节点列表发生变化才会发生改变)。
ctime:znode创建时间。
mtime:znode最近修改时间。
dataVersion:znode的当前数据版本。
cversion:znode的子节点结果集版本(一个节点的子节点增加、删除都会影响这个
版本)。
aclVersion:表示对此znode的acl版本。
ephemeralOwner:znode是临时znode时,表示znode所有者的 session ID。 如果
znode不是临时znode,则该字段设置为零。
dataLength:znode数据字段的长度。
numChildren:znode的子znode的数量。
查看节点状态信息同时查看数据
在这里插入图片描述
根据状态数据中的版本号有并发修改数据实现乐观锁的功能
比如: 客户端首先获取版本信息, get -s /node-test
在这里插入图片描述
/test-node 当前的数据版本是 1 , 这时客户端 用 set 命令修改数据的时候可以把版本号带上
在这里插入图片描述
如果在执行上面 set命令前, 有人修改了数据,zookeeper 会递增版本号, 这个时候,如果再用
以前的版本号去修改,将会导致修改失败,报如下错误
在这里插入图片描述
创建子节点, 这里要注意,zookeeper是以节点组织数据的,没有相对路径这么一说,所以,所
有的节点一定是以 / 开头

1 create /test‐node/test‐sub‐node

在这里插入图片描述

查看子节点信息,比如根节点下面的所有子节点, 加一个大写 R 可以查看递归子节点列表

1 ls /

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
明天说Zookeeper 的 ACL 权限控制!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新品发布 | 思腾合力深思系列IW2235-2GR GPU服务器

思腾合力深思系列 IW2235-2GR GPU服务器支持第四代英特尔至强可扩展处理器,采用全新微架构内核,支持最高的350W型号,计算性能强劲;支持32个DDR5内存,频率最高可达4800MHz,内存带宽相比上一代提升50%&#x…

[前端]React入门指南安裝及依赖包管理

仓库管理工具nrm #安装nrm npm i -g nrm#查看当前 nrm ls#use 使用仓库 nrm use npm 常见问题 npm安装失败 。切换为npm镜像为淘宝镜像 。使用yarn,如果本来使用yarn还要失败,还得把yarn的源切换到国内,如果还没有办法解决,请删除…

大一,如何成为一名fpga工程师?

​ 1、数电(必须掌握的基础),然后进阶学模电(选学), 2、掌握HDL(HDLverilogVHDL)可以选择verilog或者VHDL,建议verilog就行。 3、掌握FPGA设计流程/原理(推…

PPI+机器学习+免疫浸润+实验验证,如此简单也能发4+

今天给同学们分享一篇生信文章“Identification of metabolic biomarkers associated with nonalcoholic fatty liver disease”,这篇文章发表在Lipids Health Dis期刊上,影响因子为4.5。 结果解读: 识别NAFLD患者的MR DEG 主成分分析&…

YOLOv7独家原创改进:新颖的Shape IoU结合 Inner-IoU,基于辅助边框的IoU损失的同时关注边界框本身的形状和尺度,小目标实现高效涨点

💡💡💡本文改进:一种新的Shape IoU方法结合 Inner-IoU,基于辅助边框的IoU损失的同时,更加关注边界框本身的形状和尺度来计算损失 💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点 💡💡💡本文改进:一种新的Shape IoU方法,该方法可以通过…

Python入门-函数

1.函数的定义及调用 函数:函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用。 以此达到一次编写,多次调用的目的 def get_sum(num): #num叫形式参数s0for i in range(1,num1):siprint(f1到{num}之…

Docker 发布自定义镜像到公共仓库

Docker 发布自定义镜像到公共仓库 引言 Docker 是一种轻量级、便携式的容器化技术,可以使应用程序在不同环境中更加可移植。在本文中,我们将学习如何使用 Docker 从公共仓库拉取 Nginx 镜像,定制该镜像,添加自定义配置文件&…

中国到雅加达专线,快速双清到门!

中国到雅加达专线,快速双清到门!🚀🌏 嘿,亲爱的小伙伴们!有关中国到雅加达的专线,快来了解一下吧!🇨🇳✈️🇮🇩 专线亮点&#xff1a…

Python从入门到网络爬虫(面向对象详解)

前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本…

thingsboard前端缓存--nginx

thingsboardnginx thingsboard部署到阿里云服务器之后,由于登录界面要发送的文件很大,并且服务器的带宽目前有限,因此配置一个nginx,进行前端页面的一些缓存,参考了https://qianchenzhumeng.github.io/posts/Nginx%E5…

如何解决大语言模型的幻觉问题

如何解决大模型的「幻觉」问题? 什么是大模型「幻觉」 在人类生活中,幻觉表示虚假的但是我们分辨不清楚的事物,在大语言模型中,[幻觉]即代表模型生成的虚假的文本,这中情况很容易导致一些错误的发生 造成大模型「幻觉…

静态网页设计——网上书店(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 使用技术:HTMLCSSJS 主要内容:网上式的书店。是一种高质量,更快捷,更方便的购书方式。网上书店不仅可用于图书的在线销售…

简易2048游戏的实现(C++)

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、效果图二、代码(带注释)三、说明 一、效果图 二、代码(带…

yolov8实战第五天——yolov8+ffmpg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署(python推理)(保姆教学)-CSDN博客 今天,我们继续y…

比例阀放大器控制阀类型

控制各种不带电气位移反馈的单电磁铁比例方向阀、比例压力阀、比例流量阀、比例减压阀、比例节流阀、比例插装阀的BEUEC比例放大器,供电24VDC,输入指令、输出电流、颤振频率、斜坡时间等可现场设置,适用不同阀易匹配,带参考电压输…

openwrt使用docker部署adguard home

docker创建macvlan,目的使adguard home具备宿主机同网段IP docker network create -d macvlan --subnet192.168.88.0/24 --gateway192.168.88.254 -o parentbr-lan bridge-host(虚拟网卡名字)拉取adguard home镜像 docker pull adguard/adguardhome:la…

记一次:职业规划与心灵成长

前言:csdn组织了2023年的年度征文,为了响应号召(嘘~其实为了那个铭牌),加上这么多年了也该总结一下了,就写了这么一篇(公司正好让写年终总结,巧了么这不是) 一、感谢部分…

对图片进行数据增强(基于pytorch)

背景 在进行机器学习的任务中,我们的训练数据往往是有限的,在有限的数据集上获得较好的模型训练结果,我们不仅要在模型结构上下功夫,另一方面也需要对数据集进行数据增强 图片数据增强 图像数据增强是一种在训练机器学习和深度学…

CentOS 8 基于官方源码制作openssh 9.6 rpm包(含ssh-copy-id、openssl) —— 筑梦之路

CentOS 8 制作openssh9.6 rpm(含ssh-copy-id命令)包 —— 筑梦之路_centos8 rpmbuild -ba openssh.spec 9.6-CSDN博客 CentOS 8 制作openssh9.0/9.2/9.3 rpm包——筑梦之路_centos8 openssl rpm包-CSDN博客 效果截图: 和使用官方默认的spec文件制作的区别&#xff…

Redis命令---List篇

目录 1.Redis Lindex 命令 - 通过索引获取列表中的元素简介语法可用版本: > 1.0.0返回值: 列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil 。 示例 2.Redis Rpush 命令 - 在列表中添加一个或多个值简介语法可用版本: > 1.0.0返…