Zookeeper
文章平均质量分 83
Zookeeper基础
吴声子夜歌
个人学习记录
展开
-
Zookeeper--四字命令
四字命令四字命令的使用方式非常简单,通常有两种方式。第一种是通过Telnet方式,使用Telnet客户端登录ZooKeeper的对外服务端口,然后直接输入四字命令即可telnet localhost 2181conf第二种则是使用nc方式confconf命令用于输出ZooKeeper服务器运行时使用的基本配置信息,包括clientPort、dataDir和tickTime等,以便运维人员快速地查看ZooKeeper当前运行时的一些参数。注意,conf命令输出的配置信息仅仅是输出原创 2020-05-14 23:52:01 · 1575 阅读 · 0 评论 -
Zookeeper--配置详解
基本配置所谓基本的配置参数是指这些配置参数都是ZooKeeper运行时所必须的,如果不配置这些参数,将无法启动ZooKeeper服务器同时ZooKeeper也会为这些参数设置默认值。这些基本的配置参数包括clientPort、dataDir和tickTime,如下表所示。高级配置...原创 2020-05-14 23:03:55 · 302 阅读 · 0 评论 -
Zookeeper--数据同步
数据同步ZooKeeper集群服务器启动的过程中,整个集群完成Leader选举之后,Learner 会向Leader 服务器进行注册。当Learner 服务器向Leader完成注册后,就进入数据同步环节。简单地讲,数据同步过程就是Leader服务器将那些没有在Learner服务器上提交过的事务请求同步给Learner服务器,大体过程如下图所示。获取Learner状态在注册Learner的最后阶段,Learner服务器会发送给Leader服务器-一个ACKEPOCH数据包,Leader 会从这个数据原创 2020-05-14 22:53:17 · 827 阅读 · 2 评论 -
Zookeeper--数据初始化过程
数据初始化过程数据的初始化工作,其实就是从磁盘中加载数据的过程,主要包括了从快照文件中加载快照数据和根据事务日志进行数据订正两个过程。1.初始化FileTxnSnapLogFileTxnSnapLog是ZooKeeper事务日志和快照数据访问层,用于衔接上层业务与底层数据存储。底层数据包含了事务日志和快照数据两部分,因此FileTxnSnaplog内部又分为FileTxnLog和FileSnap的初始化,分别代表事务日志管理器和快照数据管理器的初始化。2.初始化ZKDatabase完成FileT原创 2020-05-14 22:22:26 · 619 阅读 · 0 评论 -
Zookeeper--数据快照snapshot
数据快照snapshot数据快照是ZooKeeper数据存储中另–个非常核心的运行机制。顾名思义,数据快照用来记录ZooKeeper服务器上某一个时刻的全量内存数据内容,并将其写入到指定的磁盘文件中。文件存储:快照文件存储在dataDir属性配置的目录下。假定我们确定dataDi r为/home/admin/zkData/zk_ data, 那么ZooKeeper在运行过程中会在该目录下建立一个名为version-2 的目录,该目录确定了当前ZooKeeper使用的快照数据格式版本号。运行一段时间后原创 2020-05-14 20:36:51 · 2770 阅读 · 0 评论 -
Zookeeper--事务日志
事务日志Zookeeper的事务日志默认存储在DataLogDir参数的目录下,如果没有配置该参数,则位于dataDir下面。如果我们确定dataLogDi r为/home/admin/zkData/zk_ log,那么ZooKeeper在运行过程中会在该目录下建立一个名字为version-2的子目录,该目录确定了当前ZooKeeper使用的事务日志格式版本号。也就是说,等到下次某个ZooKeeper版本对事务日志格式进行变更时,这个目录也会有所变更。运行一段时间后,我们可以发在/home/admin原创 2020-05-14 20:05:29 · 1480 阅读 · 0 评论 -
Zookeeper--Leader选举概述
服务器启动时期的Leader选举Leader选举的时候,需要注意的一点是,隐式条件便是ZooKeeper的集群规模至少是2台机器,这里我们以3台机器组成的服务器集群为例。在服务器集群初始化阶段,当有一台服务器(我们假设这台机器的myid为1,因此称其为Server1)启动的时候,它是无法完成Leader选举的,是无法进行Leader选举的。当第二台机器(同样,我们假设这台服务器的myid为2,称其为Server2)也启动后,此时这两台机器已经能够进行互相通信,每台机器都试图找到一个Leader,于是便进入原创 2020-05-14 12:54:15 · 199 阅读 · 0 评论 -
Zookeeper--集群版服务器启动
集群服务器启动预启动:统一由QuorumPeerMain作为启动类。解析配置文件zoo.cfg。创建并启动历史文件清理器DatadirCleanupManager.判断当前是集群模式还是单机模式的启动。在集群模式中,由于已经在zoo.cfg中配置了多个服务器地址,因此此处选择集群模式启动ZooKeeper。初始化:创建ServerCnxnFactory。初始化ServerCnxnFactory。创建ZooKeeper数据管理器FileTxnSnapLog。创建QuorumPee原创 2020-05-14 12:42:04 · 308 阅读 · 0 评论 -
Zookeeper--服务器架构、单机版服务器启动
服务器架构单机版服务器启动ZooKeeper服务器的启动,大体可以分为以下五个主要步骤:配置文件解析、初始化数据管理器、初始化网络I/O管理器、数据恢复和对外服务。预启动:统一由QuorumPeerMain作为启动类无论是单机版还是集群模式启动ZooKeeper服务器,在zkServer.cmd和zkServer.sh两个脚本中,都配置了使用org.apache.zookeeper.server.quorum.QuorumPeerMain作为启动入口类。解析配置文件zoo.cfgZ转载 2020-05-14 12:26:54 · 198 阅读 · 0 评论 -
Zookeeper--客户端架构、会话创建过程
客户端架构Zookeeper的客户端主要由以下几个核心组件组成:Zookeeper实例:客户端的入口ClientWatchManager:客户端Watcher管理器HostProvider:客户端地址列表管理器ClientCnxn:客户端核心线程,其内部又包含两个线程,即SendThread和EventThread。前者是一个IO线程,主要负责Zookeeper客户端和服务端之间的网络IO通信;后者是一个事件线程,主要负责对服务端事件进行处理。会话创建过程初始化阶段:初始化Zoo原创 2020-05-14 11:56:57 · 221 阅读 · 0 评论 -
Zookeeper--通信协议
Zookeeper通信协议基于TCP/IP协议,ZooKeeper实现了自己的通信协议来完成客户端与服务端、服务端与服务端之间的网络通信。ZooKeeper通信协议整体.上的设计非常简单,对于请求,主要.包含请求头和请求体,而对于响应,则主要包含响应头和响应体,如下图:协议解析:请求部分下图是一个"获取结点数据"请求的完整协议定义:请求同:RequestHeader请求头中包含了请求的最基本的信息,包括xid和type:xid用于记录客户端请求发起的先后序号,用来确保单个客户端请求的响应顺原创 2020-05-14 00:08:17 · 1490 阅读 · 0 评论 -
Zookeeper--ACL权限控制
ACLACL,即访问控制列表,是一种相对来说比较新颖且更细粒度的权限管理方式,可以针对任意用户和组进行细粒度的权限控制。目前绝大部分Unix系统都已经支持了ACL方式的权限控制,Linux 也从2.6版本的内核开始支持这个特性。ZooKeeper的ACL权限控制和Unix/Linux操作系统中的ACL有一些区别,可以从三个方面来理解ACL机制,分别是:权限模式( Scheme)、 授权对象(ID)和权限(Permission),通常使用“scheme:id:permission” 来标识一个有效的ACL原创 2020-05-13 22:20:23 · 455 阅读 · 1 评论 -
Zookeeper--Watcher数据变更的通知
Watcher机制应的处理。在ZooKeeper中,引入了Watcher机制来实现这种分布式的通知功能。ZooKeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。整个Watcher注册与通知过程如下图:ZooKeeper的Watcher机制主要包括客户端线程、客户端WatchManager和ZooKeeper 服务器三部分。在具体工作流程上,简单地讲,客户端在向ZooKeeper服务器注原创 2020-05-13 18:17:40 · 881 阅读 · 0 评论 -
Zookeeper--数据模型、事务ID、结点类型和版本
数据模型ZooKeeper的视图结构和标准的Unx文件系统非常类似,但没有引入传统文件系统中目录和文件等相关概念,而是使用了其特有的“数据节点”概念,我们称之为ZNode。 ZNode是ZooKeeper中数据的最小单元,每个 ZNode上都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,我们称之为树。在ZooKeeper中,每一个数据节点都被称为-个ZNode,所有ZNode按层次化结构进行组织,形成- - 棵树。ZNode 的节点路径标识方式和Unix文件系统路径非常相似,都是由原创 2020-05-13 14:27:31 · 1777 阅读 · 0 评论 -
Zookeeper--Curator常用工具类
ZKPathsZKPaths提供了一些简单的API来构建ZNode路径、递归创建和删除节点等,其使用方式如下://工具类ZKPaths使用示例public class ZKPaths_Sample { static String path = "/curator_zkpath_sample"; static CuratorFramework client = CuratorFrameworkFactory .builder() .conn原创 2020-05-12 23:00:10 · 653 阅读 · 0 评论 -
Zookeeper--Curator典型使用场景
Curator不仅为开发者提供了更为便利的API接口,而且还提供了一些典型场景的使用参考。这些使用参考都在recipes包中,读者需要单独依赖以下Maven依赖来获取:<!-- Curator工具包 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifa原创 2020-05-12 22:00:28 · 262 阅读 · 0 评论 -
Zookeeper--开源客户端Curator异步接口
Curator异步接口Curator中引入了BackgroundCallback接口,用来处理异步接口调用之后服务端返回的结果信息,其接口定义如下。public interface BackgroundCallback { void processResult(CuratorFramework client, CuratorEvent event) throws Exception;}Backg roundCallback接口只有一一个processResult方法,该方法会在操作完成后被原创 2020-05-12 12:53:06 · 315 阅读 · 0 评论 -
Zookeeper--开源客户端curator常用API
CuratorCurator是 Netflix公司开源的一套 ZooKeeper客户端框架,作者是 Jordan Zimmerman和ZkClient一样, Curator解决了很多 ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher和 NodeExistsException异常等,目前已经成为了Apache的顶级项目,是全世界范围内使用最广泛的 ZooKeeper客户端之一。除了封装- - 些开发人员不需要特别关注的底层细节之外,Curator 还在ZooKeepe原创 2020-05-12 12:08:38 · 261 阅读 · 1 评论 -
Zookeeper--开源客户端ZkClient常用API
ZkClientZkClient是Github上一个开源的ZooKeeper 客户端,是由Datameer 的工程师StefanGroschupf和Peter Voss 一起开发的。ZkClient在ZooKeeper原生API接口之上进行了包装,是一个更易用的ZooKeeper客户端。同时,ZkClient在内部实现了诸如Session 超时重连、Watcher 反复注册等功能,使得ZooKeeper客户端的这些繁琐的细节工作对开发人员透明。Maven依赖:<dependencies>原创 2020-05-12 00:14:25 · 515 阅读 · 0 评论 -
Zookeeper--常用客户端脚本命令
常用客户端脚本命令连接:# 连接本地2181端口zkCli.sh# 连接指定ip和端口zkCli.sh -server ip:port创建:使用create命令可以创建一个Zookeeper结点。create [-s] [-e] path data acl其中,-s或-e分别指定节点特性:持久或临时节点。默认情况下,即不添加-s或-e参数的,创建的是持久节点。执行完上面的命令,就在ZooKeeper的根节点下创建了一个叫作/zk-book的节点,并且节点的数据内容是“123”。原创 2020-05-11 21:02:12 · 346 阅读 · 0 评论 -
Mac下配置Zookeeper单机、集群
下载、安装使用3.4.14版本,下载地址因为Zookeeper为Java开发,需要JDK1.6以上的环境。将下载的tar包解压到一个目录下,比如/opt/zookeeper-3.4.14/,将该目录作为%ZK_HOME%,目录结构如下:单机模式单机模式只是一种特殊的集群模式(只有一台机器的集群)在%ZK_HOME%下创建一个文件夹dataDir修改%ZK_HOME%/conf目录下的zoo_sample.cfg文件,重命名或复制一个为zoo.cfg,然后配置如下:tickTime=2000原创 2020-05-11 20:08:16 · 530 阅读 · 0 评论 -
Zookeeper--ZAB协议
ZAB协议概述ZAB协议,即Zookeeper Atomic Broadcast(Zookeeper分原子消息广播协议),是Zookeeper数据一致性的核心算法。ZAB协议是为分布式协调服务ZooKeeper专门]设计的一种支持崩溃恢复的原子广播协议。ZAB协议的开发设计人员在协议设计之初并没有要求其具有很好的扩展性,最初只是为雅虎公司内部那些高吞吐量、低延迟、健壮、简单的分布式系统场景设计的。在ZooKeeper的官方文档中也指出,ZAB协议并不像Paxos算法那样,是一种通用的分布式一-致性算法,原创 2020-05-11 01:06:13 · 324 阅读 · 0 评论 -
Zookeeper--功能、设计目标、基础概念
Zookeeper介绍ZooKeeper是–个开放源代码的分布式协调服务,由知名互联网公司雅虎创建,是GoogleChubby的开源实现。ZooKeeper的设计目标是将那些复杂且容易出错的分布式–致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。Zookeeper功能Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。原创 2020-05-10 23:32:19 · 372 阅读 · 0 评论 -
Mac使用brew安装zookeeper、启动单机模式
查看可用版本$ brew info zookeeperzookeeper: stable 3.4.14 (bottled), HEADCentralized server for distributed coordination of serviceshttps://zookeeper.apache.org//usr/local/Cellar/zookeeper/3.4.14 (431...原创 2020-02-12 22:39:32 · 3124 阅读 · 0 评论 -
Zookeeper--概述
概述Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。特点Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。更新请求顺序进行,...原创 2020-02-12 22:09:15 · 213 阅读 · 0 评论