Zookeeper资料整理

本文详述Zookeeper,涵盖Zookeeper概述、命令操作(包括服务端和客户端命令)、Java API使用(如Curator)、事件监听、分布式锁实现及Zookeeper集群的概念、搭建和角色解析。Zookeeper在分布式协调服务中利用Watcher机制实现发布/订阅功能,提供NodeCache、PathChildrenCache和TreeCache等监听工具。

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

目录

Zookeeper概述

 Zookeeper命令操作

 Zookeeper数据模型

 Zookeeper 服务端常用命令

 Zookeeper客户端常用命令

 javaAPI操作

Curator操作

事件监听:

 分布式锁

Zookeeper集群

 概念

集群搭建 



Zookeeper概述

Zookeeper Apache Hadoop 项目下的一个子 项目,是一个树形目录服务。
Z ookeeper 翻译过来就是 动物园管理员,他是用来管 H adoop( 大象)、 Hive( 蜜蜂 )、 Pig( 小 猪 ) 的管理员。简称 zk
Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。
Zookeeper 提供的主要功能包括:
配置管理
分布式
集群管理

 Zookeeper命令操作

 Zookeeper数据模型

ZooKeeper 一个树形目录 服务 , 其数据模型 Unix 的文件系统目录树很类似,拥有一个 层次化
结构。
这里面的每一个节点都被称为: ZNode ,每个节点上都会保存自己的数据和节点信息。
节点可以拥有子节点,同时也允许少量( 1MB )数据存储在该节点之下。
节点可以分为四大类:
PERSISTENT 持久化节点
EPHEMERAL 临时节点 -e
PERSISTENT_SEQUENTIAL 持久化顺序节点 -s
EPHEMERAL_SEQUENTIAL 临时顺序节点  : - es

 Zookeeper 服务端常用命令

启动 ZooKeeper 服务 : ./zkServer.sh start
查看 ZooKeeper 服务状态 : ./zkServer.sh status
停止 ZooKeeper 服务 : ./zkServer.sh stop 
重启 ZooKeeper 服务 : ./zkServer.sh restart 

 Zookeeper客户端常用命令

连接服务器

./zkCli.sh –server ip:port

设置节点值

set /节点path value

退出

quit

删除单个节点

delete /节点path

删除带子节点的节点

deleteall /节点path

创建节点

create /节点path value

显示指定节点目录

ls 目录

查看命令帮助

help

获取节点值

get /节点path

 javaAPI操作

Curator操作

Curator Apache ZooKeeper Java客户端库
Curator API常用操作
  • 建立连接

  • connectin

  • 添加节点

                        基本创建 creat().forpath(“/path”)

                默认有数据:数据是当前的ip地址

                   

                        创建节点(带有数据)forpath(“/path”,byte [] 数组)

                

                        设置结点类型 withMode(Mode .forpath).(“/path”,byte [] 数组)

                

                默认类型:持久化  

                        

                         多级节点   withMode(Mode . forpath).(“/path/path”)     
                 不存在使用CreatingifNeeded方法创建
                        
  • 删除节点 delete
                         单个节点 delete()forpath()
                               
                         带有子节点的 delete().deletingChildrenIfneeded().forpath(“path”)
                        
                         必须成功删除的删除  detele().granted().forpath()
                         回调   detele().granted().inbackground(new backgroundCallback)
  • 修改节点
                        修改数据 setData().forpath(“path”,数据.bytes)
                        根据版本修改 版本是查询出来的
  • 查询节点
                查数据 getData().forpath(“path”)
                
                查子节点 ls   / getChildren().forpath(“path”) 
                
                查节点状态 ls-s  /  getData().storingStarin.forpath(“path”)
  • Watch事件监听
  • 分布式锁实现

事件监听:

  ZooKeeper 允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制ZooKeeper 实现分布式协调服务的重要特性。

        ZooKeeper 引入了Watcher机制来实现了发布/订阅功能能,能够让多个订阅者同时监听某一个对象,当一个对象自身状态变化时,会通知所有订阅者

        ZooKeeper 生支持通过注册Watcher来进行事件监听,但是其使用并不是特别方便

        需要开发人员自己反复注册Watcher,比较繁琐

    Curator引入Cache 实现ZooKeeper 服务端事件的监听

     ZooKeeper提供了三Watcher

  • NodeCache : 只是监听某一个特定的节点
  • PathChildrenCache : 监控一个ZNode的子节点.
  • TreeCache : 可以监控整个树上的所有节点,类似于PathChildrenCacheNodeCache的组合

 分布式锁

在我们进行单机应用开发,涉及并发同步的时候,我们往往采用 synchronized 或者 Lock 的方式来解决多线程间的代码同步 问题,这时 多线程的运行都是在同一个 JVM 之下,没有任何问题。但当我们的应用是分布式集群工作的情况下,属于多 JVM 下的工作环境 ,跨 JVM 之间已经无法通过多线程的锁解决同步问题 。那么就需要一种更加高级的锁机制,来处理种 跨机器的进程之间的数据同步问题 —— 这就是分布式锁。
分布式锁:

核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除 节点。
  1. 客户端获取锁时,在lock节点下创建临时顺序节点。
  2. 然后获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。
  3. 如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件。
  4. 如果发现比自己小的那个节点被删除,则客户端Watcher会收到相应通知,此时再次判断自己创建的节点 是否lock节点中序号最小的,如果是则获取到了锁 如果不是则重复以上步骤继续获取到比自己小的一个节点注册监听。

Zookeeper集群

 概念

Leader选举:

  • Serverid:服务器ID
比如有三台服务器,编号分别是1,2,3, 编号越大在选择算法中的权重越大。
  • Zxid:数据ID
服务器中存放的最大数据ID. 值越大说明数据越新,在选举算法中数据越新权重越大。

在Leader选举的过程中,如果某台ZooKeeper获得了超过半数的选票,则此ZooKeeper就可以成为Leader了。

集群搭建 

使用虚拟机虚拟集群,在服务器上安装3个zookeeper。

配置集群

详细过程如链接::Zookeeper集群搭建_小白文的博客-优快云博客_zk集群搭建

Zookeeper 集群角色

  • Leader 领导者 :          

1. 处理事务请求

2. 集群内部各服务器的调度者

  • Follower 跟随者 :

1. 处理客户端非事务请求,转发事务请求给Leader服务器

2. 参与Leader选举投票

  • Observer 观察者:

1. 处理客户端非事务请求,转发事务请求给Leader服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值