01、认识Zookeeper与Win和Linux安装

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 01、认识Zookeeper与Win和Linux安装

一、认识Zookeeper


zookeeper我们可以近似看作一个树形目录文件系统,是一个分布式协调应用,其它注册中心有EureKa, Nacos等。


what:zookeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,主要可用来实现分布式锁、配置维护、分布式消息队列、分布式通知/协调等。


数据结构:zookeeper设计了一种全新的数据结构(Znode),并且在Znode上定义了一些原语(关于该数据结构的一些操作)因为zookeeper是工作在一个分布式的环境下,所以还需要一个通知机制(watch机制)来将消息通过网络发送给分布式应用程序。


核心总结:zookeeper所提供的服务主要是通过:Znode数据结构+原语+watch机制,三个部分来实现的,那么接下来就从这三个方面来简单介绍一下zookeeper。


二、Zookeeper组成


2.1、数据模型


zookeeper拥有一个层次的命名空间。



采用树型结构,在zookeeper树中的每个节点都称为znode,每个节点也都有子节点。


引用方式:Zonde通过路径引用,如同Unix中的文件路径。路径必须是绝对且唯一的,因此他们必须由斜杠字符来开头,并且每一个路径只有一个表示。


Znode结构:zookeeper命名空间中的Znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。


组成:stat(状态,Znode的版本, 权限等信息)、data(关联的数据)、children(子节点)。

管理的内容:管理调度数据,比如分布式应用中的配置文件信息、状态信息、汇集位置等等,大多以KB为单位。

容量限制:zookeeper的服务器和客户端都被设计为严格检查并限制每个Znode的数据大小至多1M,但常规使用中应该远小于此值。

数据访问:①每个节点存储的数据相关的操作都是原子性的,读会获取节点所有数据,写会覆盖掉所有数据。②每个节点包含一个ACL(访问控制列表),这个列表规定了用户权限,来用于限制对节点进行访问。


节点类型:分为临时节点和永久节点,类型在创建时即被确定,并且不能改变。


临时节点:节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,zookeeper的临时节点不允许拥有子节点。

永久节点:生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

顺序节点:创建Znode的时候,用户可以请求在zookeeper的路径结尾添加一个递增的计数。这个计数对于此节点的父节点来说是唯一的,它的格式为"%10d"(10位数字,没有数值的数位用0补充,例如"0000000001")。当计数值大于232-1时,计数器将溢出。


监视器(watch):


何时触发:当节点状态发生改变时(Znode的增、删、改)将会触发watch所对应的操作。

触发时的操作:zookeeper将会向客户端发送且仅发送一条通知,因此watch只能被触发一次,这样可以减少网络流量。


2.2、Zookeeper中的时间


包含多种记录时间的形式,属性包含有:Zxid、版本号。


Zxid:每个对节点的改变都将产生一个唯一的Zxid。(如果Zxid1的值小于Zxid2的值,那么Zxid1所对应的事件发生在Zxid2所对应的事件之前。实际 上,zookeeper的每个节点维护者三个Zxid值,为别为:cZxid、mZxid、pZxid。)

cZxid:节点创建时间所对应的Zxid格式时间戳

mZxid:节点最近一次修改的时间所对应的Zxid格式时间戳

pZxid:子节点(或该节点)的最近一次创建/删除的时间所对应的Zxid格式时间戳

对节点的每一个操作都将致使这个节点的版本号增加。每个节点维护着三个版本号:version、cversion、aversion。

version:节点数据版本号

cversion:子节点版本号

aversion:节点所拥有的ACL版本号


2.3、Zookeeper的节点属性



2.4、zookeeper的节点操作



注意:delete或setData【删除、修改】必须明确要更新的Znode的版本号,我们可以调用exists找到。如果版本号不匹配,更新将会失败。 更新zookeeper操作是非阻塞式的。因此客户端如果失去了一个更新(由于另一个进程在同时更新这个Znode),他可以在不阻塞其他进程执行的情况下,选择重新尝试或进行其他操作。


2.5、watch触发器


zookeeper可以为所有的读操作设置watch,这些读操作包括:exists()、getChildren()及getData()。


watch事件是一次性的触发器,当watch的对象状态发生改变时,将会触发此对象上watch所对应的事件。watch事件将被异步地发送给客户端,并且zookeeper为watch机制提供了有序的一致性保证。理论上,客户端接收watch事件的时间要快于其看到watch对象状态变化的时间。

watch类型:


数据watch(data watches):getData和exists负责设置数据watch;

孩子watch(child watches):getChildren负责设置孩子watch。



exists操作上的watch,在被监视的Znode创建、删除或数据更新时被触发。

getData操作上的watch,在被监视的Znode删除或数据更新时被触发。在被创建时不能被触发,因为只有Znode一定存在,getData操作才会成功。

getChildren操作上的watch,在被监视的Znode的子节点创建或删除,或是这个Znode自身被删除时被触发。可以通过查看watch事件类型来区分是Znode,还是他的子节点被删除:NodeDelete表示Znode被删除,NodeDeletedChanged表示子节点被删除。


三、Zookeeper安装


安装前条件:有JDK环境。


启动服务前:不要有进程占用8080、2181端口。


3.1、windows安装Zookper


1、下载与解压


下载地址



解压即可:



2、添加环境变量


# 新建
ZOOKEEPER_HOME  D:\software\server\zookeeper\apache-zookeeper-3.6.3-bin
# path添加
%ZOOKEEPER_HOME%\bin


3、修改配置文件


①安装目录下新增两个文件夹,一个命名为 data ,一个命名为 log


②conf 目录,将目录中的 zoo_sample.cfg 文件,复制一份,重命名为zoo.cfg


③修改 zoo.cfg 配置文件,添加data、log日志的目录:




dataDir=D:\\software\\server\\zookeeper\\apache-zookeeper-3.6.3-bin\\data
dataLogDir=D:\\software\\server\\zookeeper\\apache-zookeeper-3.6.3-bin\\log


4、测试


①首先启动server服务端


进入到bin目录执行:zkServer.cmd





此时你到对应的data、log目录下看有没有snapshot.0、log.1,一般有的话表示启动成功。


②接着来使用client进行尝试连接


执行命令:zkCli.cmd -server 127.0.0.1:2181,尝试连接服务端的2181端口,若是无报错信息,则表示无异常



3.2、Linux安装Zookper(Docker)


为了更快速使用Zookeeper,我们这里使用Docker来进行安装配置:


# 1、拉取zookeeper镜像
docker pull zookeeper
# 2、后台运行zookeeper容器,对外开放2181端口
# -d:后台启动 -e:指定环境变量参数
docker run \
  --restart always \
  -e JVMFLAGS="-Xmx1024m" \
  -p 2181:2181 \
  --name myZookeeper -d zookeeper 
# 3、测试容器
# 进入到容器
docker exec -it fc /bin/bash
# 进入到bin目录下,执行客户端命令进行连接
./zkCli.sh


连接命令效果:


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
14天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
19天前
|
Linux Python
Linux 安装python3.7.6
本教程介绍在Linux系统上安装Python 3.7.6的步骤。首先使用`yum`安装依赖环境,包括zlib、openssl等开发库。接着通过`wget`下载Python 3.7.6源码包并解压。创建目标文件夹`/usr/local/python3`后,进入解压目录执行配置、编译和安装命令。最后设置软链接,使`python3`和`pip3`命令生效。
|
21天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
115 20
|
15天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
140 7
|
21天前
|
Unix Linux 编译器
UNIX/Linux 上的安装
UNIX/Linux 上的安装。
40 2
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
81 4
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
69 5
|
2月前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
89 2
|
2月前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
62 3
|
2月前
|
存储 缓存 Linux
【Linux】另一种基于rpm安装yum的方式
通过本文的方法,您可以在离线环境中使用RPM包安装YUM并进行必要的配置。这种方法适用于无法直接访问互联网的服务器或需要严格控制软件源的环境。通过配置本地YUM仓库,确保了软件包的安装和更新可以顺利进行。希望本文能够为您在特定环境中部署YUM提供实用的指导。
255 0