
Zookeeper
luckykapok918
这个作者很懒,什么都没留下…
展开
-
Zookeeper系列(一)背景介绍及基本概念
一、ZooKeeper的背景1.1 认识ZooKeeperZooKeeper---译名为“动物园管理员”。动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动 物所观赏。为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才能更加原创 2017-05-10 16:09:14 · 898 阅读 · 0 评论 -
Zookeeper系列(十九)Zookeeper原理解析之数据存储之FileTxnLog& FileTxnSnapLog工具类
FileTxnLog类用来操作事务记录文件下面我们来看看这个类主要实现方法4.1)append方法: 用来向文件尾部添加一条记录 4.1.1)判断当前输入流logStream是否已清空(在同步处理器SyncRequestProcessor中据一定算法得出一个count,记录大于count就要rollLog,开启一个新的文件,算法是: 100000/2转载 2017-05-11 16:12:56 · 389 阅读 · 0 评论 -
Zookeeper系列(二十)Zookeeper原理解析之数据存储之ZKDatabase
ZKDatabase在内存中维护了zookeeper的sessions, datatree和commit logs集合。 当zookeeper server启动的时候会将txnlogs和snapshots从磁盘读取到内存中6.1)loadDatabase: 跟数据库的启动类似zookeeper服务启动结合txnlogs和snapshot, snapshot是内存数据的某个点一份影像,t转载 2017-05-12 09:43:54 · 487 阅读 · 0 评论 -
Zookeeper系列(二十一)Zookeeper原理解析之数据存储小结
Zookeeper数据是以文件形式存储在硬盘上的,以snapshot为主,txnlog为辅。因为当对内存数据进行变更的时候,会保证将事务操作记入log日志,而snapshot只是内存某一个时刻影像,为了性能takeSnapshot生成snapshot并不是实时的,而是由后台线程根据一定规则处理的来看看snapshot和txnlog在磁盘上的文件文件名是以log.或者转载 2017-05-12 09:53:21 · 390 阅读 · 0 评论 -
Zookeeper系列(二十二)Zookeeper原理解析之序列化之底层通信数据封装与操作和Record接口
BinaryInputArchive& BinaryOutputArchive底层通信数据封装与操作 BinaryInputArchive是对于DataInput的封装,用于处理基于zookeeper协议的底层数据,其实是从DataInputStream输入中读取数据。 BinaryOutputArchive是对于DataOutput的封装,根据zookeeper协议将转载 2017-05-12 10:04:50 · 543 阅读 · 0 评论 -
Zookeeper系列(二十三)Zookeeper原理解析之选举流程
选举之QuorumPeerMain加载Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程。首先我们来看下QuorumPeer, 谷歌翻译quorum是法定人数,定额的意思, peer是对等的意思,那么QuorumPeer中quorum代表的意思就是每个zookeeper集群启动的时候集群中zookeeper服务数量就已经确定了,在每个转载 2017-05-12 14:20:39 · 427 阅读 · 0 评论 -
Zookeeper系列(二十四)Zookeeper原理解析之处理流程
服务器端处理流程之处理器链这部分内容我们主要讲解zookeeper请求在zookeeper server端的处理流程,对于不同角色的zookeeper具有不同的处理流程, ZookeepeerServer的start方法中会调用setupRequestProcessors()来初始化处理器链,它被子类覆写实现。 1. LeaderZooKeeperSe转载 2017-05-12 14:31:40 · 662 阅读 · 0 评论 -
Zookeeper系列(二十五)Zookeeper原理解析之客户端与服务器端交互
Zookeeper集群中server数量总是确定的,所以集群中的server交互采用比较可靠的bio长连接模型;不同于集群中sever间交互zookeeper客户端其实数量是未知的,为了提高zookeeper并发性能,zookeeper客户端与服务器端交互采用nio模型。下面我们主要来讲讲zookeeper的服务器端与客户端的交互。读者对nio不了解的话不妨抽点时间去了解下,对于一些nio框架如n转载 2017-05-12 14:48:10 · 487 阅读 · 0 评论 -
Zookeeper系列(二十六)Zookeeper之Ganglia监控安装
Zookeeper是搭建分布式集群中常用的基础工具,所以对其性能的监控就相当重要。虽然可以使用4字命令对Zookeeper进行监控,但是如果可以,还是图形化监控起来更方便一点。本文主要描述如何再Ganglia中增加对Zookeeper的支持 Ganglia版本要求:Ganglia 3.1.x部署下载Git代码:git clone git@github.com:andre转载 2017-05-14 23:16:13 · 386 阅读 · 0 评论 -
Zookeeper系列(二十七)Zookeeper之Centos 中设置成开机启动
部署了Zookeeper之后,当需要重启机器时,开机后往往需要花一点时间对zookeeper集群进行启动,由于zookeeper没有主节点的概念,且一个节点的重启不会对集群造成什么影像,所以可以考虑把 zookeeper设置成开机启动,具体流程如下准备工作切换到/etc/rc.d/init.d/目录下创建zookeeper文件:touch zookeeper更新权限:chm转载 2017-05-14 23:17:14 · 346 阅读 · 0 评论 -
Zookeeper系列(二十八)Zookeeper之通讯模型
本文的主题就是讲解Zookeeper通信模型,本节将通过一个概要图来说明Zookeeper的通信模型。Zookeeper的通信架构在Zookeeper整个系统中,有3中角色的服务,client、Follower、leader。其中client负责发起应用的请求,Follower接受client发起的请求,参与事务的确认过程,在leader crash后的转载 2017-05-14 23:31:27 · 429 阅读 · 0 评论 -
Zookeeper系列(二十九)Zookeeper场景应用之分布式锁实现
1、使用场景分布式锁主要应用在跨主机,跨网络资源访问中的协调控制,例如多个task处理任务,但是要求一个任务只能限制在一台task上处理,这里就可以采取分布式锁来实现访问控制协调。2、实现逻辑基本思想:通过创建一个持久化根节点作为本次锁行为根节点,每个需要获取资源的分布式业务注册一个临时顺序节点挂载到根节点下,每个分布式业务通过节点的顺序来获取锁。在通过顺序转载 2017-05-15 13:55:34 · 372 阅读 · 0 评论 -
Zookeeper系列(三十)Zookeeper场景应用之配置管理中心
1、使用场景配置中心一般用作系统的参数配置,它需要满足如下几个要求:高效获取、实时感知、分布式访问。对于一些少量频次访问的场景我们可以使用mysql数据库实现,但是有些参数在系统中访问频次较高,甚至是接口每访问一次就需要调起获取一次,特别在是大规模系统访问量的情况下,我们就需要一个高效获取实时感知的分布式配置中心。本章节我们使用zookeeper来实现一个分布式配置管理中心组件。2转载 2017-05-15 14:07:34 · 677 阅读 · 0 评论 -
Zookeeper系列(三十一)Zookeeper场景应用之配置服务和分布式锁实列
一、配置服务配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分。简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和更新配置文件。使用ZooKeeper中的观察机制,可以建立一个活跃的配置服务,使那些感兴趣的客户端能够获得配置信息修改的通知。下面来编写一个这样的服务。我们通过两个假设来简化所需实现的服转载 2017-05-15 14:11:14 · 660 阅读 · 0 评论 -
Zookeeper系列(三十二)Zookeeper场景应用之分布式队列
1.分布式队列的架构2.向队列中提交数据流程3.从队列中取数据流程队列的组成[java] view plain copy package com.jike.queue; import java.util.Colle转载 2017-05-15 14:28:31 · 347 阅读 · 0 评论 -
Zookeeper系列(三十三)Zookeeper场景应用之分布式ID生成器
可以理解成一个分布式的ID生成器1.命名服务命名服务可以理解为提供名字的服务Zookeeper的命名服务,有两个应用方向: 1.提供类似JNDI的功能: 利用zookeeper中的树形分层结构,可以把系统中的各种服务的名称,地址以及目录信息存放在zookeeper中,需要的时候去zookeeper中去读取 2.转载 2017-05-15 16:33:06 · 766 阅读 · 0 评论 -
Zookeeper系列(十八)Zookeeper原理解析之数据存储之TxnLog事务日志
事务日志文件用来记录事物操作,每一个事务操作如添加,删除节点等等,都会在事务日志中记录一条记录,用来在zookeeper异常情况下,通过txnlog和snapshot文件来恢复数据,下面我们来看下txnLog事务日志文件的格式打开一个事务日志文件看看一个日志文件LogFile: FileHeader TxnList ZeroPad三部分组成1) 日志文件头转载 2017-05-11 16:11:03 · 468 阅读 · 0 评论 -
Zookeeper系列(十七)Zookeeper原理解析之数据存储之Snapshot
Snapshot是datatree在内存中某一时刻的影像,zookeeper有一定的机制会定时生成datatree的snapshot。FileSnap实现了SnapShot接口负责将数据写入文件中,下面我们来看看snap相关内容。2.1 snapshot文件格式 Snapshot是以二进制形式存在在文件的,我们用ue打开一个新的snapshot文件Sn转载 2017-05-11 16:08:06 · 689 阅读 · 0 评论 -
Zookeeper系列(十六)Zookeeper原理解析之选举之选举流程
QuorumPeer的run方法中主要用来进行选举,以及选举后进入各角色,角色被打破重新再进行选举,下图大体流程2.1.1基本概念Logicalclock, currentEpoch,acceptedEpoch epoch zxid2.2.2选举算法创建 Zookeeper启动的时候,quorumPeer线程的start转载 2017-05-11 16:03:22 · 512 阅读 · 0 评论 -
Zookeeper系列(三)常见的shell命令和基本的API方法
前面虽然配置了集群模式的Zookeeper,但是为了方面学建议在伪分布式模式的Zookeeper学习Zookeeper的shell命令。一、Zookeeper的四字命令Zookeeper支持某些特定的四字命令字母与其的交互。他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令。Zookee原创 2017-05-11 14:29:57 · 950 阅读 · 0 评论 -
Zookeeper系列(二)安装配置与集群搭建
一、Zookeeper的搭建方式Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。1.单机模式:Zookeeper只运行在一台服务器上,适合测试环境;2.伪集群模式:就是在一台物理机上运行多个Zookeeper 实例。3.集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)。Zo原创 2017-05-11 14:03:58 · 575 阅读 · 0 评论 -
Zookeeper系列(四)Zookeeper客户端(JAVA)API之创建会话
Zookeeper对外提供了一套Java的客户端API。本篇博客主要讲一下创建会话。创建项目首选,创建一个基于maven管理的简单java工程。在pom文件中引入zookeeper。dependency> groupId>org.apache.zookeepergroupId> artifactId>zookeeperartifactId> version>3原创 2017-05-11 14:48:37 · 466 阅读 · 0 评论 -
Zookeeper系列(五)Zookeeper客户端(JAVA)API之创建节点
本篇博客主要讲一下使用Zookeeper原生的客户API来创建一个数据节点。创建数据节点方法Zookeeper提供了两个创建数据节点的方法。同步创建数据节点方法:public String create(final String path, byte data[], List acl, CreateMode createMode)原创 2017-05-11 14:51:50 · 510 阅读 · 0 评论 -
Zookeeper系列(六)Zookeeper客户端(JAVA)API之创读取子节点列表
本篇博客介绍一下Zookeeper原生客户端API提供的获取子节点列表方法。获取子节点列表方法方法Zookeeper原生客户端API提供了以下8中获取子节点列表的方法,每个方法的使用说明参考注释内容:/** * 返回指定路径下面的子节点列表。 * 如果watcher不为null,并且调用成功(没有异常),会将watcher注册在指定的path * 上。当path(原创 2017-05-11 14:53:39 · 652 阅读 · 0 评论 -
Zookeeper系列(七)Zookeeper客户端(JAVA)API之创读取子节点内容
本篇博客介绍一下Zookeeper原声API读取节点内容的使用方法。读取节点内容方法介绍方法Zookeeper提供了两个方法来获取节点内容,同步获取和异步获取:public byte[] getData(String path, boolean watch, Stat stat)11public void getData(final String path, Watch原创 2017-05-11 15:00:40 · 722 阅读 · 0 评论 -
Zookeeper系列(八)Zookeeper客户端(JAVA)API之修改、删除节点
本篇博客只介绍修改和删除功能API提供的方法说明,具体案例可参考前篇博客或自行编写。修改节点方法同步方法:public Stat setData(final String path, byte data[], int version)11异步方法:public void setData(final String path, byte data[], int原创 2017-05-11 15:04:53 · 521 阅读 · 0 评论 -
Zookeeper系列(八)Zookeeper客户端(JAVA)API之节点检查和权限控制
本篇博客介绍一下原生API的节点检查是否存在和节点操作权限控制。Zookeeper提供的方法的使用方式与前面增删改查操作类似,具体使用案例不再逐一用实例说明。节点检查是否存在原生API的提供4个相应的方法,通过这些方法,可以检查节点是否存在,返回节点Stat信息,对节点进行注册监听事件等操作。方法public Stat exists(final String path,原创 2017-05-11 15:06:25 · 423 阅读 · 0 评论 -
Zookeeper系列(九)Zookeeper开源客户端之ZKClient和Curator简介
Zookeeper客户端提供了基本的操作,比如,创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。但对于开发人员来说,Zookeeper提供的基本操纵还是有一些不足之处。本篇博客就聊聊这些不足之处和两款开源框架ZKClient和Curator。Zookeeper API不足之处(1)Zookeeper的Watcher是一次性的,每次触发之后都需要重新进行注册;原创 2017-05-11 15:10:39 · 480 阅读 · 0 评论 -
Zookeeper系列(十)Zookeeper开源客户端之ZKClient基本使用
ZkClient是由Datameer的工程师开发的开源客户端,对Zookeeper的原生API进行了包装,实现了超时重连、Watcher反复注册等功能。ZKClient版本及源码maven依赖ZkClient目前有两个不同artifactId的系列。 其中最早的0.1版本maven依赖如下:dependency> groupId>org.apache.zo原创 2017-05-11 15:12:21 · 488 阅读 · 0 评论 -
Zookeeper系列(十一)Zookeeper开源客户端之Curator基本使用
简介Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括接连重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶级项目出现,是最流行的Zookeeper客户端之一。从编码风格上来讲,它提供了基于Fluent原创 2017-05-11 15:17:41 · 635 阅读 · 0 评论 -
Zookeeper系列(十二)Zookeeper开源客户端之Curator的事件监听
Curator对Zookeeper典型场景之事件监听进行封装,提供了使用参考。这篇博文笔者带领大家了解一下Curator的实现方式。引入依赖对于Curator封装Zookeeper的典型场景使用都放在了recipes中。因此,使用之前需先引入此依赖。dependency> groupId>org.apache.curatorgroupId> artifactId原创 2017-05-11 15:26:55 · 492 阅读 · 0 评论 -
Zookeeper系列(十三)Zookeeper开源客户端之Curator的事件监听丢失分析
在上篇博客中,介绍了zookeeper客户Curator对监听事件的封装及应用——《Zookeeper开源客户端Curator之事件监听详解》在讲解部分代码实例的运行结果时我们已经注意到,并不是所有的监听事件都会发送到客户端。比如连续更改一个节点的内容、创建节点再马上删除节点。本篇博客就讨论一下zookeeper监听事件丢失的原因及使用时的注意事项。案例package com.secb原创 2017-05-11 15:30:31 · 1047 阅读 · 0 评论 -
Zookeeper系列(十四)Zookeeper开源客户端之Curator的Master/Leader选举
在实际生产中,特别是分布式系统中,我们经常遇到这样的场景:一个复杂的任务,近需要从分布式机器中选出一台机器来执行。诸如此类的问题,我们统称为“Master选举”。比如,在分布式系统中很常见的一个问题就是定时任务的执行。如果多台机器同时执行相同的定时任务,业务复杂则可能出现灾难性的后果。本篇博客就以定时任务为例来示例说明Curator的Master选举用法。原理利用zookeeper原创 2017-05-11 15:36:37 · 460 阅读 · 0 评论 -
Zookeeper系列(十五)Zookeeper原理解析之数据存储之Zookeeper内存结构
Zookeeper是怎么存储数据的,什么机制保证集群中数据是一致性,在网络异常,当机以及停电等异常情况下恢复数据的,我们知道数据库给我们提供了这些功能,其实zookeeper也实现了类似数据库的功能。1. Zookeeper内存结构 Zookeeper数据在内存中的结构类似于linux的目录结构DataTree代表这个目录结构, D转载 2017-05-11 15:46:46 · 364 阅读 · 0 评论 -
Zookeeper系列(三十三)Zookeeper之leader选举算法补充
1.ZAB(原子广播协议)2.服务器角色3.服务器状态4.集群通信5.选举触发的时机6.影响成为Leader的因素7.初次启动8转载 2017-05-15 16:41:49 · 634 阅读 · 0 评论