zookeeper
文章平均质量分 81
zookeeper
软件求生
这个作者很懒,什么都没留下…
展开
-
Zookeeper:State状态信息。
版本-保证分布式数据原子性转载 2020-04-23 10:06:26 · 3432 阅读 · 0 评论 -
ZooKeeper在大型分布式系统中的应用之HBase。
HBase在实现上严格遵守了Google BigTable论文的设计思想。BigTable使用Chubby类负责分布式状态的协调,Chubby,这是Google实现的一种基于Paxos算法的分布式锁服务,而HBase则采用了开源的ZooKeeper服务来完成对整个系统的分布式协调工作。下图中展示了整个HBase架构及其与ZooKeeper之间的结构关系。 ...转载 2017-12-15 14:11:43 · 1137 阅读 · 0 评论 -
ZooKeeper系统模型之ClientCnxn:网络I/O。
ClientCnxn是ZooKeeper客户端的核心工作类,负责维护客户端与服务端之间的网络连接并进行一系列网络通信。下面是ClientCnxn内部的工作原理。Packet Packet是ClientCnxn内部定义的一个对协议层的封装,作为ZooKeeper中请求与响应的载体,其数据结构如下图所示。 从上图中可以看到,Packet...转载 2018-02-12 11:33:50 · 1413 阅读 · 0 评论 -
ZooKeeper系统模型之会话状态。
在ZooKeeper客户端与服务端成功完成连接创建后,就建立了一个会话。ZooKeeper会话在整个运行期间的生命周期中,会在不同的会话状态之间进行切换,这些状态一般可以分为CONNECTING、CONNECTED、RECONNECTING、RECONNECTED和CLOSE等。 如果客户端需要与服务端创建一个会话,那么客户端必须提供一个使用字符串表示的服务器地址...转载 2018-02-27 10:59:51 · 246 阅读 · 0 评论 -
ZooKeeper系统模型之数据模型。
博文中的内容来源《从Paxos到Zookeeper 分布式一致性原理与实践》这一本书,感激不尽。转载 2018-02-07 16:00:18 · 285 阅读 · 0 评论 -
ZooKeeper系统模型之节点特性。
博文中的内容来源《从Paxos到Zookeeper 分布式一致性原理与实践》这一本书,感激不尽。转载 2018-02-07 16:44:32 · 340 阅读 · 0 评论 -
ZooKeeper系统模型之会话创建。
Session Session是ZooKeeper中的会话实体,代表了一个客户端会话。其包含以下4个基本属性。sessionID:会话ID,用来唯一标识一个会话,每次客户端创建新会话的时候,ZooKeeper都会为其分配一个全局唯一的sessionID。 TimeOut:会话超时时间。客户端在构造ZooKeeper实例的时候,会配置一个sessionTimeout参数用于指...转载 2018-02-27 13:53:41 · 231 阅读 · 0 评论 -
ZooKeeper系统模型之会话管理。
分桶策略 ZooKeeper的会话管理主要是由SessionTracker负责的,其采用了一种特殊的会话管理方式,我们称之为“分桶策略”。所谓分桶策略,是指将类似的会话放在同一区块中进行管理,以便于ZooKeeper对会话进行不同区块的隔离处理以及同一区块的统一处理,如下图所示。 在上图所示,我们可以看到,ZooKeeper将所有的会话都分配在了不同的区...转载 2018-02-27 14:47:22 · 511 阅读 · 0 评论 -
ZooKeeper系统模型之会话清理。
当SessionTracker的会话超时检查线程整理出一些已经过期的会话后,那么就要开始进行会话清理了。会话清理的步骤大致可以分为以下7步。标记会话状态为“已关闭”由于整个会话清理过程需要一段的时间,因此为了保证在此期间不再处理来自该客户端的新请求,SessionTracker会首先将该会话的isClosing属性标记为true。这样,即使在会话清理期间接收到该客户端的新...转载 2018-02-27 15:13:16 · 288 阅读 · 0 评论 -
ZooKeeper系统模型之会话重连。
当客户端和服务端之间的网络连接断开时,ZooKeeper客户端会自动进行反复的重连,直到最终成功连接上ZooKeeper集群中的一台机器。在这种情况下,再次连接上服务端的客户端有可能会处于以下两种状态之一。CONNECTED:如果在会话超时时间内重新连接上了ZooKeeper集群中任意一台机器,那么被视为成功。 EXPIRED:如果是在会话超时时间以外重新连接上,那么服务端其...转载 2018-02-27 16:01:13 · 1525 阅读 · 0 评论 -
ZooKeeper之服务器地址列表。
在使用ZooKeeper构造方法时,用户传入的ZooKeeper服务器地址列表,即connectString参数,通常是这样一个使用英文状态逗号分隔的多个IP地址和端口的字符串:192.168.0.1:2181,192.168.0.1:2181,192.168.0.1:2181 从这个地址串中我们可以看出,ZooKeeper客户端允许我们将服务器的所有地址都配置...转载 2018-02-11 17:35:57 · 18285 阅读 · 0 评论 -
ZooKeeper之一次会话的创建过程。
上图所示是客户端一次会话创建的基本过程。在这个流程图中,所有以白色作为底色的框图流程可以看作是第一阶段,我们称之为初始化阶段;以斜线底纹表示的流程是第二阶段,称之为会话创建阶段;以点状底纹表示的则是客户端在接收到服务端响应后的对应处理,称之为响应处理阶段。初始化阶段初始化ZooKeeper对象 通过调用ZooKeeper的构造方法来实例化一个Zoo...转载 2018-02-11 13:54:52 · 610 阅读 · 0 评论 -
ZooKeeper在大型分布式系统中的应用之Kafka。
Kafka主要用于实现低延迟的发送和收集大量的事件和日志数据—— 这些数据通常都是活跃的数据。所谓活跃数据,在互联网大型的Web网站应用中非常常见,通常是指网站的PV数和用户访问记录等。这些数据通常以日志的形式记录下来,然后由一个专门的系统来进行日志的收集与统计。 Kafka是一个吞吐量极高的分布式消息系统,其整体设计是典型的分布与订阅模式系统。在Kafka集群中...转载 2017-12-15 17:29:04 · 555 阅读 · 0 评论 -
ZooKeeper系统模型之Watcher特性总结。
一次性 无论是服务端还是客户端,一旦一个Watcher被触发,ZooKeeper都将其从相应的存储中移除。因此,开发人员在Watcher的使用上要记住的一点是需要反复注册。这样的设计有效地减轻了服务端的压力。试想,如果注册一个Watcher之后一直有效,那么,针对那些更新非常频繁的节点,服务端会不断地向客户端发送事件通知,这无论对于网络还是服务端性能的影响都非常大。客户端串行...转载 2018-02-09 14:27:07 · 286 阅读 · 0 评论 -
ZooKeeper系统模型之ACL。
ZooKeeper的ACL权限控制和Unix/Linux操作系统的ACL有一些区别,读者可以从三个方面来理解ACL机制,分别是:权限控制(Scheme)、授权对象(ID)和权限(Permission),通常使用“scheme:id:permission”来标识一个有效的ACL信息。权限模式:Scheme 权限模式用来确定权限验证中使用校验策略。在ZooKee...转载 2018-02-09 16:26:07 · 314 阅读 · 0 评论 -
Curator工具类之ZKPaths。
博文中的内容来源《从Paxos到Zookeeper 分布式一致性原理与实践》这一本书,感激不尽。转载 2017-12-13 14:51:02 · 1213 阅读 · 0 评论 -
ZooKeeper系统模型之序列化。
对于一个网络通信,首先需要解决的就是对数据的序列化和反序列化处理,在ZooKeeper中,使用了Jute这以序列化组件来进行数据的序列化和反序列化操作。使用Jute进行序列化 下面我们通过一个例子来看看如何使用Jute来完成Java对象的序列化和反序列化。假设我们有一个实体类MockReqHeader(代表了一个简单的请求头),其定义如下所示。/** ...转载 2018-02-11 09:23:35 · 367 阅读 · 0 评论 -
ZooKeeper系统模型之通信协议。
基于TCP/IP协议,ZooKeeper实现了自己的通信协议来完成客户端与服务端、服务端与服务端之间的网络通信。ZooKeeper通信协议整体上的设计非常简单,对于请求,主要包含请求头和请求体,而对于响应,则主要包含响应头和响应体,如下图所示。协议解析:请求部分 我们首先来看请求协议的详细设计,下图定义了一个“获取节点数据”请求的完整协议定义。...转载 2018-02-11 10:52:47 · 783 阅读 · 0 评论 -
ZooKeeper客户端。
ZooKeeper的客户端主要由以下几个核心组件组成。ZooKeeper实例:客户端的入口。 ClientWatchManager:客户端Watcher管理器。 HostProvider:客户端地址列表管理器。 ClientCnxn:客户端核心线程,其内部又包含两个线程,即SendThread和EventThread。前者是一个I/O线程,主要负责ZooKeeper客户端...转载 2018-02-11 11:57:35 · 310 阅读 · 0 评论 -
ZooKeeper系统模型之单机版服务器启动过程。
ZooKeeper服务器的启动,大体可以分为以下五个主要步骤:配置文件解析、初始化数据管理器、初始化网络I/O管理器、数据恢复和对外服务。下图所示是单机版ZooKeeper服务器的启动流程图。预启动 预启动的步骤如下。统一由QuorumPeerMain作为启动类。无论是单机版还是集群模式启动ZooKeeper服务器,在zkServer.cmd和...转载 2018-02-27 17:08:37 · 179 阅读 · 0 评论 -
ZooKeeper系统模型之Follower服务器。
从角色名字上可以看出,Follower服务器是ZooKeeper集群状态的跟随者,其主要工作有以下三个。处理客户端非事务请求,转发事务请求给Leader服务器。 参与事务请求Proposal的投票。 参与Leader选举投票。 和Leader服务器一样,Follower也同样使用了采用责任链模式组装的请求处理链来处理每一个客户端请求,由于不需要负责对事务请i...转载 2018-02-28 17:53:08 · 543 阅读 · 0 评论 -
ZooKeeper系统模型之集群版服务器启动过程。
下图所示是集群版ZooKeeper服务器的启动流程图。预启动 预启动的步骤如下。统一由QuorumPeerMain作为启动类。 解析配置文件zoo.cfg。 创建并启动历史文件清理器DatadirCleanupManager。 判断当前是集群模式还是单机模式的启动。在集群模式中,由于已经在zoo.cfg中配置了多个服务器地址,因此此处选择...转载 2018-02-28 09:56:55 · 276 阅读 · 0 评论 -
ZooKeeper系统模型之snapshot——数据快照。
数据快照是ZooKeeper数据存储中另一个非常核心的运行机制。顾名思义,数据快照用来记录ZooKeeper服务器上某一个时刻的全量内存数据内容,并将其写入到指定的磁盘文件中。文件存储 和事务日志类似,ZooKeeper的快照数据也使用特定的磁盘目录进行存储,可以通过dataDir属性进行配置。 假设我们确定dataDir为/home/adm...转载 2018-03-01 17:13:48 · 6930 阅读 · 0 评论 -
ZooKeeper系统模型之数据初始化。
在ZooKeeper服务器启动期间,首先会进行数据初始化工作,用于将存储在磁盘上的数据文件加载到到ZooKeeper服务器内存中。初始化流程 首先我们先从整体上来看ZooKeeper的数据初始化过程,下图展示了数据的初始化流程。 数据的初始化工作,其实就是从磁盘中加载数据的过程,主要包括了从快照文件中加载快照数据和根据事务日志进行数据...转载 2018-03-02 11:34:28 · 538 阅读 · 0 评论 -
ZooKeeper系统模型之数据同步。
在ZooKeeper集群服务器启动的过程中,整个集群完成Leader选举之后,Learner会向Leader服务器进行注册。当Learner服务器向Leader完成注册后,就进入数据同步环节。简单的讲,数据同步过程就是Leader服务器将那些没有在Learner服务器上提交过的事务请求同步给Learner服务器,大体过程如下图所示。获取Learner状态 ...转载 2018-03-02 15:39:09 · 1739 阅读 · 0 评论 -
ZooKeeper高级配置参数。
参数名 说明 dataLogDir 该参数有默认值:dataDir,可以不配置,不支持系统属性方式配置。 参数dataLogDir用于配置ZooKeeper服务器存储事务日志文件的目录。默认情况下,ZooKeeper会将事务日志文件和快照数据存储在同一个目录中,应尽量将这两者的目录区分开来。 另外,如果条件允许,可以将事务日志的存储配置在一个单独的磁盘上。事...转载 2018-03-05 14:16:25 · 5063 阅读 · 1 评论 -
ZooKeeper基本配置参数。
所谓基本的配置参数是指这些配置参数都是ZooKeeper运行时所必需的,如果不配置这些参数,将无法启动ZooKeeper服务器同时ZooKeeper也会为这些参数设置默认值。这些基本的配置参数包括clientPort、dataDir和tickTime,如下表。 参数名 说明 clientPort 该参数无默认值,必须配置,不支持系统属性方式配置。 参...转载 2018-03-05 13:14:51 · 545 阅读 · 0 评论 -
ZooKeeper实时监控。
所谓实时监控,是指相对实时的对运行中的ZooKeeper集群进行运行状态监控,包括对ZooKeeper节点可用性的监控和集群读写TPS的监控。节点可用性自检 节点可用性自检是指对一个ZooKeeper集群中每个服务器节点的指定数据节点/TAOKEEPER.MONITOR.ALIVE.CHECK定期进行三次如下操作序列:创建连接——发布数据——接收数据更新通...转载 2018-03-05 16:45:57 · 8206 阅读 · 1 评论 -
ZooKeeper构建一个高可用的集群。
集群组成 要搭建一个高可用的ZooKeeper集群,我们首先需要确定好集群的规模。关于ZooKeeper集群的服务器主城,都存在或曾经存在过这样一个错误的认识:为了使得ZooKeeper集群能够顺利的选举出Leader,必须将ZooKeeper集群的服务器数部署成奇数。这里我们需要澄清的一点是:任意台ZooKeeper服务器都能部署且能够正常运行。 其实关于Zo...转载 2018-03-05 18:57:12 · 2632 阅读 · 0 评论 -
ZooKeeper系统模型之事务日志。
文件存储 在部署ZooKeeper集群的时候需要配置一个目录:dataDir。这个目录是ZooKeeper中默认用于存储事务日志文件的,其实在ZooKeeper中可以为事务日志单独分配一个文件存储目录:dataLogDir。 如果我们确定dataLogDir为/home/admin/zkData/zk_log,那么ZooKeeper在运行过程中会在该目录下建立一...转载 2018-03-01 15:48:34 · 755 阅读 · 0 评论 -
ZooKeeper系统模型之内存数据。
ZooKeeper的数据模型是一棵树,而从使用角度看,ZooKeeper就像一个内存数据库一样。在这个内存数据库中,存储了整棵树的内容,包括所有的节点路径、节点数据及其ACL信息等,ZooKeeper会定时将这个数据存储到磁盘上。接下来我们就一起来看看这棵“树”的数据结构,如下图所示。DataTree DataTree是ZooKeeper内存数据存储的...转载 2018-03-01 14:18:36 · 361 阅读 · 0 评论 -
ZooKeeper系统模型之GetData请求。
服务端对于GetData请求的处理,大体可以分为3大步骤,分别是请求的预处理、非事务处理和请求响应,如下图所示。预处理I/O层接收来自客户端的请求。判断是否是客户端“会话创建”请求将请求交给ZooKeeper的PrepRequestProcessor处理器进行处理会话检查 由于GetData请求是非事务请求,因此省去了许多事务预处理逻辑...转载 2018-03-01 13:59:25 · 1434 阅读 · 0 评论 -
ZooKeeper系统模型之Leader选举概述。
Leader选举是ZooKeeper中最重要的技术之一,也是保证分布式数据一致性的关键所在。服务器启动时期的Leader选举 Leader选举的时候,需要注意的一点是,隐式条件便是ZooKeeper的集群规模至少是2台机器,这里我们以2台机器组成的服务器集群为例。在服务器集群初始化阶段,当有一台服务器(我们假设这台机器的myid为1,因此称其为Server1)...转载 2018-02-28 10:53:59 · 179 阅读 · 0 评论 -
ZooKeeper系统模型之Leader选举的实现细节。
服务器状态 为了能够清楚地对ZooKeeper集群中每台机器的状态进行标识,在org.apache.zookeeper.server.quorum.QuorumPeer.ServerState类中列举了4种服务器状态,分别是:LOOKING、FOLLOWING、LEADING和OBSERVING。LOOKING:寻找Leader状态。当服务器处于该状态时,他会认为当前集群中没...转载 2018-02-28 15:51:10 · 726 阅读 · 0 评论 -
ZooKeeper系统模型之Leader服务器。
Leader服务器是整个ZooKeeper集群工作机制中的核心,其主要工作有以下两个。事务请求的唯一调度和处理者,保证集群事务处理的顺序性。 集群内部各服务器的调度者。请求处理链 使用责任链模式来处理每一个客户端请求是ZooKeeper的一大特点。在每一个服务器启动的时候,都会进行请求处理链的初始化,Leader服务器的请求处理链如下图所示。 ...转载 2018-02-28 17:08:25 · 512 阅读 · 0 评论 -
ZooKeeper系统模型之Observer服务器。
Observer是ZooKeeper自3.3.0版本开始引入的一个全新的服务器角色。从字面意思看,该服务器充当了一个观察者的角色——其观察ZooKeeper集群的最新状态变化并将这些状态变更同步过来。Observer服务器在工作原理上和Follower基本是一致的,对于非事务请求,都可以进行独立的处理,而对于事务请求,则会转发给Leader服务器进行处理。和Follower唯一的区...转载 2018-02-28 18:01:49 · 686 阅读 · 0 评论 -
ZooKeeper系统模型之集群间消息通信。
ZooKeeper的消息类型大体上可以分为四类,分别是:数据同步型、服务器初始化型、请求处理型和会话管理型。数据同步型 数据同步型消息是指在Learner和Leader服务器进行数据同步的时候,网络通信所用到的消息,通常有DIFF、TRUNC、SNAP和UPTODATE四种。下表中分别对这四种消息类型进行了详细介绍。 消息类型 发送方→接收方...转载 2018-02-28 18:44:47 · 1107 阅读 · 2 评论 -
ZooKeeper系统模型之会话创建请求。
ZooKeeper服务端对于会话创建的处理,大体可以分为请求接收、会话创建、预处理、事务处理、事务应用和会话响应6大环节,其大体流程如下图所示。其中事务处理部分的流程详见下图所示。请求接收I/O层接收来自客户端的请求 在ZooKeeper中,NIOServerCnxn实例维护每一个客户端连接,客户端与服务端的所有通信都是由NIOServer...转载 2018-03-01 10:11:07 · 648 阅读 · 0 评论 -
ZooKeeper系统模型之SetData请求。
服务端对于SetData请求的处理,大体可以分4大步骤,分别是请求的预处理、事务处理、事务应用和请求响应,如下图所示。预处理I/O层接收来自客户端的请求判断是否是客户端“会话创建”请求 ZooKeeper对于每一个客户端请求,都会检查是否是“会话创建”请求。然而对于SetData请求,因为此时已经完成了会话创建,因此按照正常的事务请求进行处理。...转载 2018-03-01 11:36:19 · 1906 阅读 · 0 评论 -
ZooKeeper系统模型之事务请求转发。
在事务请求的处理过程中,需要我们注意的一个细节是,为了保证事务请求被顺序执行,从而确保ZooKeeper集群的数据一致性,所有的事务请求必须由Leader服务器来处理。但是,并不是所有的ZooKeeper都和Leader服务器保持连接,那么如何保证所有的事务请求都由Leader来处理呢? ZooKeeper实现了非常特别的事务请求转发机制:所有非Leader服务器...转载 2018-03-01 13:50:34 · 913 阅读 · 0 评论