分布式协调服务zookeeper知多少

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容