zookeeper客户端

1.zookeeper

1.1ZooKeeper特性

  • 全局数据一致:集群中每个服务器保存一份相同的数据副本,client无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征;
  • 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
  • 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a在消息 b 前发布,则在所有Server上消息 a 都将在消息b前被发布;偏序是指如果一个消息b在消息 a 后被同一个发送者发布,a 必将排在 b前面。
  • 数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;
  • 实时性:Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

1.2 ZooKeeper 集群角色

img

  • Leader:

    • Zookeeper 集群工作的核心

事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性;

集群内部各个服务器的调度者。

对于 create,setData,delete 等有写操作的请求,则需要统一转发给 leader 处理,leader 需要决定编号、执行操作,这个过程称为一个事务。

  • Follower:

处理客户端非事务(读操作)请求,转发事务请求给 Leader;

参与集群 Leader 选举投票。

此外,针对访问量比较大的 zookeeper 集群,还可新增观察者角色。

  • Observer:

观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader 服务器进行处理。

不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。

1.3ZooKeeper 集群搭建

Zookeeper 集群搭建指的是 ZooKeeper 分布式模式安装。通常由 2n+1台 servers 组成。这是因为为了保证 Leader 选举(基于 Paxos 算法的实现)能过得到多数的支持,所以 ZooKeeper 集群的数量一般为奇数。

Zookeeper 运行需要 java 环境,所以需要提前安装 jdk。对于安装leader+follower 模式的集群,大致过程如下:

  • 配置主机名称到 IP 地址映射配置
  • 修改 ZooKeeper 配置文件

  • 远程复制分发安装文件

  • 设置 myid

  • 启动 ZooKeeper 集群

  • 如果要想使用 Observer 模式,可在对应节点的配置文件添加如下配置:

    peerType=observer

其次,必须在配置文件指定哪些节点被指定为 Observer,如:

server.1:localhost:2181:3181:observer

2.ZooKeeper shell

2.1. 客户端连接

  • 运行 zkCli.sh –server ip 进入命令行工具。

输入 help,输出 zk shell 提示:

img

2.2. shell 基本操作

  • 创建节点

create [-s] [-e] path data acl

其中,-s 或-e 分别指定节点特性,顺序或临时节点,若不指定,则表示持 久节点;acl 用来进行权限控制。

  • 创建顺序节点:

img

  • 创建临时节点:

img

  • 创建永久节点:

img

  • 读取节点

与读取相关的命令有 ls 命令和 get 命令,ls 命令可以列出 Zookeeper 指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get 命令可以获取 Zookeeper 指定节点的数据内容和属性信息。

  • ls path [watch]
  • get path [watch]
  • ls2 path [watch]

img

  • set path data [version]

    • data 就是要更新的新内容,version 表示数据版本。

img

现在 dataVersion 已经变为 1 了,表示进行了更新。

  • 删除节点
  • delete path [version]

若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。

  • Rmr path

可以递归删除节点。

  • quota

  • setquota -n|-b val path 对节点增加限制。

    • n:表示子节点的最大个数
    • b:表示数据值的最大长度
    • val:子节点最大个数或数据值的最大长度
    • path:节点路径

img

  • listquota path 列出指定节点的 quota

img

子节点个数为 2,数据长度-1 表示没限制

  • delquota [-n|-b] path 删除 quota

  • 其他命令

  • history : 列出命令历史

img

  • redo:该命令可以重新执行指定命令编号的历史命令,命令编号可以通过history 查看

3. ZooKeeper 数据模型

3.1 数据结构图

img

图中的每个节点称为一个 Znode。 每个 Znode 由 3 部分组成:

① stat:此为状态信息, 描述该 Znode 的版本, 权限等信息

② data:与该 Znode 关联的数据

③ children:该 Znode 下的子节点

3.2节点类型

  • Znode 有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。

    临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,当然可以也可以手动删除。临时节点不允许拥有子节点。

    永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。
    Znode 还有一个序列化的特性,如果创建的时候指定的话,该 Znode 的名字后面会自动追加一个不断增加的序列号。序列号对于此节点的父节点来说是唯一的,这样便会记录每个子节点创建的先后顺序。它的格式为“%10d”(10 位数字,没有数值的数位用 0 补充,例如“0000000001”)。

    Znode 还有一个序列化的特性,如果创建的时候指定的话,该 Znode 的名字后面会自动追加一个不断增加的序列号。序列号对于此节点的父节点来说是唯一的,这样便会记录每个子节点创建的先后顺序。它的格式为“%10d”(10 位数字,没有数值的数位用 0 补充,例如“0000000001”)。

  • quota 限制是软性限制,还可以继续执行,只是在日志文件打印警告

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页