【1】Zookeeper快速入门

ZooKeeper是一个分布式协调服务,采用领导者-跟随者集群模式,确保数据一致性。它提供ZNode数据模型,支持持久化和临时节点,用于分布式锁、服务注册与发现等场景。ZooKeeper通过事务日志和数据快照实现数据持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

1.概述

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

  1. 应用场景

  • 分布式协调组件

在分布式系统中,需要有zookeeper作为分布式协调组件,协调分布式系统中的状态。

  • 分布式锁

zk在实现分布式锁上,可以做到强一致性。

  • 无状态化的实现

2.特点

1) Zookeeper: 一个领导者(Leader) ,多个跟随者(Follower) 组成的集群。

2) 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。

3)全局数据一致: 每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。

5)数据更新原子性,一次数据更新要么成功,要么失败。

6)实时性,在一.定时间范围内,Client能读到最新数据。

二.数据结构

ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个 ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

1.zk中znode的结构

zk中的znode包含了四个部分:

  • data:保存数据

  • acl:权限,定义了什么样的用户能够操作这个节点,且能够进行怎么样的操作

  • c : create创建权限,允许在该节点下创建子节点

  • w :write跟新权限,允许更新该节点的数据

  • r:read 读取权限,允许读取该节点的内容以及子节点的列表信息

  • d:delete删除权限,允许删除该节点的子节点

  • a:admin管理者权限,允许对该节点进行acl权限设置

  • stat:描述当前znode的元数据(指的是节点的事务id,创建时间,修改时间等)

  • child:当前节点的子节点

2.zk中节点znode的类型

  • 持久节点:创建出的节点,在会话结束后依然存在。保存数据(例如:create /test1 )

  • 持久序号节点:创建出的节点,根据先后顺序,会在节点之后带上一个数值,越后执行数值越大,适用于分布式锁的应用场景-单调递增(例如:create -s /test2)

  • 临时节点:临时节点是在会话结束后,自动被删除的,通过这个特性,zk可以实现服务注册与发现的效果。

  • 临时序号节点:跟持久序号节点相同,适用于临时的分布式锁。

  • Container节点(3.5.3版本新增) : Container容器节点, 当容器中没有任何子节点,该容器节点会被zk定期删除(60s)。(例如:create -c /mycontainer)

  • TTL节点:可以指定节点的到期时间,到期后被zk定时删除。只能通过系统配置zookeeper.extendedTypesEnabled=true开启

3.zk的数据持久化

zk的数据是运行在内存中,zk提供了两种持久化机制:

  • 事务日志

zk把执行的命令以日志形式保存在dataLogDir指定的路径中的文件中(如果没有指定dataLogDir, 则按dataDir指定的路径) 。

  • 数据快照

zk会在一定的时间间隔内做一次内存数据的快照,把该时刻的内存数据保存在快照文件中。

zk通过两种形式的持久化,在恢复时先恢复快照文件中的数据到内存中,再用日志文件中的数据做增量恢复,这样的恢复速度更快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值