01、认识Zookeeper与Win和Linux安装
@[toc]
前言
所有博客文件目录索引:[博客目录索引(持续更新)](
资料
核心:一个节点对应一个应用/服务,节点存储的数据就是应用需要的配置信息。
一、认识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
连接命令效果:
参考文章
[2] Windows 安装 Zookeeper 详细步骤、windows下安装zookeeper 步骤
[4] ZooKeeper常用操作命令
- 点赞
- 收藏
- 关注作者
评论(0)