顶级分布式开源项目,配上这款可视化工具,真香
mhr18 2024-12-04 13:45 19 浏览 0 评论
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 args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b|-N|-B] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b|-N|-B val path
stat [-w] path
sync path
version
whoami
- 大家都知道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:2181
discovery:
# 作为服务注册
register: true
# 注册时使用IP地址而不是hostname
prefer-ip-address: true
- 这里还是使用《Spring Cloud学习教程》中的例子,有两个服务zookeeper-ribbon-service和zookeeper-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,大家感兴趣的话可以深入研究下!
相关推荐
- Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway
-
AI-generatedimageAsianFin--Dubaiisrapidlytransformingitselffromadesertoilhubintoaglob...
- OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs
-
TMTPOST--OpenAIisescalatingthepricewarinlargelanguagemodel(LLM)whileseekingpartnershi...
- 黄仁勋说AI Agent才是未来!但究竟有些啥影响?
-
,抓住风口(iOS用户请用电脑端打开小程序)本期要点:详解2025年大热点你好,我是王煜全,这里是王煜全要闻评论。最近,有个词被各个科技大佬反复提及——AIAgent,智能体。黄仁勋在CES展的发布...
- 商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署
-
1、本文属于mini商城系列文档的第0章,由于篇幅原因,这篇文章拆成了6部分,本文属于第5部分2、mini商城项目详细文档及代码见CSDN:https://blog.csdn.net/Eclipse_...
- Python+Appium环境搭建与自动化教程
-
以下是保姆级教程,手把手教你搭建Python+Appium环境并实现简单的APP自动化测试:一、环境搭建(Windows系统)1.安装Python访问Python官网下载最新版(建议...
- 零配置入门:用VSCode写Java代码的正确姿
-
一、环境准备:安装JDK,让电脑“听懂”Java目标:安装Java开发工具包(JDK),配置环境变量下载JDKJava程序需要JDK(JavaDevelopmentKit)才能运行和编译。以下是两...
- Mycat的搭建以及配置与启动(mycat2)
-
1、首先开启服务器相关端口firewall-cmd--permanent--add-port=9066/tcpfirewall-cmd--permanent--add-port=80...
- kubernetes 部署mysql应用(k8s mysql部署)
-
这边仅用于测试环境,一般生产环境mysql不建议使用容器部署。这里假设安装mysql版本为mysql8.0.33一、创建MySQL配置(ConfigMap)#mysql-config.yaml...
- Spring Data Jpa 介绍和详细入门案例搭建
-
1.SpringDataJPA的概念在介绍SpringDataJPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Re...
- 量子点格棋上线!“天衍”邀您执子入局
-
你是否能在策略上战胜量子智能?这不仅是一场博弈更是一次量子智力的较量——量子点格棋正式上线!试试你能否赢下这场量子智局!游戏玩法详解一笔一画间的策略博弈游戏目标:封闭格子、争夺领地点格棋的基本目标是利...
- 美国将与阿联酋合作建立海外最大的人工智能数据中心
-
当地时间5月15日,美国白宫宣布与阿联酋合作建立人工智能数据中心园区,据称这是美国以外最大的人工智能园区。阿布扎比政府支持的阿联酋公司G42及多家美国公司将在阿布扎比合作建造容量为5GW的数据中心,占...
- 盘后股价大涨近8%!甲骨文的业绩及指引超预期?
-
近期,美股的AI概念股迎来了一波上升行情,微软(MSFT.US)频创新高,英伟达(NVDA.US)、台积电(TSM.US)、博通(AVGO.US)、甲骨文(ORCL.US)等多股亦出现显著上涨。而从基...
- 甲骨文预计新财年云基础设施营收将涨超70%,盘后一度涨8% | 财报见闻
-
甲骨文(Oracle)周三盘后公布财报显示,该公司第四财季业绩超预期,虽然云基建略微逊于预期,但管理层预计2026财年云基础设施营收预计将增长超过70%,同时资本支出继上年猛增三倍后,新财年将继续增至...
- Springboot数据访问(整合MongoDB)
-
SpringBoot整合MongoDB基本概念MongoDB与我们之前熟知的关系型数据库(MySQL、Oracle)不同,MongoDB是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和...
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
-
概述 Jmeter最早是为了测试Tomcat的前身JServ的执行效率而诞生的。到目前为止,它的最新版本是5.3,其测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JM...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway
- OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs
- 黄仁勋说AI Agent才是未来!但究竟有些啥影响?
- 商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署
- Python+Appium环境搭建与自动化教程
- 零配置入门:用VSCode写Java代码的正确姿
- Mycat的搭建以及配置与启动(mycat2)
- kubernetes 部署mysql应用(k8s mysql部署)
- Spring Data Jpa 介绍和详细入门案例搭建
- 量子点格棋上线!“天衍”邀您执子入局
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)