`
haotianpeng163
  • 浏览: 25709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZooKeeper学习

 
阅读更多
[size=medium]转:原文出自

http://www.cnblogs.com/wenfeng762/archive/2011/11/13/2247576.html





高可用的高性能的分布式系统协调服务。局部不可用是分布式系统的固有特征,ZooKeeper可以很好的地处理这种情况。
下面从三个方面来理解ZooKeeper服务:数据模型、操作、实现
数据模型

可以把zookper看成一个文件系统,文件系统中的所有文件形成一个数状结构,zookeeper维护着这样的树形层次结构,树中的节点称为znode。每个znode有一个与之相关联的ACL(Access Control List)。这种数据模型示意图如下:

znode通过路径被引用,而且要采用绝对路径,即必须以/开头。znode存储的数据要<1m。
znode类型
  短暂znode:回话结束,zookeeper就会把短暂znode删除,短暂znode不可以有子节点。
  持久znode:回话结束也不会被删除,除非客户端明确要删除此znode,持久znode可以有子节点。
对于在特定时刻需要知道有哪些分布式资源可用的应用来说,使用短暂znode比较合适。
znode的观察机制
znode以某种方式发生变化时,“观察”(watch)机制可以让客户端得到通知。可以针对ZooKeeper服务的“操作”来设置观察,该服务的其他操作可以触发观察。比如,客户端可以对某个客户端调用exists操作,同时在它上面设置一个观察,如果此时这个znode不存在,则exists返回false,如果一段时间之后,这个znode被其他客户端创建,则这个观察会被触发,之前的那个客户端就会得到通知。

操作

ZooKeeper有9种基本操作:
操作
描述
create
创建一个znode(必须有父节点)
delete
删除一个znode(该znode不能有任何子节点)
exists
测试一个znode是否存在,并且查询它的元数据
getACL,setACL
获取/设置一个znode的ACL
getChildren
获取一个znode的子节点列表
getData,setData
获取/设置一个znode所保存的数据
sync
将客户端的znode视图与ZooKeeper同步
Zookeeper中的更新操作是有条件的。在使用delete或者setData操作时必须提供被更新znode的版本号,如果版本号不匹配,则更新操作失败。
API
目前主要有java和C两种客户端,每种操作都有同步和异步两种执行方式。
观察触发器
可以设置观察的操作:exists,getChildren,getData
可以触发观察的操作:create,delete,setData

观察触发器
设置观察的操作
create
delete
setData
znode
子节点
znode
子节点

exists
NodeCreated

NodeDeleted

NodeDataChanged
getData

NodeDeleted

NodeDataChanged
getChildren

NodeChildrenChanged
NodeDeleted
NodeChildrenChanged

NodeCreated:节点创建事件
NodeDeleted:节点被删除事件
NodeDataChanged:节点数据改变事件
NodeChildrenChanged:节点的子节点改变事件

ACL
每个znode被创建时都会带有一个ACL列表,用于决定谁可以对它执行何种操作。
ACL权限
允许的操作
CREATE
create(子节点)
READ
getChildren
getData
WRITE
setData
DELETE
delete(子节点)
ADMIN
setACL
每个ACL都是身份验证模式、符合该模式的一个身份和一组权限的组合。身份验证模式有三种:
digest:用户名,密码
host:通过客户端的主机名来识别客户端
ip: 通过客户端的ip来识别客户端
所以我们可以类似这样构建一个ACL类:
new ACL(Perms.READ,new Id("host","example.com"));
这个ACL对应的身份验证模式是host
符合该模式的身份是example.com
权限的组合是:READ
实现

Zookeeper有两种运行模式:
独立模式(standalone mode):只运行在一台服务器上,适合测试环境
复制模式(replicated mode):运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)。Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。为什么一定要超过半数呢?这跟Zookeeper的复制策略有关:zookeeper确保对znode树的每一个修改都会被复制到集合体中超过半数的机器上。
生产环境,zookeeper集群的服务器数目应该是奇数。
Zookeeper集群中的角色及其职责

领导者
  1.管理写请求
跟随者
  1.响应客户端的读请求
  2.负责把客户端提交的写请求转发给领导者

回话

客户端与zookeeper集群中的某个服务器建立连接,就建立了一个回话,回话可以过期,可以设置ping周期来防止回话过期。
滴答(tick time):定义了zookeeper中的基本时间周期,其他设置都是根据滴答参数来定义的。2个滴答=<回话时间<=20个滴答时间
状态

  CONNECTING,CONNECTED,CLOSED

Zookeeper采用的算法:Zab(待续)
leader选举
原子广播
[/size][color=darkred][/color]
分享到:
评论

相关推荐

    Zookeeper学习笔记

    【Zookeeper学习笔记】 Zookeeper是一个分布式协调服务,它的核心目标是简化分布式环境下的数据管理与系统协调。作为Apache Hadoop和HBase的重要组件,Zookeeper提供了简单的原语集,支持分布式应用程序之间的通信...

    Zookeeper学习手册

    ### Zookeeper 学习手册知识点概览 #### 1. ZooKeeper 基本概念 - **角色**: - **Leader**:集群中的领导者,负责处理客户端的写请求,并保持集群状态的一致性。 - **Follower**:集群中的跟随者,处理客户端的...

    zookeeper 学习资料 中篇

    《Zookeeper学习资料 中篇》 Zookeeper,作为Apache Hadoop的一个子项目,是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作...

    zookeeper 学习资料 上篇

    在"Zookeeper 学习资料 上篇"中,我们可以预见到将要涉及的ZooKeeper核心概念和基础知识点。首先,我们需要理解ZooKeeper的数据模型,这个模型基于一个层次化的命名空间,类似于文件系统。每个节点称为znode,znode...

    Zookeeper学习教程 包括java源码

    Zookeeper学习 Zookeeper是一个由Java编写并开源的,为分布式系统提供协调服务的框架. Zookeeper概述 Zookeeper最早起源于雅虎研究院的一个小组.当时研究人员发现,在雅虎内部的很多系统基本都依赖一个类似的系统来...

    zookeeper学习视频.rar

    《Zookeeper学习视频》压缩包包含了深入理解与掌握Apache ZooKeeper这一分布式协调服务的重要资源。Zookeeper是一个开源的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈...

    zookeeper 学习资料 下篇

    《Zookeeper学习资料 下篇》 在Zookeeper的学习过程中,下篇主要涵盖了更深入的理论概念、实战技巧以及常见问题的解决策略。Zookeeper,作为分布式协调服务的基石,广泛应用于大数据、云计算等领域,它的核心功能...

    Zookeeper学习笔记.docx

    ZooKeeper 学习笔记 ZooKeeper 是一个开源的分布式协调服务,由 Hadoop 的创始人 Doug Cutting 等人开发。它为分布式应用提供了一个高效、可靠的协调机制,帮助开发者快速构建高可用、可扩展的分布式系统。 ...

    Zookeeper学习中的疑难问题总结,很受用!

    ### Zookeeper 学习中的疑难问题总结 #### 一、Zookeeper 概念与特性 Zookeeper 是一个分布式的、开放源码的应用程序协调服务,它最初是 Google 的 Chubby 项目的开源版本。Zookeeper 在分布式系统中扮演了一个至...

    zookeeper学习入门-搞懂这些就够了

    ### Zookeeper 学习入门知识点 #### 一、Zookeeper 概述与核心价值 - **定义**: Zookeeper 是一个高度可靠的关键值存储系统,它主要用于解决分布式环境中的一致性问题,例如配置管理、命名服务、分布式同步以及...

    ZooKeeper学习之运维工具zkweb

    《ZooKeeper学习之运维工具zkweb》 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和...

    zookeeper学习笔记

    ### Zookeeper 学习笔记 #### 一、Zookeeper 简介与安装配置 **Zookeeper** 是一个分布式协调服务框架,它提供了一种高效可靠的机制来维护集群中的配置信息、命名服务以及提供分布式锁等功能,使得开发人员能够...

    基于Java语言的Zookeeper学习笔记设计源码

    该项目为基于Java语言的Zookeeper学习笔记设计源码,总计包含20个文件,具体构成包括15个Java源文件、3个PNG图片文件以及1个Markdown文件。此外,项目还包含1个XML配置文件,适用于学习和实践Zookeeper相关知识。

    zookeeper学习文档

    Zookeeper学习文档中包含了大量关于Zookeeper分布式协调服务的关键知识点。Zookeeper是一个开源的分布式服务协调框架,最初是为了管理分布式应用而设计的。它被广泛用于实现诸如同步、配置管理、分组和命名服务等...

    zookeeper学习图谱

    zookeeper学习知识点, 脑图

    Zookeeper学习笔记.pdf

    Zookeeper是一种重要的分布式协调服务,尤其在处理高可用性、高性能的应用场景中。它最初设计的核心功能是提供分布式锁服务,但随着社区的发展,Zookeeper的功能得到了扩展,现在还用于配置维护、组服务、分布式消息...

    Zookeeper 学习1

    【Zookeeper 学习1】 Zookeeper 是一个分布式协调服务,广泛应用于分布式系统中的命名服务、配置管理、集群管理等领域。它提供了高可用、高性能的数据一致性保障,是Apache Hadoop项目的一部分。 1、Zookeeper ...

    zookeeper学习笔记.pptx

    本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,

    Zookeeper学习资源和笔记(附代码)

    Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。...通过深入学习和实践,可以更好地应对分布式环境中的各种挑战。

Global site tag (gtag.js) - Google Analytics