01、认识Zookeeper与Win和Linux安装

简介: 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


连接命令效果:


相关文章
|
7月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
5月前
|
安全 Linux iOS开发
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
374 6
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
|
5月前
|
消息中间件 Kafka Linux
Linux下安装Kafka 3.9.1
本文介绍Kafka 3.9.1版本的安装与配置,包括通过ZooKeeper或KRaft模式启动Kafka。涵盖环境变量设置、日志路径修改、集群UUID生成、存储格式化及服务启停操作,适用于Linux环境下的部署实践。
627 0
|
7月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
366 5
|
7月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
7月前
|
Ubuntu 安全 Linux
Linux这5款微型发行版,体积小+精简,比win7运行还快,值得安装
以上5款微型发行版体积小且精简,如果你有台旧电脑,不妨试试?
|
7月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
7月前
|
Ubuntu Linux 数据安全/隐私保护
Win10安装Linux子系统教程!如何在Win10系统中安装Ubuntu!
登录系统后,输入cd /返回上一级,然后再输入“ls”查看一下系统文件目录,看看对不对!
|
7月前
|
Ubuntu Linux Shell
手把手教你安装适用于Linux的Windows子系统——Ubuntu
重启完成,你看看重新打开Ubuntu是不是发生了变化,等待几分钟,系统配置完成,根据提示设置用户名和密码即可