Zookeeper 图形化工具来了

https://mp.weixin.qq.com/s?__biz=MzkwNzI0MzQ2NQ==&mid=2247489450&idx=2&sn=00976ce0ba87c1d08d6b4963f90f1e29

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

简介

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

分布式协调

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

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

安装

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

Windows安装

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

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

  • 进入bin目录,启动ZooKeeper服务;

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

Image

Linux安装

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

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

  • 配置文件zoo.cfg内容如下,直接使用VIM编辑即可;

  • 运行ZooKeeper容器。

命令行操作

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

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

  • 通过help可以命令查看ZooKeeper的常用命令;

  • 大家都知道Redis是通过key-value的形式存储数据的,而ZooKeeper是通过znode-value的形式存储数据的,znode有点像目录,而/目录就是ZooKeeper中的根目录,通过如下命令可以查看所有znode;

  • 创建一个znode叫做/zk_test,存储字符串my_data,这用起来有点像Redis;

  • 查看所有znode,可以看到zk_test这个znode;

  • 获取znode中存储的数据;

  • 修改znode中的数据;

  • 删除znode中的数据;

可视化管理

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

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

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

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

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

Image

节点类型

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

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

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

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

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

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

创建成功后显示如下:

Image

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

Image

作为注册中心使用

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

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

  • 之后修改配置文件application.yml,添加ZooKeeper相关配置;

  • 这里还是使用《Spring Cloud学习教程》中的例子,有两个服务zookeeper-ribbon-servicezookeeper-user-service,前者通过Ribbon远程调用后者;

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

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

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

总结

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

参考资料

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

Last updated

Was this helpful?