首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

分布式协调服务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 = 2000dataDir = /path/to/zookeeper/dataclientPort = 2181initLimit = 10syncLimit = 53.

启动ZooKeeper服务器$ bin/zkServer.sh start4.

启动 CLI$ bin/zkCli.sh5.

停止ZooKeeper服务器$ bin/zkServer.sh stopZookeeper

CLIZooKeeper 命令行界面(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

(一) 创建Znodescreate /path /data

(二) 获取数据get /path

(三) 监视get /path [watch] 1

(四) 设置数据set /path /data

(五) 创建子znodecreate /parent/path/subnode/path /data

(六) 列出子znodels /path

(七) 检查状态stat /path

(八) 删除Znodermr /pathZookeeper 常用APIZooKeeper有一个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)

(四) 创建一个ZnodeZooKeeper类提供了一个方法来在集合 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)

(九) 删除一个Znodedelete 方法来删除指定 znode。delete方法如下:delete(String path, int version)

文章与部分图片来源于网络,如有疑问,请联系删除

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180408B16D9G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券