zookeeper简介
由于之前了解一个分布式框架(dubbo)时,其中涉及到zookeeper,因此今天就先来大概的介绍一下zookeeper。zookeeper是一个用来管理大量的主机的分布式协调服务。
(一) 分布式应用程序
分布式应用程序可以通过在它们之间协调以完成特定的任务,快速且有效的方式在多个系统中的网络在给定时间(同时)运行
分布式应用程序有两部分,分别是:服务器和客户端应用程序。如下图所示:
(二) 分布式应用程序的优点
可靠性 可扩展性 透明性
(三) zookeeper提供的服务
命名服务 配置管理 集群管理 节点领导者选举 锁定和同步服务 数据注册表
ZooKeeper基础
(一) ZooKeeper的体系结构
描绘ZooKeeper 的“客户端 – 服务器架构,如下图所示
ZooKeeper 架构的一部分组件如下表中所解释。
1. Client:客户端,发送消息到服务器。
2. Server:服务器,ZooKeeper集成的一个节点,提供所有的服务给客户。
3. 合组:ZooKeeper 服务器组。
4. Leader:它执行自动恢复,如果任何连接的节点的故障的服务器节点。
5. Follower:遵循领导指示服务器节点
(二) 分层命名空间
下图显示了用于内存中表示 ZooKeeper 文件系统的树形结构。 ZooKeeper节点被称为znode。每个znode由一个名称识别,并通过路径(/)序列隔开。
zookeeper名字空间由节点znode构成,其组织方式类似文件系统,其中各个节点相当于目录和文件,通过路径作为唯一标识。与文件系统不同的是,每个节点具有与之对应的数据内容,同时也可以具有子节点。在 ZooKeeper 数据模型中每个 znode 维护一个 stat 结构。 一个统计(stat )只是提供了一个 znode 元数据。 它由版本号、动作控制列表(ACL)、时间戳、数据长度组成。
ZooKeeper组件
同一个zookeeper服务下的server有两种,一种是leader server,另一种是follower server。leader特殊之处在于它有决定权。在zookeeper整个服务下的每台server将复制各个组件。Replicated Database是包含了所有数据的内存数据库
Zookeeper之leader
让我们来分析一下一个领导节点在ZooKeeper集合的选举。考虑集群中有N多的节点。领导人选举的过程如下
所有节点创建一个顺序,znode具有相同路径,/app/leader/guid_。
ZooKeeper 的集合将追加的10位序列号的路径。
对于给定的实例,它在znode创建最小数量的节点成为领导者以及所有其他节点的追随者。
每一个追随者节点监控下一个最小号的znode。
Zookeeper安装配置
(一) 安装Java(略)
(二) ZooKeeper框架的安装
1.下载并tar开解压(略)
2.创建配置文件
打开 并编辑conf/zoo.cfg 配置文件,并将以下所有参数设置为开始点。
tickTime = 2000
dataDir = /path/to/zookeeper/data
clientPort = 2181
initLimit = 10
syncLimit = 5
3. 启动ZooKeeper服务器
$ bin/zkServer.sh start
4. 启动 CLI
$ bin/zkCli.sh
5. 停止ZooKeeper服务器
$ bin/zkServer.sh stop
Zookeeper CLI
ZooKeeper 命令行界面(CLI)是用来与 ZooKeeper 集成作开发进行交互的。这是在调试和使用不同的选项时的工作有用。
为了执行ZooKeeper的CLI操作, ZooKeeper服务器首先要启动 (“bin/zkServer.sh start”) , 然后使用 ZooKeeper 客户端 (“bin/zkCli.sh”). 当客户端启动后,可以执行以下操作:(1)创建znodes,(2)获取数据,(3)监视 znode 变化,(4)设置数据,(5)创建 znode 的子 znode,(6)列出一个 znode 的子 znode,(7)检查状态,(8)删除一个 znode
(一) 创建Znodes
create /path /data
(二) 获取数据
get /path
(三) 监视
get /path [watch] 1
(四) 设置数据
set /path /data
(五) 创建子znode
create /parent/path/subnode/path /data
(六) 列出子znode
ls /path
(七) 检查状态
stat /path
(八) 删除Znode
rmr /path
Zookeeper 常用API
ZooKeeper有一个Java和C绑定的官方API。ZooKeeper社区提供了对于大多数语言(.NET,Python等)的非官方API。使用ZooKeeper的API,应用程序可以连接,互动,操作数据,协调,以及从ZooKeeper集成断开。
(一) ZooKeeper的API基础知识
客户端应遵循下面给出带 ZooKeeper 集成一个清晰的交互步骤。
连接到ZooKeeper 。ZooKeeper 集成分配客户端的会话ID。
定期发送心跳到服务器。否则,ZooKeeper 集成过期的会话ID,那么客户端需要重新连接。
获得/设置只要znodes会话ID是活动的。
从 ZooKeeper 集成断开,当所有的任务都完成后。如果客户端处于非活动状态较长时间,那么 ZooKeeper 集成会自动断开客户机。
(二) Java绑定
让我们这一章中理解最重要的ZooKeeper API。ZooKeeper API的中心部分是ZooKeeper 类。它提供了一些选项来连接 ZooKeeper 集成在其构造,有以下几种方法
•connect − 连接到 ZooKeeper 的集成
•create − 创建一个 znode
•exists − 检查znode是否存在及其信息
•getData − 从一个特定的znode获取数据
•setData − 设置数据在特定znode
•getChildren − 得到一个特定 znode 的所有可用子节点
•delete − 得到一个特定的 znode 及其所有子节点
•close − 关闭连接
(三) 连接到 ZooKeeper 集合
ZooKeeper类通过它的构造函数提供了连接功能。构造函数如下:
ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
(四) 创建一个Znode
ZooKeeper类提供了一个方法来在集合 ZooKeeper 创建一个新的 znode。创建方法如下:
create(String path, byte[] data, List acl, CreateMode createMode)
(五) Exists – 检查一个Znode的存在
exists 方法来检查 znode 的存在。如果指定的 znode 存在它返回一个 znode 元数据。exists 方法如下
exists(String path, boolean watcher)
(六) getData 方法
getData方法来获取连接在指定 znode 及其状态的数据。getData方法如下
getData(String path, Watcher watcher, Stat stat)
(七) setData 方法
SetData方法来修改附着在指定 znode 的数据。SetData方法如下
setData(String path, byte[] data, int version)
(八) getChildren 方法
getChildren方法来得到一个特定的 znode 所有子节点。getChildren 方法如下
getChildren(String path, Watcher watcher)
(九) 删除一个Znode
delete 方法来删除指定 znode。delete方法如下
delete(String path, int version)
本文原创首发于Cobub官网博客,作者:何才
如有转载请注明作者和出处!
推荐一款开源私有化部署的移动应用数据统计分析 系统Cobub Razor
项目地址:https://github.com/cobub/razor
开源社区技术交流QQ群:194022996