zookeeper基本讲解及使用

rayallenbj rayallenbj     2023-01-11     683

关键词:

本文摘录于:http://blog.51cto.com/tchuairen/1859494;https://blog.csdn.net/peace1213/article/details/52571445。感谢作者,侵删。

一、ZooKeeper概述

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZK开源的特性,后来我们的开发者在分布式锁的基础上,摸索出了其他使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。https://cwiki.apache.org/confluence/display/ZOOKEEPER/Index.

ZK是基于内存同步数据的,所以集群内的节点其内存中的数据结构完全相同,因此效率非常高。

ZooKeeper的几个特性决定了它能够用在大型的分布式的系统中:

1、顺序一致性:从同一客户端发出的事务请求,最终将会严格按照其发起顺序被应用到ZK中。

2、原子性:所有事务请求的处理结果在整个集群所有机器上的应用情况是一致的,即要么整个集群中所有机器都应用了某一事务,要么都没应用,一定不会出现部分机器应用了该事务,另外一部分没应用的情况。

3、单一视图:无论客户端连接的是哪个zookeeper的服务,其看到的服务端数据模型都是一致的。

4、可靠性:一旦服务端成功地应用了某种事务,并完成对客户端响应,那么该事务所引起的服务端状态变更会一直保留下来,除非有另一事务对其进行了更改。

5、实时性:zookeeper并不是强一致性,只能保证顺序一致性和最终一致性,只能称为达到了伪实时性。

二、ZooKeeper的数据模型

zookeeper拥有一个层次的命名空间,这个和标准的文件系统非常相似,如图:

 技术分享图片

zookeeper采用树形层次结构,树中的每个节点被称为--Znode,Znode也可以拥有子节点。

引用方式:

Znode通过路径引用,如同Unix中的文件路径。必须是绝对路径,因此他们必须由斜杠字符来开头。除此之外,他们必须是唯一的,也就是说每个路径只有一个表示,因此这些路径不能改变。在ZooKeeper中,路径由Unicode字符串组成,并且有一些限制。字符串"/zookeeper"用以保存管理信息,比如关键配额信息。

Znode结构:

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

1、stat:此为状态信息,描述该Znode版本、权限等信息。

2、data:与该Znode关联的数据

3、children:该Znode下的节点

 

ZooKeeper虽然可以关联一些数据,但并没有被设计为常规的数据库或者大数据存储,相反的是,它用来管理调度数据,比如分布式应用中的配置文件信息、状态信息、汇集位置等等。这些数据的共同特性就是它们都是很小的数据,通常以KB为大小单位。Zookeeper的服务器和客户端都被设计为严格检查并限制每个Znode的数据大小最多为1M,但常规使用中应该远小于该值。

三、节点类型

ZooKeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。

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

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

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

监视器:客户端可以在节点上设置watch。当节点状态发生改变时(Znode的增、删、改)将会触发watch对应的操作。当watch被触发时,Zookeeper将会对客户端发送且仅发送一条通知,因为watch只能被触发一次,这样可以减少网络流量。

Zookeeper有多种记录时间的形式,其中包含以下几个主要属性。

1、Zxid

致使ZooKeeper节点状态改变的每一个操作都将使节点接收到一个Zxid格式的时间戳,并且这个时间戳全局有序。也就是说,也就是说,每个对节点的改变都将产生一个唯一的Zxid。如果Zxid1的值小于Zxid2的值,那么Zxid1所对应的事件发生在Zxid2所对应的事件之前。实际上,ZooKeeper的每个节点维护者三个Zxid值,为别为:cZxid、mZxid、pZxid。

(1)cZxid: 是节点的创建时间所对应的Zxid格式时间戳。

(2)mZxid:是节点的修改时间所对应的Zxid格式时间戳。

实现中Zxid是一个64为的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个 新的epoch。低32位是个递增计数。

2、版本号

对节点的每一个操作都将致使这个节点的版本号增加。每个节点维护着三个版本号,他们分别为:

(1)version:节点数据版本号

(2)cversion:子节点版本号

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

ZooKeeper节点属性:

 技术分享图片

 四、分布式锁的应用

主要步骤是:
1.建立一个节点,假如名为:lock 。节点类型为持久节点(PERSISTENT)
2.每当进程需要访问共享资源时,会调用分布式锁的lock()或tryLock()方法获得锁,这个时候会在第一步创建的lock节点下建立相应的顺序子节点,节点类型为临时顺序节点(EPHEMERAL_SEQUENTIAL),通过组成特定的名字name+lock+顺序号。
3.在建立子节点后,对lock下面的所有以name开头的子节点进行排序,判断刚刚建立的子节点顺序号是否是最小的节点,假如是最小节点,则获得该锁对资源进行访问。
4.假如不是该节点,就获得该节点的上一顺序节点,并给该节点是否存在注册监听事件。同时在这里阻塞。等待监听事件的发生,获得锁控制权。
5.当调用完共享资源后,调用unlock()方法,关闭zk,进而可以引发监听事件,释放该锁。
实现的分布式锁是严格的按照顺序访问的并发锁。









zookeeper命令使用及监控

本文只讲解zookeeper的四字命令及客户端连接服务端的zkCli.sh命令的使用及zookeeper的监控,如果需要安装请参考zookeeper安装及简介1.客户端获取zookeeper服务性能及详细信息的四字命令用户在客户端可以通过telnet或nc向ZooKeeper提交相应... 查看详情

zookeeper环境搭建及使用

本文只讲解搭建步骤,先不讲原理相关知识一、zookeeper下载地址  本文使用版本为zookeeper-3.4.10.tar.gz   地址:http://mirrors.shuosc.org/apache/zookeeper/二、zookeeper安装  将zookeeper-3.4.10.tar.gz拷贝到某个目录,本人linux目录... 查看详情

kafka的安装及基本使用(代码片段)

1、安装zookeeper#解压缩[[email protected]zookeeper]#tar-zxvfzookeeper-3.4.12.tar.gz[[email protected]zookeeper]#mvzookeeper-3.4.12zk_simple#复制zoo_simple.cfg到zoo.cfg[[email protected]zookeeper 查看详情

在windows下kafka的基本配置及简单使用

首先下载zookeeper(版本zookeeper-3.4.13)和kafka(版本kafka_2.12-2.0.0),解压就可以使用了。1、zookeeper:在config目录下,有zoo.conf这个配置文件,可以配置端口和日志存储的位置,可以根据自己习惯更改。首先启动zookeeper,如果环境... 查看详情

zookeeper原理及使用

ZooKeeper是HadoopEcosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分... 查看详情

zookeeper原理及使用(转)

原文地址ZooKeeper是HadoopEcosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,... 查看详情

zookeeper的原理及使用

ZooKeeper是HadoopEcosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分... 查看详情

zookeeper开源客户端curator之基本功能讲解

简介Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括接连重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶... 查看详情

简要分析zookeeper基本原理及安装部署

一、ZooKeeper基本概念1、ZooKeeper是什么?Zookeeper官网地址:http://zookeeper.apache.org/Zookeeper官网文档地址:http://zookeeper.apache.org/doc/trunk/index.htmlZooKeeper是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统;它提供的... 查看详情

03_zookeeper基本数据模型及基本命令操作(代码片段)

【Zookeeper基本数据模型及注意点】 *zk的数据模型可以类比为Linux的文件目录,是一种树状结构,如:/dubbo/com.service.DemoService/provider....*每一个节点都称之为znode,它可以有子节点,也可以有数据。*每个节点分为临时节点和永... 查看详情

zookeeper--配置文件讲解客户端使用

   Java操作zookeeper创建节点 创建子节点CreateMode.EPHEMETAL临时节点保证本次回话有效,本次会话结束临时节点消失,可以实现分布式事务锁        获取子节点    查看详情

zookeeper集群的配置及使用(代码片段)

...op,spark,kafka交流群:224209501本节所讲内容:1)Zookeeper集群几个配置项2)如何启动Zookeeper各个节点和查看节点状态3)Zookeeper客户端命令行连接及基本命令使用(create、ls、get、rmr等命令)zookeeper的基础介... 查看详情

基于matlab的车牌识别基本原理及算法讲解

  本博文为由星火燎原研发中心推出的基于MATLAB的车牌识别项目的配套解释博文,主要介绍各步骤算法的原理及用到的函数,方便大家快速理解该程序的工作原理,并在此基础上进行修改或者二次开发,该程序... 查看详情

利用zookeeper实现分布式锁及服务注册中心(代码片段)

原文:利用Zookeeper实现分布式锁及服务注册中心对于Zookeeper的定义以及原理,网上已经有很多的优秀文章对其进行了详细的介绍,所以本文不再进行这方面的阐述。本文主要介绍一些基本的准备工作以及zookeeper.net的使用。本文源... 查看详情

zookeeper3.zookeeper环境搭建1

之前我们讲解了Zookeeper的基本概念,下面我们来动手搭建Zookeeper的环境。我们主要在本机上模拟集群环境,使用虚拟机,所以在开始搭建之前,我们要准备以下环境:(1)Vmware虚拟机(2)Linux操作系统:ubuntu16.4(3)SecureCRT(连... 查看详情

zookeeper之watcher监听事件丢失分析

在上篇博客中,介绍了zookeeper客户Curator对监听事件的封装及应用——《Zookeeper开源客户端Curator之事件监听详解》在讲解部分代码实例的运行结果时我们已经注意到,并不是所有的监听事件都会发送到客户端。比如连续更改一个... 查看详情

zookeeper使用及安装

1.安装查看:http://ifeve.com/zookeeper-talk-quick-start/2.使用:  Zookeeper是一个高性能的分布式应用协调服务的框架。Zookeeper=Zoo+keeper,中文直译是动物园的看守者。  Zookeeper可以用于解决很多分布式系统遇到的问题,比如分... 查看详情

zookeeper基本使用(代码片段)

Zookeeper(三)基本使用zk基本使用数据模型ZooKeeper数据模型Znode节点类型事务id节点状态信息Watcher(数据变更通知)ACL(权限管控)ZooKeeper命令⾏操作创建节点读取节点更新节点删除节点zkAPI使用建立会话创... 查看详情