ZooKeeper作为顶级分布式开源项目,应用非常广泛,Dubbo和Kafka这些知名的开源项目都在使用。之前只是听说过它,并没有仔细研究过。今天带大家来学习下ZooKeeper,主要从ZooKeeper的安装、可视化工具、应用三方面来介绍,希望对大家有所帮助!

 

简介

ZooKeeper是一款分布式协调框架,它可以为分布式系统提供一致性服务。ZooKeeper最初由Yahoo开发,后来捐献给了Apache基金会,现已成功Apache的顶级项目,目前在Github上有9.5k+Star。

 

分布式协调

要理解ZooKeeper我们首先需要了解下什么是分布式协调?这里拿Spring Cloud中注册中心的例子来说吧。

微服务(分布式)系统中有很多服务,相同的服务又有多个实例,我们在应用中可以通过服务名来负载均衡地调用服务,而这些服务有可能会挂掉,也有可能会有新的实例加入。此时我们就需要一个东西来做协调,保存好服务名称和可用实例调用IP的对应关系,此时注册中心就是一个分布式协调者的角色,而ZooKeeper就可以用来充当这个协调者。

 

安装

ZooKeeper的安装无论是Windows还是Linux都是很方便的,我们先来学习下它的安装。

Windows安装

  • 首先下载ZooKeeper安装包,下载地址:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

  • 解压到指定目录,解压完成后目录结构如下;

  • conf目录下创建配置文件zoo.cfg,内容如下;

# 设置心跳时间,单位毫秒
tickTime=2000
# 存储内存数据库快照的文件夹
dataDir=I:/developer/env/apache-zookeeper-3.7.0-bin/data
# 监听客户端连接的端口
clientPort=2181
  • 进入bin目录,启动ZooKeeper服务;

zkServer.cmd
  • 服务启动成功后,控制台会输出如下信息。

Linux安装

  • 使用Docker安装ZooKeeper无疑是最方便的,首先我们下载它的Docker镜像;

docker pull zookeeper:3.7.0
  • 创建好ZooKeeper的配置文件目录,并切换到该目录创建配置文件zoo.cfg

mkdir /mydata/zookeeper/conf/ -p
cd /mydata/zookeeper/conf/
touch zoo.cfg
  • 配置文件zoo.cfg内容如下,直接使用VIM编辑即可;

# 设置心跳时间,单位毫秒
tickTime=2000
# 存储内存数据库快照的文件夹
dataDir=/tmp/zookeeper
# 监听客户端连接的端口
clientPort=2181
  • 运行ZooKeeper容器。

docker run -p 2181:2181 --name zookeeper \
-v /mydata/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
-d zookeeper:3.7.0

 

命令行操作

接下来我们用命令行来操作下ZooKeeper,熟悉下ZooKeeper的使用。

  • 首先使用zkCli命令行工具连接到ZooKeeper;

zkCli.cmd -server 127.0.0.1:2181
  • 通过help可以命令查看ZooKeeper的常用命令;

[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|-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|-N|-B val pathstat [-w] pathsync pathversionwhoami
  • 大家都知道Redis是通过key-value的形式存储数据的,而ZooKeeper是通过znode-value的形式存储数据的,znode有点像目录,而/目录就是ZooKeeper中的根目录,通过如下命令可以查看所有znode;

[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[zookeeper]
  • 创建一个znode叫做/zk_test,存储字符串my_data,这用起来有点像Redis;

[zk: 127.0.0.1:2181(CONNECTED) 2] create /zk_test my_data
Created /zk_test
  • 查看所有znode,可以看到zk_test这个znode;

[zk: 127.0.0.1:2181(CONNECTED) 3] ls /
[zk_test, zookeeper]
  • 获取znode中存储的数据;

[zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_test
my_data
  • 修改znode中的数据;

[zk: 127.0.0.1:2181(CONNECTED) 5] set /zk_test test_data
[zk: 127.0.0.1:2181(CONNECTED) 6] get /zk_test
test_data
  • 删除znode中的数据;

[zk: 127.0.0.1:2181(CONNECTED) 7] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 8] ls /
[zookeeper]

 

可视化管理

PrettyZoo是一款基于 Apache Curator 和 JavaFX 实现的 Zookeeper 图形化管理客户端。颜值很高,推荐使用。

  • 首先下载PrettyZoo的安装包,下载地址:https://github.com/vran-dev/PrettyZoo/releases

  • 我们需要创建一个连接,连接到ZooKeeper,可以发现PrettyZoo是支持通过SSH通道连接的;

  • 双击连接,我们可以查看到ZooKeeper中存储的数据,很清楚的发现,ZooKeeper是按目录结构存储数据的;

  • 右键目录,我们可以创建和删除znode,有了这个工具,基本上可以和命令行操作说再见了;

  • 如果你还是觉得命令行比较炫酷的话,PrettyZoo也实现了命令行功能,打开命令行标签就可以愉快地敲命令了。

 

节点类型

ZooKeeper中的节点(znode)是有生命周期的,这取决于节点的类型。类型有主要有下面四种:

  • 持久节点(Persistent):默认节点类型,节点创建后,会一直存在。

  • 持久顺序节点(Persistent Sequential):具有持久节点特性,节点名称后会增加自增数字后缀。

  • 临时节点(Ephemeral):临时存在,当创建节点的会话关闭时,节点被删除。

  • 临时顺序节点(Ephemeral Sequential):具有临时节点特性,节点名称后会增加自增数字后缀。

如果你用命令行创建节点的话,顺序特性对应-s选项,临时特性对应-e选项,比如如下命令:

# 创建持久顺序节点
create -s /test/seq segText
# 创建临时节点
create -e /test/tmp tmpText
# 创建临时顺序节点
create -s -e /test/seqTmp setTmpText

创建成功后显示如下:

如果你用PrettyZoo来创建的话,只要勾选一个选项即可。

 

作为注册中心使用

CAP是分布式架构中的重要理论,其包括一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)。我们经常使用的Eureka支持AP,而ZooKeeper支持CP。接下来我们学习下ZooKeeper在Spring Cloud中作为注册中心的应用。

  • ZooKeeper作为注册中心使用,用法基本和Eureka和Consul相同,首先我们需要在pom.xml中添加ZooKeeper的服务发现组件;

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
  • 之后修改配置文件application.yml,添加ZooKeeper相关配置;

spring:cloud:zookeeper:# zookeeper连接地址connect-string: localhost:2181discovery:# 作为服务注册register: true# 注册时使用IP地址而不是hostnameprefer-ip-address: true
  • 这里还是使用《Spring Cloud学习教程》中的例子,有两个服务zookeeper-ribbon-servicezookeeper-user-service,前者通过Ribbon远程调用后者;

  • 分别启动两个服务,我们通过PrettyZoo可以发现,当ZooKeeper作为注册中心时,注册服务的名称、IP、端口都被存储到了里面;

  • 我们调用zookeeper-ribbon-service中的接口测试下,发现可以正常访问,接口地址:http://localhost:8301/user/1

  • 如果这时候我们把zookeeper-user-service服务关掉的话,我们可以发现ZooKeeper会自动删除存储的数据;

  • 由此可以看出,ZooKeeper作为微服务的注册中心是通过临时节点来实现的,当服务上线时会向ZooKeeper中注册,当服务下线时会被ZooKeeper删除,保障了微服务的高可用。

 

总结

今天我们学习了下ZooKeeper的安装、可视化工具PrettyZoo的使用以及ZooKeeper在Spring Cloud中作为注册中心的应用。其实ZooKeeper在分布式系统中还有很多应用,比如说做分布式锁、实现选主功能、取代UUID来生成唯一ID,大家感兴趣的话可以深入研究下!

参考资料

官方文档:https://zookeeper.apache.org/doc/current/zookeeperStarted.html

项目源码地址

https://github.com/macrozheng/springcloud-learning

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

顶级分布式开源项目,配上这款可视化工具,真香!相关推荐

  1. 别用微信文件传输助手了,这6款在线工具真香

    大家好,我是一航! 日常的工作,经常需要做电脑与手机同步.临时的文件共享.保存等:大部分时候,我们都是通过微信来传输,微信虽然方便,但是也存在一些弊端,比如,分享必须是好友.文件大小上限1G.敏感数据 ...

  2. 开发者在行动!中国防疫开源项目登上GitHub TOP榜

    整理 | 唐小引 出品 | CSDN(ID:CSDNnews) [导读]用开发者们的方式支援这场没有硝烟的战争! 截止北京时间 1 月 28 日下午 15:47,全国确诊新型冠状病毒的数字已经到达了 ...

  3. p2p半分布式开源项目调研:

    p2p半分布式开源项目调研: 1.半分布式拓扑结构底层协议FastTrack: FastTrack是采用树型对等网络模型,是集中目录式网络结构的发展模式.处于网络模型中的节点自动组成树型结构,其中计算 ...

  4. 腾讯最新开源项目登上GitHub热榜:QQ音乐等18项业务都在用,日均PV过亿

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 腾讯又又又开源.这次是一个跨端框架,名为Hippy. 在GitHub上开源不到一周,便斩获近1200+星,一举登上趋势榜. 腾讯介绍称,H ...

  5. 开发者在行动!中国防疫开源项目登上 GitHub TOP 榜

    用开发者们的方式支援这场没有硝烟的战争! 整理 | 唐小引 出品 | CSDN(ID:CSDNnews) 截止北京时间 1 月 28 日下午 15:47,全国确诊新型冠状病毒的数字已经到达了 4586 ...

  6. murmurhash2 Python实现(复现开源项目主页上的 Murmurhash2)

    文章目录 1. 简介 1. 原始版本的murmurhash2算法(Google Code 的 Murmurhash 开源项目主页上的 Murmurhash2) 2. Python版 1. 简介 Mur ...

  7. 个人开源项目如何上传maven中央仓库

    最近在写一些开源项目,想把自己写的东西放到maven中央仓库,提供给更多的人使用.所以写这一篇文章,记录一下自研开源项目jar包上传同步maven中央仓库成功的整个过程,这其中还是有不少的坑的. 一. ...

  8. Web工程师必备的43款可视化工具

    国外站点DATAVISUALIZATION.CH为大家总结出了当前热用的43款可视化工具,包括Arbor.Chroma.js.D3.js.Google Chart Tools等,绝对让你一饱眼福. 1 ...

  9. 软件开发的43款可视化工具

    摘要: 国外站点DATAVISUALIZATION.CH为大家总结出了当前热用的43款可视化工具,包括Arbor.Chroma.js.D3.js.Google Chart Tools等,绝对让你一饱眼 ...

最新文章

  1. Script:收集UNDO诊断信息
  2. Excel报表配置说明
  3. Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)下
  4. 【Java 虚拟机原理】Android 类加载机制 ( 双亲委派机制 | BootClassLoader | PathClassLoader | DexClassLoader )
  5. C++ 模板详解(二)
  6. 用 Python 控制你的鼠标和键盘,然后爱怎么玩怎么玩
  7. 前端: 42 种前端常用布局方案,值得收藏!
  8. slab 着色如何最大限度地利用 Cache Lines 或 Cache Rows?
  9. 转载--上下标等特殊符号的输入方法
  10. html5中的input(type=file)的multiple属性,实现多文件上传,并用js控制文件大小,数量
  11. 如何破解校园网wifi?怎样破解校园网不能共享wifi?校园网路由器如何破解?
  12. 小学听力测试英语软件,小学英语听力测试
  13. 微信公众号图片上传接口实例|微信卡卷logo上传实例|微信会员卡logo上传实例
  14. vue和风天气,天气预报
  15. 《春·蜂》processing下的动画技术交互应用
  16. 春考天津计算机知识点资料,天津春季高考统一考试计算机基础科目考试大纲
  17. vscode 下载慢解决方法
  18. reactjs 视频教程
  19. Facade模式新解
  20. svn访问报错500

热门文章

  1. 计算机等级考试java题型_计算机等级考试报考建议
  2. Butter knife 原理
  3. 三星mega2 android os,GALAXY MEGA2
  4. 计算机网络之网络层:7、距离向量算法RIP
  5. (王道408考研操作系统)第二章进程管理-第二节1:调度的基本概念及分类以及进程优先级
  6. Redis持久化RDB
  7. ROS报错:/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h:119:9: error: ‘YOU_MIXED_DIFFERENT
  8. Linux系统编程:获取指定目录下指定文件类型的数量
  9. PL/SQL 训练12--动态sql和绑定变量
  10. 3.使用Selenium模拟浏览器抓取淘宝商品美食信息