zookeeper结构和命令

2023-11-05

zookeeper特性

1、Zookeeper:一个leader,多个follower组成的集群。

2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。

3、分布式读写,更新请求转发,由leader实施

4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。

5、数据更新原子性,一次数据更新要么成功,要么失败。

6、实时性,在一定时间范围内,client能读到最新数据。

zookeeper数据结构

1、层次化的目录结构,命名符合常规文件系统规范

2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识

3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)

4、客户端应用可以在节点上设置监视器

数据结构的图

创建一个这样节点的代码,值我都设置为1

[zk: mini3:2181(CONNECTED) 20] create /app1 1
Created /app1
[zk: mini3:2181(CONNECTED) 21] create /app1/p_1  1
Created /app1/p_1
[zk: mini3:2181(CONNECTED) 22] create /app1/p_2   1
Created /app1/p_2
[zk: mini3:2181(CONNECTED) 23] create /app1/p_3   1
Created /app1/p_3
[zk: mini3:2181(CONNECTED) 25] create /app2  1
Created /app2

 

 

节点类型

 

1、Znode有两种类型:

短暂(ephemeral)(断开连接自己删除)

案例,我创建一个/app3  1,当我创建后再断开, 再连接(或者其他客户端)就看不到这个节点

[zk: mini3:2181(CONNECTED) 2] create -e  /app3   1
Created /app3
[zk: mini3:2181(CONNECTED) 3] quit      

其他客户端查看

[zk: localhost:2181(CONNECTED) 4] ls /
[app2, app1, zookeeper]
[zk: localhost:2181(CONNECTED) 5] 

好处: 当服务器设置一个这样的几点,当服务器挂的时候,该节点消失,父节点的发生变化(子节点-1),可以通过监控来告诉其他服务器,该服务器已经挂了。

持久(persistent)(断开连接不删除,默认是这个)

2、Znode有四种形式的目录节点(默认是persistent )

PERSISTENT

PERSISTENT_SEQUENTIAL(持久序列/test/a0000000000)

EPHEMERAL

EPHEMERAL_SEQUENTIAL

案例

[zk: localhost:2181(CONNECTED) 7] create /test  11
Created /test
[zk: localhost:2181(CONNECTED) 8] create -s  /test/a  11
Created /test/a0000000000
[zk: localhost:2181(CONNECTED) 9] create -s  /test/a  11
Created /test/a0000000001

[zk: localhost:2181(CONNECTED) 12] ls /test 
[a0000000000, a0000000001]

[zk: localhost:2181(CONNECTED) 13] create -s  /test/b  11
Created /test/b0000000002

 

 

创建znode时设置顺序标识(-s),znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

 

zookeeper命令行操作

运行 zkCli.sh –server <ip>进入命令行工具

[root@mini2 bin]# ./zkCli.sh -mini3

 

切换服务器

[zk: localhost:2181(CONNECTED) 1] connect mini3:2181

 

使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:

[zk: mini3:2181(CONNECTED) 2] ls /
[zookeeper]

创建一个新的 znode

create  /zk "myData"  这个命令创建了一个新的 znode 节点 zk ,和zk对应的值

 

[zk: mini3:2181(CONNECTED) 7] create /zk "myDate"
Created /zk
[zk: mini3:2181(CONNECTED) 8] ls /
[zk, zookeeper]

运行 get 命令来确认 znode 是否包含我们所创建的字符串

[zk: mini3:2181(CONNECTED) 10] get /zk
"myDate"     数据
cZxid = 0x100000004   创建的事务ID
ctime = Wed Dec 05 11:45:38 CST 2018   创建时间
mZxid = 0x100000004  修改的事务ID
mtime = Wed Dec 05 11:45:38 CST 2018 修改时间
pZxid = 0x100000004
cversion = 0  修改的版本
dataVersion = 0  数据版本
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8  数据长度
numChildren = 0   子节点数目

监听这个节点值的变化,当另外一个客户端改变/zk时,它会打出下面的(监听次数就一次)

#WATCHER::

#WatchedEvent state:SyncConnected type:NodeDataChanged path:/z

我在其他客户端上对/zk 修改值的时候发生

作用:监听某个节点的变化,将节点的变化通知给某个客户端

ls path [watch]监听当前节点的子节点是否发生变化。

[zk: localhost:2181(CONNECTED) 1] ls / watch
[app2, app1, test20000000007, test, zookeeper]
[zk: localhost:2181(CONNECTED) 2] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/

原因是我在其他客户端 创建了节点 /test4

[zk: localhost:2181(CONNECTED) 20] create /test4 11
Created /test4

 

通过 set 命令来对 /zk 进行设置

[zk: localhost:2181(CONNECTED) 3] set /zk "zsl"
cZxid = 0x100000004
ctime = Wed Dec 05 11:45:38 CST 2018
mZxid = 0x100000006
mtime = Wed Dec 05 11:55:31 CST 2018
pZxid = 0x100000004
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 4] 

 

 

 删除znode ,如果znode有子节点,就删不了

[zk: mini3:2181(CONNECTED) 13] delete /zk
[zk: mini3:2181(CONNECTED) 14] ls /
[zookeeper]

 

删除节点(包括该节点的所有子节点):rmr

[zk: mini3:2181(CONNECTED) 15] create /zk "111"
Created /zk
[zk: mini3:2181(CONNECTED) 16] ls /            
[zk, zookeeper]
[zk: mini3:2181(CONNECTED) 17] rmr /zk
[zk: mini3:2181(CONNECTED) 18] ls /   
[zookeeper]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zookeeper结构和命令 的相关文章

  • ionic3之js(jQuary),css,图片的引入

    一 js文件 以jQuary为例 相信有很多朋友使用不习惯angularjs 所以想使用已经很熟悉的JQuary 在这里我就给出怎么引入jQuary文件 并使用 1 把要引入的jQuary文件放到app下的assets目录下 2 在src下
  • go 进阶 请求代理相关: 三. ReverseProxy 负载均衡

    目录 一 ReverseProxy 负载均衡 简单随机负载均衡示例 简单轮询负载均衡示例 加权负载均衡示例 一致性Hash 二 反向代理添加负载均衡功能 一 ReverseProxy 负载均衡 ReverseProxy 支持负载均衡功能 提
  • IO之字节字符转换流

    1 转换流概述 转换流 可以将一个字节流转换为字符流 也可以将一个字符流转换为字节流 OutputStreamWriter 可以将输出的字符流转换为字节流的输出形式 InputStreamReader 将输入的字节流转换为字符流输入形式 2
  • 多文件编辑作业(2023.1.9)

    第一题 main c include head h int main int argc const char argv char str 10 abcdefg MyStrRev str char a hello StrRevRec a st

随机推荐

  • qt 在ui界面添加控件后在cpp文件中无法调用?

    问题 qt 在ui界面添加控件后在cpp文件中无法调用 解决方法 在build选项中选择 重新build项目 再次在cpp中调用添加的控件发现可以调用了 还有一种情况导致添加控件后无法调用 就是没有导入ui xxx h文件 xxx是ui界面
  • Python图像处理-4.pil调整图片尺寸和旋转角度

    from PIL import Image import matplotlib pyplot as plt pil im1 Image open pic1 png plt figure girlfriend1 plt imshow pil
  • 魔搭开源FaceChain个人写真项目,大幅提升写真多样性,登顶github趋势榜首!

    一 上周数据概览 一周时间获取超过3K star 连续在github trending榜单蝉联top 开发者们纷纷标记star GitHub modelscope facechain FaceChain is a deep learning
  • zlib库VS2017编译步骤

    点击这里下载zlib1 2 11源码 http zlib net zlib1211 zip 下载源码库 从上面给出的源码路径下载zlib源码库 如果不想自己编译 可以使用上面给出的二进制包直接使用 无视本文 编译步骤 编译方法一 解压源码文
  • MyBatis-plus 动态条件构造器总结

    MyBatis plus 动态条件构造器类结构图 MyBatis Plus条件构造器QueryWrapper对应常用SQL语法说明 函数 说明 SQL语法 eq 等于 ne 不等于 lt gt gt 大于 gt lt 小于 lt ge 大于
  • STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(一)---下位机硬件配置

    事务的难度远远低于对事物的恐惧 STM32F407单片机通过ESP8266 WiFi模块与Android 手机APP连接实现数据的相互传输 在单片机上通过LCD显示屏实时显示连接的状态以及互相传输的数据 先看效果图 STM32单片机 And
  • simulink教程(自动控制原理)

    1 启动simulink 命令行输入simulink或者 会弹出 2 点击blank model 出现新窗口 新建或者打开模型文件 There are two major classes of items in Simulink block
  • GLES3.0中文API-glDrawRangeElements

    名称 glDrawRangeElements 从数组数据渲染基元 C规范 void glDrawRangeElements GLenum mode GLuint start GLuint end GLsizei count GLenum t
  • Open mv识别三角形的办法

    文章目录 前言 带着问题来看 一 函数 二 使用方法 1 find line segments 2 img find template 三 摄像情况及终端结果 1 find line segments 2 img find template
  • 初始C语言——利用Ascll码进行字母大小写转换

    打开Ascll码表 你会发现大写字母和小写字母之间存在这样的关系 图片来自 https img blog csdnimg cn 54404234b42348d6a33bc1c4d5ab24e5 png 小写字母的值始终比大写字母多32 de
  • Node.js

    Node js Node js基础 概念 简单的说 Node js 就是运行在服务端的 JavaScript Node js 是一个基于Chrome JavaScript 运行时建立的一个平台 Node js是一个事件驱动I O服务端Jav
  • (五)决策树

    一 决策树 决策树是监督学习算法 下面为一些样本 本质上是一种特征去结果的相关度 比如你的信贷情况与能否还贷的相关度肯定高 而你有没有结婚的相关度肯定低 二 信息增益 三 ID3算法
  • php 未支付取消订单,【php】用户提交订单,30分钟后没付款取消订单功能分析

    我先在要做这样的功能 用户在创建订单后 订单表中记入的是未付款状态 如果用户在30分钟后 还未付款 然后就把该订单给取消 关于用户创建订单 30分钟后还没付款 取消该订单的逻辑是怎么实现的 我自己的想了两个方案 1 客户端记入这个订单 如果
  • MindNode 5 for Mac(思维导图软件)中文版

    绘制流程图 思维导图 规划图 信息图等自然少不了这款MindNode 5 for Mac 作为优质的思维导图软件 mindnode5 mac破解版的功能很全面 添加文字 链接 图片 扩展注释等非常便捷 而且mindnode 5 破解版会智能
  • Rocketmq原理&最佳实践

    一 MQ背景 选型 消息队列作为高并发系统的核心组件之一 能够帮助业务系统解构提升开发效率和系统稳定性 主要具有以下优势 削峰填谷 主要解决瞬时写压力大于应用服务能力导致消息丢失 系统奔溃等问题 系统解耦 解决不同重要程度 不同能力级别系统
  • Python开发篇——基于React-Dropzone开发上传组件

    这次我要讲述的是在React Flask框架上开发上传组件的技巧 我目前主要以React开发前端 在这个过程中认识到了许多有趣的前端UI框架 React Bootstrap Ant Design Material UI Bulma等 而比较
  • Linux操作系统知识点总结

    1 什么是Linux系统 Linux 全称GNU Linux 是一种免费使用和自由传播的类UNIX操作系统 其内核由林纳斯 本纳第克特 托瓦兹 Linus Benedict Torvalds 于1991年10月5日首次发布 它主要受到Min
  • Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)

    说明 Qt可以比较方便地实现自定义控件在Qt Creator中使用 网上也有很多大神的控件可以使用 但是如果想要自己简单定制也可以按照这个流程 本文的要点 1 如何实现一个自定义控件 本文使用的方法有两个步骤 先在一个普通项目中实现使用 新
  • FreeRTOS学习笔记(3、信号量、互斥量的使用)

    FreeRTOS学习笔记 3 信号量 互斥量的使用 前言 往期学习笔记链接 学习工程 信号量 semaphore 两种信号量的对比 信号量的使用 1 创建信号量 2 give 3 take 4 删除信号量 使用计数型信号量实现同步功能 使用
  • zookeeper结构和命令

    zookeeper特性 1 Zookeeper 一个leader 多个follower组成的集群 2 全局数据一致 每个server保存一份相同的数据副本 client无论连接到哪个server 数据都是一致的 3 分布式读写 更新请求转发