Zookeeper学习总结

本文全面探讨Zookeeper,从基本概念到应用场景,包括分布式锁的实现、客户端使用、Curator框架操作,以及ZAB协议和CAP理论。通过实例展示了Zookeeper在分布式协调服务中的关键作用,如服务器搭建、数据模型、权限设置和集群实战。
摘要由CSDN通过智能技术生成

Zookeeper

分布式组件的鼻祖。

一、什么是Zookeeper

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

二、Zookeeper的应用场景

  • 分布式协调组件
    在分布式系统中,需要有zookeeper作为分布式协调组件,协调分布式系统中的状态
    在这里插入图片描述

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

  • 无状态话实现
    在这里插入图片描述

三、搭建zk服务器

  1. 安装虚拟机
  1. 克隆一台虚拟机
  2. 安装jdk
  3. 下载zk的压缩包(已经下载好了)
  4. 上传压缩包到虚拟机中
  5. 配置文件重命名 conf/zoo_sample.cfg ->zoo.cfg
  6. 进入到bin中,执行如下命令,来启动zk: ./zkServer.sh start
  1. zoo.cfg配置文件的说明
# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5
#zookeper 数据存储目录及日志保存目录(如果没有指明dataLogDir,则日志也保存在这个文件中)
dataDir=/tmp/zookeeper
#dataLogDir=/tmp/log
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1
  1. Zookeeper服务器的操作命令
# 启动
./zkServer.sh start 
# 查看状态
./zkServer.sh status 
# 停止
./zkServer.sh stop 

四、Zookeeper内部的数据模型

1. zk是如何保存数据的

zk中的数据是保存在节点上的,节点就是znode,多个znode之间构成一棵树的目录结构

在这里插入图片描述

  • 树是由节点构成,Zookeeper的数据存储也是基于节点,这种节点叫做Znode
  • 但是不同于树的节点,Znode的引用方式是路径引用,类似于文件路径
/动物/猫
/汽车/宝马
  • 这样的层级结构,让每一个 Znode 节点拥有唯一的路径,就像命名空间一样对不同信息作出清晰的隔离

2. zk中的znode是什么样的结构

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

  • data:保存数据
  • acl:权限,定义了什么样的用户能够操作这个节点,且能够进行怎样的操作
    • c:create 创建权限,允许在该节点下创建子节点
    • w:write 更新权限,允许更新该节点的数据
    • r:read 读取权限,允许读取该节点的内容以及子节点的列表信息
    • d:delete 删除权限,允许删除该节点的子节点
    • a:admin 管理者权限,允许对该节点进行acl权限设置
  • stat:描述当前znode的元数据
  • child:当前节点的子节点

3. zk中节点znode的类型

  • 持久节点:创建出的节点,在会话结束后依然存在。保存数据
  • 持久序号节点: 创建出的节点,根据先后顺序,会在节点之后带上一个数值,越后执行数值越大,适用于分布式锁的应用场景- 单调递增
    create -s /mynode abc
  • 临时节点:在会话结束后,自动被删除的,通过这个特性,zk可以实现服务注册与发现的效果
    create -e /mynode abc
  • 临时序号节点:跟持久序号节点相同,适用于临时的分布式锁
    create -s -e /node1
  • 容器Container节点:Container容器节点,当容器中没有任何子节点,该容器节点会被zk定期删除(60s)
  • TTL节点:可以指定节点的到期时间,到期后被zk定时删除。只能通过系统配置 zookeeper.extendedTypesEnabled=true开启

4. zk的数据持久化

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

  1. 事务日志

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

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

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

五、Zookeeper客户端(zkCli)的使用

1. 多节点类型创建 - create

  • 创建持久节点 create
  • 创建持久序号节点 create -s
  • 创建临时节点 create -e
  • 创建临时序号节点 create -s -e
  • 创建容器节点 create -c

2. 查询节点

  • 普通查询 get
  • 查询节点详细信息 get -s
    • cZxid: 创建节点的事务ID
    • mZxid:修改节点的事务ID
    • pZxid:添加和删除子节点的事务ID
    • ctime:节点创建的时间
    • mtime: 节点最近修改的时间
    • dataVersion: 节点内数据的版本,每更新一次数据,版本会+1
    • aclVersion: 此节点的权限版本
    • ephemeralOwner: 如果当前节点是临时节点,该值是当前节点所有者的session id。如果节点不是临时节点,则该值为零。
    • dataLength: 节点内数据的长度
    • numChildren: 该节点的子节点个数

3. 删除节点

  • 普通删除 delete
  • 乐观锁删除 delete -v 0 /mynode4

4. 权限设置

在另一个会话中必须先使用账号密码,才能拥有操作该节点的权限

  • 注册当前会话的账号和密码
    addauth digest xiaowang:123456
  • 创建节点并设置权限
    create /test-node abcd auth:xiaowang:123456:cdwra

5. 更新节点

set /节点路径 新的内容

六、Curator客户端的使用

1. Curator介绍

  • Curator是Netflix公司开源的一套zookeeper客户端框架,Curator是对Zookeeper支持最好的客户端框架。
  • Curator封装了大部分Zookeeper的功能,比如Leader选举、分布式锁等,减少了技术人员在使用Zookeeper时的底层细节开发工作。

2. 引入

  1. 引入依赖
		<!--Curator-->
		<dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>2.12.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-recipes</artifactId>
      <
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值