Zookeeper入门看这篇就够了

Zookeeper详解(从安装—入门—使用) Zookeeper是一个分布式的、开源的应用程序的协调服务,本文将一步步带领大家从安装zookeeper,到入门zookeeper,了解zookeeper的基本知识,Java客户端操作等 阅读详情

Zookeeper是什么

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

上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。

1、 文件系统
 

Zookeeper维护一个类似文件系统的数据结构:

 

每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

有四种类型的znode:

  • PERSISTENT-持久化目录节点

    客户端与zookeeper断开连接后,该节点依旧存在

  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

    客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

  • EPHEMERAL-临时目录节点

    客户端与zookeeper断开连接后,该节点被删除

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

    客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

2、 监听通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

就这么简单,下面我们看看Zookeeper能做点什么呢?

Zookeeper能做什么

zookeeper功能非常强大,可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。

 

如上,你大致应该了解zookeeper是个什么东西,大概能做些什么了,我们马上来学习下zookeeper的安装及使用,并开发一个小程序来实现zookeeper这个分布式配置管理的功能。

Zookeeper单机模式安装

Step1:配置JAVA环境,检验环境:java -version

Step2:下载并解压zookeeper

 
  1. # cd /usr/local

  2. # wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz

  3. # tar -zxvf zookeeper-3.4.12.tar.gz

  4. # cd zookeeper-3.4.12

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

# cp conf/zoo_sample.cfg conf/zoo.cfg

Step4:启动zookeeper

# bin/zkServer.sh start

Step5:检测是否成功启动,用zookeeper客户端连接下服务端

# bin/zkCli.sh

Zookeeper使用

使用客户端命令操作zookeeper

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

 

2、创建一个新的 znode ,使用 create /zkPro myData

3、再次使用 ls 命令来查看现在 zookeeper 中所包含的内容:

4、下面我们运行 get 命令来确认第二步中所创建的 znode 是否包含我们所创建的字符串:

5、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:

6、下面我们将刚才创建的 znode 删除

 

使用Java API操作zookeeper

使用Java API操作zookeeper需要引用下面的包

 

下面我们来实现上面说的分布式配置中心:

1、在zookeeper里增加一个目录节点,并且把配置信息存储在里面

2、启动两个zookeeper客户端程序,代码如下所示

 
  1. import java.util.concurrent.CountDownLatch;

  2. import org.apache.zookeeper.WatchedEvent;

  3. import org.apache.zookeeper.Watcher;

  4. import org.apache.zookeeper.Watcher.Event.EventType;

  5. import org.apache.zookeeper.Watcher.Event.KeeperState;

  6. import org.apache.zookeeper.ZooKeeper;

  7. import org.apache.zookeeper.data.Stat;

  8.  
  9. /**

  10. * 分布式配置中心demo

  11. * @author

  12. *

  13. */

  14. public class ZooKeeperProSync implements Watcher {

  15.  
  16. private static CountDownLatch connectedSemaphore = new CountDownLatch(1);

  17. private static ZooKeeper zk = null;

  18. private static Stat stat = new Stat();

  19.  
  20. public static void main(String[] args) throws Exception {

  21. //zookeeper配置数据存放路径

  22. String path = "/username";

  23. //连接zookeeper并且注册一个默认的监听器

  24. zk = new ZooKeeper("192.168.31.100:2181", 5000, //

  25. new ZooKeeperProSync());

  26. //等待zk连接成功的通知

  27. connectedSemaphore.await();

  28. //获取path目录节点的配置数据,并注册默认的监听器

  29. System.out.println(new String(zk.getData(path, true, stat)));

  30.  
  31. Thread.sleep(Integer.MAX_VALUE);

  32. }

  33.  
  34. public void process(WatchedEvent event) {

  35. if (KeeperState.SyncConnected == event.getState()) { //zk连接成功通知事件

  36. if (EventType.None == event.getType() && null == event.getPath()) {

  37. connectedSemaphore.countDown();

  38. } else if (event.getType() == EventType.NodeDataChanged) { //zk目录节点数据变化通知事件

  39. try {

  40. System.out.println("配置已修改,新值为:" + new String(zk.getData(event.getPath(), true, stat)));

  41. } catch (Exception e) {

  42. }

  43. }

  44. }

  45. }

  46. }

两个程序启动后都正确的读取到了zookeeper的/username目录节点下的数据'qingfeng'

3、我们在zookeeper里修改下目录节点/username下的数据

修改完成后,我们看见两个程序后台都及时收到了他们监听的目录节点数据变更后的值,如下所示

 

Zookeeper集群模式安装

本例搭建的是伪集群模式,即一台机器上启动三个zookeeper实例组成集群,真正的集群模式无非就是实例IP地址不同,搭建方法没有区别

Step1:配置JAVA环境,检验环境:java -version

Step2:下载并解压zookeeper

 
  1. # cd /usr/local

  2. # wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz

  3. # tar -zxvf zookeeper-3.4.12.tar.gz

  4. # cd zookeeper-3.4.12

Step3:重命名 zoo_sample.cfg文件

# cp conf/zoo_sample.cfg conf/zoo-1.cfg

Step4:修改配置文件zoo-1.cfg,原配置文件里有的,修改成下面的值,没有的则加上

 
  1. # vim conf/zoo-1.cfg

  2. dataDir=/tmp/zookeeper-1

  3. clientPort=2181

  4. server.1=127.0.0.1:2888:3888

  5. server.2=127.0.0.1:2889:3889

  6. server.3=127.0.0.1:2890:3890

配置说明

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10秒
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
  • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

Step4:再从zoo-1.cfg复制两个配置文件zoo-2.cfg和zoo-3.cfg,只需修改dataDir和clientPort不同即可

 
  1. # cp conf/zoo-1.cfg conf/zoo-2.cfg

  2. # cp conf/zoo-1.cfg conf/zoo-3.cfg

  3. # vim conf/zoo-2.cfg

  4. dataDir=/tmp/zookeeper-2

  5. clientPort=2182

  6. # vim conf/zoo-2.cfg

  7. dataDir=/tmp/zookeeper-3

  8. clientPort=2183

Step5:标识Server ID

创建三个文件夹/tmp/zookeeper-1,/tmp/zookeeper-2,/tmp/zookeeper-2,在每个目录中创建文件myid 文件,写入当前实例的server id,即1.2.3

 
  1. # cd /tmp/zookeeper-1

  2. # vim myid

  3. 1

  4. # cd /tmp/zookeeper-2

  5. # vim myid

  6. 2

  7. # cd /tmp/zookeeper-3

  8. # vim myid

  9. 3

Step6:启动三个zookeeper实例

 
  1. # bin/zkServer.sh start conf/zoo-1.cfg

  2. # bin/zkServer.sh start conf/zoo-2.cfg

  3. # bin/zkServer.sh start conf/zoo-3.cfg

Step7:检测集群状态,也可以直接用命令“zkCli.sh -server IP:PORT”连接zookeeper服务端检测

至此,我们对zookeeper就算有了一个入门的了解,当然zookeeper远比我们这里描述的功能多,比如用zookeeper实现集群管理,分布式锁,分布式队列,zookeeper集群leader选举等等

推荐阅读:https://www.roncoo.com/course/view/255bac222b1b4300b42838b58fea3a2e

文章来源:https://my.oschina.net/u/3796575/blog/1845035

zookeeper教程:入门篇 在分布式系统中,注册中心充当着重要角色,是服务发现、客户端负载均衡中不可缺少的一员。注册中心除了能够实现基本的功能外,它的稳定性、可用性和健壮性对整个分布式系统的流畅运行影响重大。dubbo作为国内一款主流的分布式系统,支持的注册中心有zookeeper、nacos和redis等第三方中间件。... 阅读详情

相关推荐

Zookeeper

Zookeeper概述 Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。 Zookeeper工作机制 特点 1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。 2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。 3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。 4)更新请求顺序执行,来自同一

ijwwio的博客 699

zookeeper安装以及使用

1、zookeeper简介zookeeper(以下简称ZK)是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop、Hbase、Kafka、Jstorm等开源软件的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZK的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功......

燕少江湖 3万+

硅谷刷屏的ClawdBot,让Mac mini卖爆了!创始人爆料:一人开发、100% AI 写代码

这两天,个人 AI 助手 ClawdBot 席卷硅谷,国内外社交平台上全是关于它的讨论。 在试用后,网友们纷纷给出了很高的评价。“它是迄今为止最伟大的 AI 应用,相当于你 24 小时全天候专属 AI 员工。”Creator Buddy 创始人兼 CEO Alex Finn 盛赞道,“这就是他们 (Anthropic) 希望 Claude Cowork 呈现的样子。”

技术引领业务创新 1582

zookeeper快速入门一:zookeeper安装与启动

本文是《zookeeper你想要的全都有系列》之快速入门中的第一篇,欢迎大家观看与指出不足。 写在前面: 不影响教程,笔者安装zookeeper用的是WSL(windows下的linux子系统),当然你想直接在windows上用zookeeper也是可以的。 如果你也想用wsl,可以参考这篇文章Windows10安装Linux系统(WSL) 目录 一、zookeeper下载 二、安装zookeeper 三、linux下启动zookeeper 四、windows下启动zookeeper 进入

马不腾的博客 4万+

SQLSTATE58030

在优化一条SQL的时候遇到了执行错误 gtlions =# select t1.telnumber,t2.ua,t2.url,t1.apply_name,t2.apply_name from tb1 t1 gtlions -# left outer join tb2 t2 on t1.sid = t2.ipsid gtlions-# where t1.sum_date=20141128 a

Gtlions Tracker 3658

Shopee商品详情页反爬实战:手把手逆向x-sap-Ri和x-sap-Sec参数(附完整调试过程)

本文详细解析了Shopee商品详情页反爬机制中的x-sap-Ri和x-sap-Sec参数逆向过程。通过JS逆向技术,从环境数据采集到多层哈希运算,完整拆解了这两个关键参数的生成逻辑,并提供了实战技巧和Node.js实现方案,帮助开发者应对Shopee的动态加密挑战。

weixin_33701251的博客 1595

Zookeeper 入门看这篇就够了

这篇文章主要介绍了 ZooKeeper 的安装配置,ZooKeeper 的基本概念和 zkCli 的使用,并用 zkCli 来实现一个锁,为后面更加深入的学习打好基础。

武培轩 2463

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8365

Zookeeper 入门,看这篇就够了

Zookeeper 简介 与 集群配置 【Storm的各个组件间是通过这个组件进行通信】 简介: Zookeeper是一个开源的分布式协调服务的框架,使各个机器进行之间进行通信 1.1核心功能: 文件系统 通知机制 文件系统: 类似于linux的文件系统目录结构,从根目录(/)开始 1.每一个目录都是一个znode节点 2.每一个znode节点可直接存储数据 3.类型:持久化,持久化顺序,...

留歌__36的博客 1440

Java开源海外跨境电商购物商城源码,TikToK商城系统源码,外贸商城在线交易

最近很火的一款商城源码,朋友分享给我的,完整版,java开源代码,带有非常详细的搭建教程,文件都一个多G,喜欢的可以下载来研究研究!3、创建mall 数据库并导入数据,数据库名用户名为:mall 数据库密码保持为:XXKytcACPX3GbdsH。8、进入cd /data/deploy/mall-tool/目录执行./build.sh脚本。7、宝塔ssh进入cd /data/deploy/mall/ 执行./build.sh脚本。2、安装宝塔环境:安装 Redis、MySQL5.7、Ngin1.2。

百创科技 2821

Java与OSG的梦幻联动:深入编译OpenSceneGraph的Java JNI桥梁,开启3D视觉盛宴的奇幻之旅

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀在编译OpenSceneGraph (OSG) 的Java版本时,首先需要了解OSG本身是一个主要用于3D图形和视觉仿真的开源库,它主要支持C++。然而,OSG 也支持通过JNI(Java Native Interface)与Java集成,这允许Java程序调用OSG的C++库。

java专栏 868

ZooKeeper 入门看这篇就够了

zk zookeeper

global_coding的博客 467

I2C通信——时序图

本文用逻辑分析仪抓取主机I2C通信的时序图,抓取的过程是读某个寄存器的值。

weixin_43772611的博客 7353

【Zookeeper实战】Zookeeper入门到实战看这篇就够了

1. 前言 在上一篇【Zookeeper入门】相关概念总结 中已经完美的讲解了 Zookeeper入门 相关概念总结,接下来讲讲ZooKeeper 实战使用。 这篇文章简单给演示一下 ZooKeeper 常见命令的使用以及 ZooKeeper Java客户端 Curator 的基本使用。介绍到的内容都是最基本的操作,能满足日常工作的基本需要。 如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步! 2. ZooKeeper 安装和使用 2.1.1 linux 安装 zookeeper Step

LoveSummer 4441

OpenClaw 性能调优五步法

本文介绍了优化OpenClaw性能的五步方法,将响应时间从3秒降至300毫秒。首先建立性能基线,分析模型加载、上下文检索等主要瓶颈。五步优化包括:1)启用模型缓存减少60%延迟;2)优化记忆检索策略降低25%延迟;3)并行化工具调用节省40%时间;4)智能选择轻量级模型减少50%推理时间;5)启用流式输出改善70%感知延迟。最终整体性能提升10倍,并建议建立持续监控机制。这些优化方法经过实战验证,适用于不同规模的OpenClaw部署场景。

刘一说的IT专栏 1425

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Zookeeper 入门看这篇就够了 ❤️❤️

Zookeeper本身是Hadoop生态园的中的一个组件,Zookeeper强大的功能,在Java分布式架构中,也会频繁的使用到Zookeeper↓zk作者Doug其实说的那么高大上,Zookeeper就是一个文件系统+监听通知机制的软件而已。

卢卢在路上 829

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 这可能是最为详细的Docker入门吐血总结
下一篇: 树莓派使用红外感应传感器
KerNEL.AC.CN
博客等级 码龄15年 100粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值