01、认识Zookeeper与Win和Linux安装

举报
长路 发表于 2022/11/28 20:20:59 2022/11/28
【摘要】 所有博客文件目录索引:[博客目录索引(持续更新)](zookeeper-github地址zookeeper官网核心:一个节点对应一个应用/服务,节点存储的数据就是应用需要的配置信息。what:zookeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,主要可用来实现分布式锁、配置维护、分布式消息队列、分布式通知/协调等。数据结构:zookeeper设计了一种全新的数据结构(),

@[toc]

前言

所有博客文件目录索引:[博客目录索引(持续更新)](

资料

zookeeper-github地址

zookeeper官网

核心:一个节点对应一个应用/服务,节点存储的数据就是应用需要的配置信息。

一、认识Zookeeper

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

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

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

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

二、Zookeeper组成

2.1、数据模型

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

image-20220604110533605

采用树型结构,在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的节点属性

image-20220604094342380

2.4、zookeeper的节点操作

image-20220604094411453

注意: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。

image-20220604094738306

  1. exists操作上的watch,在被监视的Znode创建、删除或数据更新时被触发。
  2. getData操作上的watch,在被监视的Znode删除或数据更新时被触发。在被创建时不能被触发,因为只有Znode一定存在,getData操作才会成功。
  3. getChildren操作上的watch,在被监视的Znode的子节点创建或删除,或是这个Znode自身被删除时被触发。可以通过查看watch事件类型来区分是Znode,还是他的子节点被删除:NodeDelete表示Znode被删除,NodeDeletedChanged表示子节点被删除。

三、Zookeeper安装

安装前条件:有JDK环境。

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

3.1、windows安装Zookper

1、下载与解压

下载地址

image-20220604095151722

解压即可:

image-20220604095416924

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日志的目录:

image-20220604100935945

image-20220604100948834

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

image-20220604101154114

image-20220604101239689

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

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

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

image-20220604101513761

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

连接命令效果:

image-20220604103920087

参考文章

[1] Zookeeper入门,看这一篇就够了!

[2] Windows 安装 Zookeeper 详细步骤windows下安装zookeeper 步骤

[3] docker安装zookeeper的使用说明

[4] ZooKeeper常用操作命令

[5] Zookeeper - 节点类型CreateMode

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。