Zookeeper快速入门:部署服务、基本概念与操作

文章目录

  • 一、部署服务
    • 1.下载与安装
    • 2.查看并修改配置文件
    • 3.启动
  • 二、基本概念与操作
    • 1.节点类型
      • 特性总结
      • 使用场景示例
      • 查看节点
      • 查看节点数据
    • 2.文件系统层次结构
    • 3.watcher

一、部署服务

1.下载与安装

  • 下载:

一定要下载编译后的文件,后缀为bin.tar.gz

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
  • 解压:

targetUrl填目标安装目录

tar -zxf apache-zookeeper-3.8.4-bin.tar.gz  targetUrl

2.查看并修改配置文件

配置文件在解压目录下的/conf中,提供了一个示范文件zoo_sample.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
  • 解析:

    • tickTime=2000:这是 ZooKeeper 中最基本的时间单位,以毫秒为单位。它用于心跳检测以及最小会话超时时间的计算。在这个例子中,tickTime 被设置为 2000 毫秒(即 2 秒)。
    • initLimit=10:这个参数定义了集群中的 follower 节点与 leader 节点进行初始同步的最大时间限制,以 tickTime 为单位。例如,如果 tickTime 是 2000 毫秒,那么 initLimit 设置为 10 就意味着初始同步的最大时间是 20000 毫秒(即 20 秒)。
    • syncLimit=5:这个参数定义了 follower 节点与 leader 节点之间发送请求和接收响应的最大时间限制,同样以 tickTime 为单位。例如,如果 tickTime 是 2000 毫秒,那么 syncLimit 设置为 5 就意味着这个时间限制是 10000 毫秒(即 10 秒)。
    • dataDir=/tmp/zookeeper:这个参数指定了 ZooKeeper 存储数据快照的目录。在生产环境中,不建议使用 /tmp 目录,因为 /tmp 目录可能会在系统重启时被清空。应该选择一个持久化的存储位置来存放数据。
    • clientPort=2181:这个参数指定了客户端连接 ZooKeeper 服务的端口。默认情况下,ZooKeeper 服务监听 2181 端口。
  • 修改配置文件:

# 复制一份
cp zoo_sample.cfg zoo.cfg
# 将dataDir=/tmp/zookeeper这一行的目录修改为存储数据的目录
vim zoo.cfg

3.启动

目前将zookeeper部署为单体结构的,先不考虑集群。

在bin目录下执行以下命令:

sh zkServer.sh start
  • 通过客户端进行连接:

在bin目录下执行以下命令:

./zkCli.sh -server localhost:2181

二、基本概念与操作

1.节点类型

在 Apache ZooKeeper 中,节点(也称为 znode)是存储数据的基本单元。ZooKeeper 支持多种类型的节点,每种类型具有不同的特性和用途。

  1. 持久节点 (Persistent Node)

    • 创建后不会自动删除,除非显式地调用删除操作。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create /persistent-node "data"
      
  2. 临时节点 (Ephemeral Node)

    • 当创建该节点的客户端会话结束时,节点会被自动删除。
    • 临时节点不能有子节点。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -e /ephemeral-node "data"
      
  3. 持久顺序节点 (Persistent Sequential Node)

    • 创建时,ZooKeeper 会在节点路径末尾自动添加一个递增的序列号。
    • 序列号是全局唯一的,即使节点被删除后,序列号也不会被重用。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -s /persistent-sequential-node "data"
      
  4. 临时顺序节点 (Ephemeral Sequential Node)

    • 兼具临时节点和顺序节点的特性。
    • 当创建该节点的客户端会话结束时,节点会被自动删除,并且创建时会自动添加一个递增的序列号。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -e -s /ephemeral-sequential-node "data"
      

特性总结

  • 持久节点 (Persistent Node):

    • 不会自动删除。
    • 可以有子节点。
    • 适用于需要长期存在的数据。
  • 临时节点 (Ephemeral Node):

    • 客户端会话结束时自动删除。
    • 不能有子节点。
    • 适用于表示客户端的存在或状态。
  • 持久顺序节点 (Persistent Sequential Node):

    • 不会自动删除。
    • 创建时自动添加序列号。
    • 适用于需要唯一标识符的场景,例如任务分配。
  • 临时顺序节点 (Ephemeral Sequential Node):

    • 客户端会话结束时自动删除。
    • 创建时自动添加序列号。
    • 适用于需要临时唯一标识符的场景,例如临时任务分配。

使用场景示例

  • 分布式锁

    • 使用临时顺序节点实现分布式锁。每个客户端创建一个临时顺序节点,通过比较节点的序列号来决定谁获得锁。
  • 配置管理

    • 使用持久节点存储配置信息,所有客户端都可以读取这些配置。
  • 服务发现

    • 使用临时节点注册服务实例,当服务实例宕机时,对应的临时节点会被自动删除。
  • 任务调度

    • 使用持久顺序节点分配任务,每个任务有一个唯一的序列号,确保任务的唯一性和有序性。

查看节点

依次创建以上四种节点,然后执行ls /命令可以看到创建的所有节点:

在这里插入图片描述

查看节点数据

示例:

get /ephemeral-node

在这里插入图片描述

2.文件系统层次结构

在 Apache ZooKeeper 中,节点(znode)可以形成一个层次结构,类似于文件系统中的目录和文件。每个节点可以有父节点和子节点。

注意,不能为临时节点创建子节点。

假设我们已经有了一个名叫persistent-node的父节点,可以为它创建一个子节点:

create /persistent-node/node1 "node1"

在这里插入图片描述

3.watcher

ZooKeeper 的 Watcher 机制是一种事件通知机制,允许客户端在特定事件发生时收到通知。这对于实现分布式协调和同步非常有用。

  • Watcher 机制的工作原理:
    注册 Watcher:客户端可以在创建节点、获取节点数据、列出子节点等操作时注册一个 Watcher。注册 Watcher 后,当指定的事件发生时,ZooKeeper 会向客户端发送一个通知。
  • 事件类型:
    NodeCreated:节点被创建。
    NodeDeleted:节点被删除。
    NodeDataChanged:节点的数据发生变化。
    ChildChanged:节点的子节点列表发生变化。
  • 一次性通知:
    每个 Watcher 只触发一次。一旦触发,客户端需要重新注册 Watcher 以继续接收后续的通知。

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

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

相关文章

PE结构之导出表

导出表结构中各种值的意义 ​​​​​​ 根据函数地址表遍历函数名称RVA表,和上面的图是逆过程 //函数地址表 和当前内存中的位置DWORD AddressOfFunctionsFOA RVAToFOA(LPdosHeader, LPexprotDir->AddressOfFunctions);PDWORD LPFunctionsAddressInMemary (PDWORD)((cha…

ssm基于VUE的图书馆管理系统的设计与实现+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 …

Android终端GB28181音视频实时回传设计探讨

技术背景 好多开发者,在调研Android平台GB28181实时回传的时候,对这块整体的流程,没有个整体的了解,本文以大牛直播SDK的SmartGBD设计开发为例,聊下如何在Android终端实现GB28181音视频数据实时回传。 技术实现 Andr…

基于ESP32的灌溉系统

精准灌溉优化与高效水资源利用:基于IoT的农业解决方案 引言 传统农业实践缺乏实时监控和高效操作,导致效率低下和产量不高。本项目旨在利用物联网(IoT)技术和低成本通信协议,设计一个解决方案来解决这一问题。提出的…

Docker实践与应用举例

目录 1. 引言 2. Docker的基本概念 2.1 什么是Docker容器 2.2 Docker镜像 2.3 Docker架构 3. Docker的应用场景 3.1 开发与测试环境的隔离 3.2 持续集成与持续交付(CI/CD) 3.3 微服务架构 4. Docker的实践案例 4.1 部署Nginx反向代理 4.2 使用…

研发线上事故风险解读之缓存篇

专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》,进一步深入梳理线上事故缓存使用方面的问题点,重点关注缓存在使用和优化过程中可能出现的问题,旨在为读者提供具有实践指导意义的…

学习如何将Spring Boot Jar包注册成Windows服务

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在开发Spring Boot应用时,我们通常通过命令行或IDE手动启动项目。然而,在生产环境中,为了提升效率和稳定性,我们更希望应用能够自动启动,并且作为Wi…

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条(trackbar)的当前…

【H2O2|全栈】JS入门知识(二)

目录 JS 前言 准备工作 运算符 算数运算符 比较运算符 自增、自减运算符 逻辑运算符 运算符的优先级 分支语句 if-else语句 switch语句 三元表达式 结束语 JS 前言 本系列博客主要分享JavaScript的基础语法知识,本期为第二期,包含一些简…

Linux基础命令系列一小白必掌握

前言 为了有一个大概的复习框架所以先给出总的思维导图,如图: 目录 1.Linux的目录结构?Linux命令与命令行是什么?Linux命令基础格式? 2.ls命令 3.cd命令 4.mkdir命令 5.touch命令 6.cat命令 7.cp命令 8.mv命令…

大数据开发电脑千元配置清单

大数据开发电脑配置清单 电脑型号HUANANZHI 台式电脑操作系统Windows 11 专业版 64位(Version 23H2 / DirectX 12)处理器英特尔 Xeon(至强) E5-2673 v3 2.40GHz主板HUANANZHI X99-P4T(P55 芯片组)显卡NVIDIA GeForce GT 610 ( 2…

深入剖析递归算法:原理、特点、应用与优化策略

在上一篇文章👉【剖析十大经典二叉树题目】中,运用到了大量的递归算法,故本文将解析递归算法。 目录 💯引言 💯递归算法的定义与原理 ⭐定义 ⭐原理 💯递归算法的特点 ⭐简洁性 ⭐可读性 ⭐通用性 …

linux下编译鸿蒙版boost库

我在上一篇文章中介绍了curl和openssl的编译方式(linux下编译鸿蒙版curl、openssl-CSDN博客),这篇再介绍一下boost库的编译。 一.环境准备 1.鸿蒙NDK 下载安装方式可以参考上篇文章,完毕后NDK的路径为:/home/ubuntu…

Java学习Day47:戏耍黑手道人(项目记录)

1.项目背景 2.技术选择 3.环境搭建 1.创建空项目 创建health_parent父文件用来控制依赖,类型为quickStart 打包方式为,pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。…

信息抽取数据集处理——RAMS

引言 RAMS数据集(RAMS:Richly Annotated Multilingual Schema-guided Event Structure)由约翰斯霍普金斯大学于2020年发布,是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件,涵盖了139种不同的事件类型和65种…

服务端技术架构演进之路

服务端技术架构演进之路 目录 服务端技术架构演进之路 0.架构中常见概念及理解 1.单机架构 2.应用数据分离架构 3.应用服务器集群架构 4.读写分离/主从分离架构 5.冷热分离架构 6.垂直分库架构 7.微服务架构 8.容器编排架构 本文以一个 " 电子商务 " 应…

Android 未来可能支持 Linux 应用,Linux 终端可能登陆 Android 平台

近日,根据 android authority 的消息,Google 正在开发适用于 Android 的 Linux 终端应用,而终端应用可以通过开发人员选项启用,并将 Debian 安装在虚拟机中。 在几周前,Google 的工程师开始为 Android 开发新的 Termi…

应急实战(10):Linux后门帐号

目录 1. Prepare 1.1 部署安全设备 2. Detect 2.1 设备产生告警 3. Contain 4. Eradicate 4.1 删除后门帐号 4.2 加固弱口令帐号 5. Recover 5.1 恢复帐号登录 6. Follow-Up 6.1 修改登录端口 6.2 开启命令记录 1. Prepare 1.1 部署安全设备 部署主机安全产品:牧云H…

自定义多级联动选择器指南(uni-app)

多端支持:可以运行在H5、APP、微信小程序还是支付宝小程序,都可以轻松使用改组件。自定义配置:您可以根据需要配置选择器的级数,使其适应不同的数据结构和用例。无限级联:此组件支持无限级联选择,使您能够创…

类和对象(完结)

文章目录 一对构造函数的补充1初始化链表2必须在初始化链表定义的情况3对于在类中成员变量初始化的总结4总结二类型转换1格式2规则三static成员1规则四友元1定义2 两种例子五匿名对象1格式2特殊情况 一对构造函数的补充 1初始化链表 结构:类名(参数&…