zookeeper服务介绍

zookeeper

    • 基础概念
    • 安装使用

基础概念

ZooKeeper是一个分布式协调服务,主要用于管理和协调大型分布式系统。它提供了一些基本功能,例如配置维护、名字服务、分布式同步和组服务,这些功能对于分布式应用程序的正常运行至关重要。

主要功能

  1. 配置维护
    ZooKeeper可以存储配置信息,确保分布式系统中的所有节点可以访问相同的配置数据。比如在Hadoop集群中,ZooKeeper用来存储配置信息,使得每个节点都能实时获取最新的配置。

  2. 名字服务
    ZooKeeper提供一个命名服务,允许分布式系统中的各个组件通过名称查找资源或服务。例如,分布式数据库系统可以使用ZooKeeper来存储数据库节点的地址和状态信息。

  3. 分布式同步
    ZooKeeper可以用来实现分布式锁和其他同步机制,确保多个节点之间的操作按预期顺序执行。例如,多个节点试图同时写入同一个文件时,ZooKeeper可以确保只有一个节点可以进行写操作,其他节点则等待锁释放。

  4. 组服务
    ZooKeeper可以监控分布式系统中的节点状态,管理集群中的节点加入和退出事件。例如,在分布式计算系统中,ZooKeeper可以监控各个计算节点的状态,并在节点故障时通知其他节点进行故障恢复。

工作原理

  • 数据模型
    ZooKeeper的数据模型类似于文件系统,采用层次化的命名空间。每个节点称为ZNode,ZNode可以存储数据和子节点。ZNode有两种类型:持久节点(persistent)和临时节点(ephemeral)。

  • 事务日志
    ZooKeeper在处理每个事务(例如数据写操作)时,会记录事务日志,以确保数据的一致性和持久性。这些日志记录在本地磁盘上,确保在ZooKeeper服务器崩溃时能够进行数据恢复。

  • 选举机制
    ZooKeeper集群由多个服务器(称为ensemble)组成,通过选举机制选出一个Leader,其余为Follower。所有写操作必须通过Leader进行,而读操作可以由任意Follower处理。

  • 会话和监听器
    客户端与ZooKeeper集群之间的连接称为会话。ZooKeeper通过心跳机制保持会话的活跃状态。如果在一定时间内没有接收到客户端的心跳,ZooKeeper会认为会话已经过期,并清理相应的临时节点。

  • 客户端可以在节点上设置监听器,当节点状态发生变化时,ZooKeeper会通知相应的客户端。

  • 一致性保证
    ZooKeeper保证了一致性和高可用性,即使在网络分区和节点故障的情况下也能保持数据的一致性。它采用了ZAB协议(ZooKeeper Atomic Broadcast)来确保所有事务按顺序应用于所有服务器。

优点

  1. 高可用性
    ZooKeeper通过集群(ensemble)方式部署,确保了服务的高可用性。即使部分节点故障,集群仍能正常工作。

  2. 强一致性
    ZooKeeper采用ZAB协议(ZooKeeper Atomic Broadcast)保证了数据的一致性,确保每个节点都能看到相同的数据。

  3. 简洁的API
    ZooKeeper提供了一组简单易用的API,使得开发人员能够方便地实现分布式系统中的协调和管理功能。

  4. 自动故障恢复
    ZooKeeper能够自动检测节点故障,并通过选举机制选出新的Leader,继续提供服务。

  5. 灵活的事件通知机制
    ZooKeeper的事件通知机制允许客户端注册监听器,当特定的事件发生时,ZooKeeper会通知客户端,方便实现实时监控和动态调整。

缺点

  1. 单点瓶颈
    ZooKeeper的所有写操作必须通过Leader进行,这可能成为性能瓶颈。在高并发写操作场景下,Leader节点的负载可能会非常高。

  2. 数据一致性与性能的权衡
    ZooKeeper在保证数据一致性的同时,会牺牲一定的性能。在高并发读写场景下,ZooKeeper的性能可能不如一些分布式缓存或数据库。

  3. 延迟
    在网络延迟较高或集群节点较多的情况下,ZooKeeper的同步操作可能会有较高的延迟,影响系统的实时性。

  4. 复杂性
    虽然ZooKeeper的API相对简单,但在实现复杂的分布式协调功能时,仍需要深入理解其工作原理和配置,增加了系统设计和维护的复杂性。

  5. 依赖网络
    ZooKeeper依赖网络进行节点之间的通信和数据同步。如果网络状况不稳定,可能会影响ZooKeeper的性能和可靠性。

适用场景
尽管存在一些缺点,ZooKeeper在以下场景中表现出色:

  • 分布式配置管理
    如Hadoop、Kafka等分布式系统使用ZooKeeper来管理和同步配置信息,确保各节点获取一致的配置信息。

  • 分布式锁
    在需要多个客户端对共享资源进行互斥访问的场景中,ZooKeeper可以实现高效可靠的分布式锁。

  • 服务发现
    在微服务架构中,ZooKeeper可以作为服务注册与发现的基础设施,记录各服务的地址和状态信息。

  • 集群管理
    ZooKeeper可以监控分布式系统中各节点的状态变化,自动处理节点的加入和退出,并通过事件通知机制通知其他节点。

安装使用

Ubuntu2404环境: 官网下载zookeeper包

root@huhy:~# tar -xf apache-zookeeper-3.6.4-bin.tar.gz
root@huhy:~# ls
apache-zookeeper-3.6.4-bin  apache-zookeeper-3.6.4-bin.tar.gz

修改zoo_sample.cfg文件为zoo.cfg

cp apache-zookeeper-3.6.4-bin/conf/zoo_sample.cfg{,.bak}
mv apache-zookeeper-3.6.4-bin/conf/zoo_sample.cfg apache-zookeeper-3.6.4-bin/conf/zoo.cfg
vim apache-zookeeper-3.6.4-bin/conf/zoo.cfg

官网配置文档

tickTime=2000:定义ZooKeeper中的基本时间单位(以毫秒为单位)。这个时间单位被用于ZooKeeper服务器的调度和心跳机制。每个“tick”是2000毫秒(2秒)。

initLimit=10:定义在Leader选举过程中,允许Follower完成初始化同步的tick数量。默认最多10个tick时间(即20秒)来完成初始化同步。

syncLimit=5:定义Leader和Follower之间发送消息和接收确认之间允许的tick数量。如果Follower在指定时间内没有响应,Leader将认为Follower已失效。默认允许最多5个tick时间(即10秒)来完成同步。

dataDir=/tmp/zookeeper:定义存储ZooKeeper快照文件的目录。这个目录存放持久数据,确保在ZooKeeper重启时数据不会丢失。示例中使用了 /tmp/zookeeper,但在生产环境中应该使用更稳定的存储位置。

clientPort=2181:定义客户端连接ZooKeeper服务器的端口号。默认是2181端口。

#maxClientCnxns=60:定义单个客户端IP地址允许的最大连接数。默认被注释掉了,表示使用默认值60。

#autopurge.snapRetainCount=3:定义ZooKeeper在自动清理过程中保留的快照文件数量。此项被注释掉了,表示未启用。

#autopurge.purgeInterval=1:定义自动清理任务的时间间隔(以小时为单位)。设置为0表示禁用自动清理功能。此项被注释掉了,表示未启用。

#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider:定义使用的指标提供者类名。,默认PrometheusMetricsProvider被注释掉了,表示未启用Prometheus指标导出。

#metricsProvider.httpPort=7000:定义指标导出服务的HTTP端口。默认7000端口被注释掉了,表示未启用。

#metricsProvider.exportJvmInfo=true:定义是否导出JVM信息。设置为true表示导出JVM信息。此项被注释掉了,表示未启用。

server.id=host:port1:port2:其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。(一般用于集群)

默认不修改该文件,直接启动

安装java环境

tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_144
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
source /etc/profile
root@huhy:~# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
cd apache-zookeeper-3.6.4-bin/bin/

可查看到为独立模式(单节点)

root@huhy:~/apache-zookeeper-3.6.4-bin/bin# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.6.4-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@huhy:~/apache-zookeeper-3.6.4-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.6.4-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone

连接到 ZooKeeper(bin目录下执行)

./zkCli.sh -server 127.0.0.1:2181
root@huhy:~/apache-zookeeper-3.6.4-bin/bin# ./zkCli.sh -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
2024-06-28 05:54:41,748 [myid:] - INFO  [main:Environment@98] - Client environment:zookeeper.version=3.6.4--d65253dcf68e9097c6e95a126463fd5fdeb4521c, built on 12/18/2022 18:10 GMT
............
WATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]

在 shell 中,键入help以获取可以从客户端执行的命令列表,如下所示:

[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd argsaddWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVEaddauth scheme authcloseconfig [-c] [-w] [-s]connect host:portcreate [-s] [-e] [-c] [-t ttl] path [data] [acl]delete [-v version] pathdeleteall path [-b batch size]delquota [-n|-b] pathget [-s] [-w] pathgetAcl [-s] pathgetAllChildrenNumber pathgetEphemerals pathhistorylistquota pathls [-s] [-w] [-R] pathprintwatches on|offquitreconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]redo cmdnoremovewatches path [-c|-d|-a] [-l]set [-s] [-v version] path datasetAcl [-s] [-v version] [-R] path aclsetquota -n|-b val pathstat [-w] pathsync pathversion
Command not found: Command not found help
[zk: 127.0.0.1:2181(CONNECTED) 1]

详细命令可在官网查看

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

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

相关文章

PHP中单引号双引号

在 PHP 中,字符串可以用单引号()或双引号(")括起来,但它们对变量和特殊字符的处理方式是不同的。 双引号(" ") 双引号内的变量会被解析并替换为其值。 某些特殊字符…

【Unity】 HTFramework框架(五十二)使用 HybridCLR 热更新

更新日期:2024年7月1日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 HybridCLR 热更新一、启用宏定义二、导入HybridCLR三、设置热更新程序集四、资源、代码热更 HybridCLR 热更新 HybridCLR是一个特性完整、零成本、高性能…

中英双语介绍美国的州:宾夕法尼亚州(Pennsylvania)

中文版 宾夕法尼亚州(Pennsylvania)位于美国东北部和中大西洋地区,是美国历史最悠久的州之一,拥有丰富的历史遗产和多样的经济结构。以下是对宾夕法尼亚州各方面的详细介绍: 发音: Pennsylvania 美 [ˌpe…

Mac多线程下载管理器:Neat Download Manage 最新版

Neat Download Manager(NDM)是一款功能强大的下载管理软件,它可以帮助用户更有效地管理和下载网络资源。这款软件支持多种浏览器和协议,可以提升下载速度,恢复中断的下载任务,以及自动化下载过程。在使用任…

亚马逊AWS海外区域账户免费套餐

亚马逊AWS(Amazon Web Services)是全球领先的云服务提供商之一,其提供了广泛的云计算服务,包括计算、存储、数据库、网络和人工智能等。为了吸引新用户和推广其云服务,AWS推出了海外区域账户免费套餐,为用户…

如何设置农历日程提醒 农历提醒小妙招

在中国,农历仍然承载着深厚的文化传统和民俗意义。无论是庆祝传统节日,还是纪念亲朋的生日,农历日期都显得格外重要。然而,随着生活节奏的加快,我们有时会因忙碌而遗忘这些特殊的日子。这时,一个能够准确提…

在Linux系统中挂载硬盘

目录 1. 查看硬盘信息 2. 分区硬盘(如果硬盘没有分区) 3. 格式化分区 4. 创建挂载点 5. 挂载分区 6. 验证挂载 7.设置开机自动挂载(可选) 1. 查看硬盘信息 lsblk 这个命令会列出所有的块设备,包括硬盘 2.…

游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思

对于艾宾浩斯遗忘曲线和函数,我一直都有小小的迷思,总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数,打造更接近人类的AI算法,这篇文章旨在讨论下 目录 3.10. 艾宾浩斯曲线 3.10.1. 定义 3.10.1.1. 曲线计算公式 3.10…

干货分享:Spring中经常使用的工具类(提示开发效率)

环境:Spring5.3…30 1、资源工具类 ResourceUtils将资源位置解析为文件系统中的文件的实用方法。 读取classpath下文件 File file ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX "logback.xml") ; // ...读取文件系统文件 file Resou…

【刷题汇总--数字统计、两个数组的交集、点击消除(栈)】

C日常刷题积累 今日刷题汇总 - day0011、数字统计1.1、题目1.2、思路1.3、程序实现 2、两个数组的交集2.1、题目2.2、思路2.3、程序实现 3、点击消除(栈)3.1、题目3.2、思路3.3、程序实现 今日刷题汇总 - day001 1、数字统计 1.1、题目 请统计某个给定范围[L, R]的所有整数中…

java导入excel接口校验excel版本是否匹配

在业务开发中,一个功能有三四个版本的时候,对应的excel导入模板也是不同的,这个时候对于不同的导入接口就需要进行excel导入模板的校验。 1.思路 思想1:校验当前接口对应的dto字段列是否与当前excel对应的表头是否匹配。 思想2&a…

C++Primer Plus 第十四章代码重用:14.4.10 模板别名(C++11)

CPrimer Plus 第十四章代码重用:14.4.10 模板别名(C11) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:CPrimer Plus 第十四章代码重用:14.4.10 模板别名(C11) 提示:写完文章后&am…

百事可乐推出具有视频屏幕和人工智能技术的智能罐头

在最近于法国戛纳举行的国际创意节上,百事公司推出了创新的智能罐头。这些罐头不同于传统产品,它们采用了环绕式3D屏幕,能够展示高清视频内容,为品牌宣传和促销带来了全新的视角。经过两年多的精心研发,这些智能罐成为…

Linux编程:通过flock实现文件锁

Linux(编程):多进程同步-文件锁_进程间文件锁-CSDN博客 除了fcntl方式的文件锁,linux还提供了另一个api flock,用于完成文件锁。 下面的代码对flock进行了封装: //file_lock.h #ifndef FILE_LOCK_H #define FILE_LOCK_H#include <sys/file.h> #include <sys/typ…

糟糕的管理者都有这几个特征

在我们的职业生涯中&#xff0c;我们都期望能遇到一位英明睿智、引领团队走向辉煌的管理者。然而&#xff0c;现实往往并非总是如此美好&#xff0c;总会有一些管理能力差的人混迹其中&#xff0c;给团队带来诸多困扰。今天&#xff0c;我们就来看看糟糕的管理者身上都有哪些特…

LLM原生开发路线图指南

引言 大型语言模型&#xff08;LLM&#xff09;正在迅速成为现代人工智能的基石。然而&#xff0c;目前还没有出现公认的最佳实践&#xff0c;而且先驱们往往没有明确的开发路线图。因此&#xff0c;这种状况急需要有人重新发明有关轮子&#xff1b;否则&#xff0c;将会使人陷…

【数论】欧拉函数

文章目录 定义性质求法分解质因数线性筛 定义 欧拉函数&#xff1a; φ ( n ) \varphi(n) φ(n) 表示小于等于 n 且与 n 互质的数的个数 性质 对于质数 n n n&#xff0c; φ ( n ) n − 1 \varphi(n)n-1 φ(n)n−1对于两个互质的正数 a 、 b a、b a、b&#xff0c;有 φ…

spring中集成mybatis,并测试是否成功

首先你要配置pom.xml <!-- 连接 MySQL 数据库的驱动程序 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- spring-jdbc -->&…

Advanced slides插件无法预览幻灯片

advanced-slides的官方地址&#xff1a; MSzturc/obsidian-advanced-slides: Create markdown-based reveal.js presentations in Obsidian (github.com) 官方教程和文档&#xff1a; Advanced Slides Documentation (mszturc.github.io) 中文版也有博客翻译了&#xff1a;Ob…

软考中级系统集成项目管理工程师备考笔记

目录 一&#xff0c;通用内容 &#xff08;一&#xff09;信息与信息化 1.1&#xff0c;信息 信息基本概念 信息的传输模型 信息的质量属性 1.2&#xff0c;信息系统 信息系统的基本概念 信息系统定义 信息系统集成 1.3&#xff0c;信息化 信息化层次 信息化的核心…