您的位置:首页 > 其它

集群与负载均衡技术学习笔记二 分布式应用程序协调服务zookeeper

2016-03-15 16:58 656 查看

zookeeper 的使用

简介

Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务。 它是Hadoop生态系统的重要组件。与之对应的Google类似的服务叫:Chubby

数据模型



基本概念

角色

领导者

学习者

客户端



设计目的

最终一致性

可靠性

实时性

等待无关

原子性:更新只能成功或失败,没有中间状态。

顺序性

原理

Zookeeper的核心是原子广播,保证各个Server之间的同步。实现这个机制的协议叫作Zab协议。Zab协议有两种模式:恢复模式(选主)和广播模式(同步)。

每个Server在工作过程中有三种状态:

- LOOKING

- LEADING

- FOLLOWING

重要概念

Znode,分为:

Regular ZNode常规型Znode,用户需要显式的创建、删除

Ephemeral ZNode:临时型Znode,用户创建它之后,可以显式的删除,也可以在创建它的Session结束后,由ZooKeeper Server自动删除。

ZNode还有一个Sequential特性,如果创建的时候指定的话,该ZNode的名字后面会自动Append一个不断增加的SequenceNo。

Session

Client与ZooKeeper之间的通讯,需要创建一个Session,这个Session会有一个超时时间。因为ZooKeeper集群会把Client的Session信息持久化,所以在Session没超时之前,Client与ZooKeeper Server的连接可以在各个ZooKeeper Server之间透明地移动。

Watcher

ZooKeeper支持一种Watch操作,Client可以在某个ZNode上设置一个Watcher,来Wathcer该Znode上的变化。如果该Xnode上有相应的变化,就会触发这个Watcher,把相应的事件通知给设置Watcher的Client。Watcher是一次性的,触发一次就会被取消。

ZooKeeper特性

读、写(更新)模式

WAL和Snapshot

FIFO

Linearizability

ZooKeeper ClientAPI

create(path,data,flags) 创建Znode

delete(path,version) 删除Znode

exists(path,watch) 判断指定的Znode是否存在

getData(path,watch) 读取指定Znode上的数据,并设置是否watch这个Znode

setData(path,watch) 更新

getChildren(path,watch) 获取子ZNode

sync(path) 把所有在Sync之前的更新操作都进行同步,达到每个请求都在半数以上的ZooKeeper Server上生效。

setAcl(path,acl) 设置Acl

getAcl(path) 获取Acl

主流应用场景

名称服务

分布式应用中,通常需要一套完备的命令机制,既能产生唯一的标识,又方便识别记忆。

配置管理

组员管理

简单互斥锁

互斥锁

读写锁

屏障

双屏障

代码示例

Maven:

<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>


本文学习参考:

http://cailin.iteye.com/blog/2014486/

http://blog.csdn.net/xinguan1267/article/details/38422149
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: