Zookeeper快速入门:部署服务、基本概念与操作

一、部署服务

1.下载与安装

  • 下载:

一定要下载编译后的文件,后缀为bin.tar.gz

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
  • 解压:

targetUrl填目标安装目录

tar -zxf apache-zookeeper-3.8.4-bin.tar.gz  targetUrl

2.查看并修改配置文件

配置文件在解压目录下的/conf中,提供了一个示范文件zoo_sample.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
  • 解析:

    • tickTime=2000:这是 ZooKeeper 中最基本的时间单位,以毫秒为单位。它用于心跳检测以及最小会话超时时间的计算。在这个例子中,tickTime 被设置为 2000 毫秒(即 2 秒)。
    • initLimit=10:这个参数定义了集群中的 follower 节点与 leader 节点进行初始同步的最大时间限制,以 tickTime 为单位。例如,如果 tickTime 是 2000 毫秒,那么 initLimit 设置为 10 就意味着初始同步的最大时间是 20000 毫秒(即 20 秒)。
    • syncLimit=5:这个参数定义了 follower 节点与 leader 节点之间发送请求和接收响应的最大时间限制,同样以 tickTime 为单位。例如,如果 tickTime 是 2000 毫秒,那么 syncLimit 设置为 5 就意味着这个时间限制是 10000 毫秒(即 10 秒)。
    • dataDir=/tmp/zookeeper:这个参数指定了 ZooKeeper 存储数据快照的目录。在生产环境中,不建议使用 /tmp 目录,因为 /tmp 目录可能会在系统重启时被清空。应该选择一个持久化的存储位置来存放数据。
    • clientPort=2181:这个参数指定了客户端连接 ZooKeeper 服务的端口。默认情况下,ZooKeeper 服务监听 2181 端口。
  • 修改配置文件:

# 复制一份
cp zoo_sample.cfg zoo.cfg
# 将dataDir=/tmp/zookeeper这一行的目录修改为存储数据的目录
vim zoo.cfg

3.启动

目前将zookeeper部署为单体结构的,先不考虑集群。

在bin目录下执行以下命令:

sh zkServer.sh start
  • 通过客户端进行连接:

在bin目录下执行以下命令:

./zkCli.sh -server localhost:2181

二、基本概念与操作

1.节点类型

在 Apache ZooKeeper 中,节点(也称为 znode)是存储数据的基本单元。ZooKeeper 支持多种类型的节点,每种类型具有不同的特性和用途。

  1. 持久节点 (Persistent Node)

    • 创建后不会自动删除,除非显式地调用删除操作。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create /persistent-node "data"
      
  2. 临时节点 (Ephemeral Node)

    • 当创建该节点的客户端会话结束时,节点会被自动删除。
    • 临时节点不能有子节点。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -e /ephemeral-node "data"
      
  3. 持久顺序节点 (Persistent Sequential Node)

    • 创建时,ZooKeeper 会在节点路径末尾自动添加一个递增的序列号。
    • 序列号是全局唯一的,即使节点被删除后,序列号也不会被重用。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -s /persistent-sequential-node "data"
      
  4. 临时顺序节点 (Ephemeral Sequential Node)

    • 兼具临时节点和顺序节点的特性。
    • 当创建该节点的客户端会话结束时,节点会被自动删除,并且创建时会自动添加一个递增的序列号。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -e -s /ephemeral-sequential-node "data"
      

特性总结

  • 持久节点 (Persistent Node):

    • 不会自动删除。
    • 可以有子节点。
    • 适用于需要长期存在的数据。
  • 临时节点 (Ephemeral Node):

    • 客户端会话结束时自动删除。
    • 不能有子节点。
    • 适用于表示客户端的存在或状态。
  • 持久顺序节点 (Persistent Sequential Node):

    • 不会自动删除。
    • 创建时自动添加序列号。
    • 适用于需要唯一标识符的场景,例如任务分配。
  • 临时顺序节点 (Ephemeral Sequential Node):

    • 客户端会话结束时自动删除。
    • 创建时自动添加序列号。
    • 适用于需要临时唯一标识符的场景,例如临时任务分配。

使用场景示例

  • 分布式锁

    • 使用临时顺序节点实现分布式锁。每个客户端创建一个临时顺序节点,通过比较节点的序列号来决定谁获得锁。
  • 配置管理

    • 使用持久节点存储配置信息,所有客户端都可以读取这些配置。
  • 服务发现

    • 使用临时节点注册服务实例,当服务实例宕机时,对应的临时节点会被自动删除。
  • 任务调度

    • 使用持久顺序节点分配任务,每个任务有一个唯一的序列号,确保任务的唯一性和有序性。

查看节点

依次创建以上四种节点,然后执行ls /命令可以看到创建的所有节点:

在这里插入图片描述

查看节点数据

示例:

get /ephemeral-node

在这里插入图片描述

2.文件系统层次结构

在 Apache ZooKeeper 中,节点(znode)可以形成一个层次结构,类似于文件系统中的目录和文件。每个节点可以有父节点和子节点。

注意,不能为临时节点创建子节点。

假设我们已经有了一个名叫persistent-node的父节点,可以为它创建一个子节点:

create /persistent-node/node1 "node1"

在这里插入图片描述

3.watcher

ZooKeeper 的 Watcher 机制是一种事件通知机制,允许客户端在特定事件发生时收到通知。这对于实现分布式协调和同步非常有用。

  • Watcher 机制的工作原理:
    注册 Watcher:客户端可以在创建节点、获取节点数据、列出子节点等操作时注册一个 Watcher。注册 Watcher 后,当指定的事件发生时,ZooKeeper 会向客户端发送一个通知。
  • 事件类型:
    NodeCreated:节点被创建。
    NodeDeleted:节点被删除。
    NodeDataChanged:节点的数据发生变化。
    ChildChanged:节点的子节点列表发生变化。
  • 一次性通知:
    每个 Watcher 只触发一次。一旦触发,客户端需要重新注册 Watcher 以继续接收后续的通知。

4.ACLs

Zookeeper 的 ACLs(Access Control Lists,访问控制列表)用于定义哪些用户或客户端可以对 Zookeeper 中的 znodes 执行什么类型的访问。ACL 是一个重要的安全特性,它确保只有授权的实体才能执行特定的操作,如读取、写入、创建子节点等。

ACL 由两部分组成:

  1. 权限(Permissions):指定了允许的操作类型。Zookeeper 支持以下五种基本权限:

    • CREATE (c):允许创建子节点。
    • READ (r):允许获取节点数据和列出其子节点。
    • WRITE (w):允许设置节点的数据。
    • DELETE (d):允许删除子节点。
    • ADMIN (a):允许设置权限。
  2. 身份验证(Authentication):指定哪个或哪些主体(通常是用户或客户端)被授予上述权限。这可以通过不同的认证模式来实现,比如:

    • world:任何人都可以访问,通常用作公共访问。
    • auth:任何通过了某种方式认证的用户,不区分具体的认证信息。
    • digest:基于用户名和密码的哈希值进行认证。
    • IP:根据客户端的 IP 地址限制访问。
    • SASL:使用简单的认证和安全层协议进行认证。

每个 znode 都有一个关联的 ACL 列表,该列表定义了不同主体对于该节点具有的权限。当一个操作请求到达时,Zookeeper 会检查发起请求的主体是否在目标 znode 的 ACL 列表中有相应的权限,如果匹配则允许操作,否则拒绝。

例如,如果你想要为特定的用户(如 “user1” 和 “user2”)赋予对某个 znode 的读写权限,你可以配置 digest 认证,并为这些用户创建对应的 digest 条目。

ACL 设置是通过 Zookeeper 客户端 API 进行的,在创建或修改 znode 时可以指定 ACL。此外,ACL 可以随时更新,但需要注意的是,更改 ACL 不会影响已经在等待或正在进行的操作;它们只影响后续的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值