初识ZooKeeper

初识ZooKeeper

概述

ZooKeeper是一个分布式服务框架,用来管理分布式环境中的数据。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

数据模型

Zookeeper会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统。

结构特点

每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1

znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录

znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据

znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了

znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2

znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

ZooKeeper的安装

1. 下载ZooKeeper

从官网下载最新版本

2. 解压

选择一个目录,解压下载的ZooKeeper

3. 创建配置文件

解压后文件夹里有一个示例配置文件zoo_sample.cfg,可以直接重命名为zoo.cfg,也可以拷贝一份命名为zoo.cfg

单机模式

: 心跳的时间间隔

: Zookeeper保存数据的目录

: 客户端连接Zookeeper的端口

集群模式

集群模式只需在单机配置的基础上增加下面几个配置项。

zookeeper的主节点称为Leader,从节点称为Follower。Leader是根据选举算法由集群节点选举出来的。 : zookeeper的Leader节点接受Follower节点初始化连接时最长能忍受的心跳时间间隔数(10 * 2000ms 即20秒)。 : Leader与Follower之间发送消息时,请求和应答时间最长不能超过的时间间隔数(5 * 2000ms 即10秒)。 : A是一个数字,表示这个是第几号服务器;B是服务器的ip地址;C是服务器与集群中的Leader交换信息的端口;D表示选举时使用的端口

除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid(文件名为myid),这个文件在dataDir目录下,文件内容为A的值。Zookeeper启动时会读取这个文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

4. 启动ZooKeeper服务器

执行如下命令:

$ bin/zkServer.sh start

ZooKeeper的客户端操作

zookeeper目前没有官方的图形界面系统,可使用命令行工具进行操作。客户端命令主要有:create、get、set、ls、stat、rmr

启动客户端

列出子项,可以查看根目录下有哪些子项

创建节点

查看节点元数据

修改节点数据

查看节点状态

移除节点

ZooKeeper的代码示例

好处

简单的分布式协调过程

同步 - 服务器进程之间的相互排斥和协作。此过程有助于Apache HBase进行配置管理

有序的消息

序列化 — 根据特定规则对数据进行编码。确保应用程序运行一致

可靠性

原子性 - 数据转移完全成功或完全失败,但没有事务是部分的

用途

命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点

配置管理 - 加入节点的最近的和最新的系统配置信息

集群管理 - 实时地在集群和节点状态中加入/离开节点

选举算法 - 选举一个节点作为协调目的的leader

锁定和同步服务 - 在修改数据的同时锁定数据

高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据

参考链接

分布式服务框架 ZookeeperZookeeper教程

Zookeeper教程

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

扫码关注云+社区

领取腾讯云代金券