01、认识Zookeeper与Win和Linux安装

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6天前
|
负载均衡 Java 应用服务中间件
nginx安装在linux上
nginx安装在linux上
34 2
|
9天前
|
Linux 开发工具 C语言
Linux 安装 gcc 编译运行 C程序
Linux 安装 gcc 编译运行 C程序
31 0
|
9天前
|
Ubuntu Linux Python
Linux(15)Ubuntu安装ninja构建工具
Linux(15)Ubuntu安装ninja构建工具
27 0
|
1天前
|
存储 关系型数据库 MySQL
linux安装MySQL8.0,密码修改权限配置等常规操作详解
linux安装MySQL8.0,密码修改权限配置等常规操作详解
|
2天前
|
Linux Python Windows
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
|
3天前
|
Ubuntu Linux 开发工具
【专栏】如何在 Linux 上安装和使用 exa?
【4月更文挑战第28天】在Linux上,exa是一个现代化的文件管理系统替代工具,提供直观的文件信息展示。要安装exa,可以在基于Debian的系统(如Ubuntu)上运行`sudo apt install exa`,基于RedHat(如CentOS)的系统运行`sudo yum install exa`,或从源代码编译安装。使用exa的基本命令是`exa`,它列出当前目录的文件和目录。通过选项如`-F`(显示文件类型)、`-h`(人类可读大小)、`-l`(详细信息)和`-s`(排序)可以定制输出。exa还能与其他命令(如grep)结合使用,提升效率。
|
3天前
|
存储 监控 Linux
【专栏】如何在 Linux 中列出已安装的驱动器?
【4月更文挑战第28天】在 Linux 中,了解已安装驱动器是系统管理的关键。本文介绍了三种方法:1) 使用 `lsblk` 命令显示设备名、大小和类型;2) `fdisk -l` 命令提供详细分区信息;3) `gnome-disks` 等系统管理工具展示驱动器信息。此外,还讨论了驱动器类型识别、挂载点概念及其应用。通过这些方法,用户能有效地监控和管理 Linux 系统中的驱动器。
|
3天前
|
存储 Linux 虚拟化
虚拟机(vmware)中安装linux系统
虚拟机(vmware)中安装linux系统
|
4天前
|
监控 关系型数据库 MySQL
|
6天前
|
关系型数据库 MySQL Java
Linux 安装 JDK、MySQL、Tomcat(图文并茂)
Linux 安装 JDK、MySQL、Tomcat(图文并茂)
28 2