zookeeper

一. Zookeeper

概念:是一个分布式的,开源的,分布式应用程序协调服务
主要功能:
1.配置管理
2.分布式锁
3.集群管理

Zookeeper的命令操作

1.zookeeper的数据模型


(1)zookeeper是一个树形目录服务
(2)这里的每个节点都被称为ZNode,每个节点都有自己的数据和节点信息
(3)节点可以拥有子节点,同时可以允许少量数据(1MB)存储在该节点之下
(4)节点可以分为四大类
persistent:持久化节点,客户端关闭后,下次连接服务器还是有数据
ephemeral:临时节点 -e表示
persistent_sequential:持久化顺序节点 -s
ephemeral_sequential:持久化顺序节点 -es

2.zk客户端常用命令



二.ZooKeeper JavaAPI

bash 复制代码
<dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.5</version>
</dependency>
 <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
</dependency>

Curator:是Apache zookeeper的java客户端

常见的Zookeeper Java Api:
1.原生Java api
2.ZkClient
3.Curator

curator项目的目标是简化ZooKeeper客户端的使用
curator官网
ZooKeeper 3.4.x 现已终止生命。因此,最新版本的 Curator 取消了对其的支持。如果您希望将 Curator 与 ZooKeeper 3.4.x 一起使用,您应该固定到 Curator 4.2.x 版本。Curator 4.2.x 以软兼容模式支持 ZooKeeper 3.4.x 集成。
zookeeper版本3.5.x以上,curator的版本就必须是4.0以上

Curator Api常用操作

1.建立连接

2.添加节点(创建节点)

bash 复制代码
//通过连接对象(client).creat()的方法调用

3.删除节点

必须删除,就是防止抖动,本质就是重试

4.修改节点

5.查询节点

bash 复制代码
通过连接对象client.方法进行调用

6.Watch事件监听
用户可以在指定的节点上注册一些watch,并在一些特定事件触发的时候,zookeeper服务端将事件通知到感兴趣的客户端上去
为了方便使用,Curator引入了Cache来实现zookeeper服务监听,Curator的底层也是zookeeper的方法实现的
NodeCache:监听某一个节点
PathChildrenCache:监控一个ZNode下的子节点,不能监控自己
TreeCache:可以监听整个树的所有节点

NodeCache

PathChildrenCache

TreeCache

7.分布式锁实现
进行单机应用开发,设计并发同步的时候,我们采用的synchronized或者Lock的方式来解决多线程间的代码同步问题,多线程的运行都是在用一个JVM之下
分布式集群工作的情况下,属于多JVM的工作环境,跨JVM之间无法通过多线程的锁解决问题

分布式锁

跨机器的进程之间的数据同步问题--分布式锁

Zookeeper分布式锁原理
核心思想:客户端需要获取锁,则创建子节点,使用完锁,则删除该子节点
1.客户端获取锁时,在对应节点下创建临时的顺序节点(临时为了解决客户端dang机问题,顺序为了找最小的节点)
2.获取对应节点下的所有子节点,如果发现创建的序号比自己小,则默认该节点获取到了锁,使用完后,该节点删除
3.在创建子节点的过程中,发现自己不是最小的节点,此时,客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件
4.如果监测到比自己小的节点被删除,客户端的Watcher会收到相应的通知,再次判断最小的序号,如果是,则获取到锁,如果不是,则继续重复监听比自己小的数

Curator实现分布式API

InterProcessMutex:分布式可重入排它锁

ZooKeeper集群介绍

zookeeper服务器按顺序启动,顺序编号越大,则在选择算法中的权重就越大,集群中,如果某台机器获得了半票以上的选票,则这台Zookeeper服务器就可以成为leader选票机制:小的投比自己大的,大的可以投自己

zookeeper集群的搭建

伪集群:一台虚拟机装多个zookeeper服务器,根据端口区分
真集群:一台装一个,根据ip区分

伪集群的搭建

1.上传解压,修改配置文件(略)

2.在每个zookeeper的data目录下创建一个myid文件

3.修改配置文件

4.启动zk服务

5.查看对应服务身份./zkServer.sh status

相关推荐
yuanlaile3 小时前
RabbitMQ高并发秒杀、抢购系统、预约系统底层实现逻辑
分布式·rabbitmq·rabbitmq高并发·rabbitmq项目实战·rabbitmq实战教程
StarRocks_labs5 小时前
从InfluxDB到StarRocks:Grab实现Spark监控平台10倍性能提升
大数据·数据库·starrocks·分布式·spark·iris·物化视图
掘金-我是哪吒7 小时前
分布式微服务系统架构第131集:fastapi-python
分布式·python·微服务·系统架构·fastapi
the_3rd_bomb7 小时前
MNIST DDP 分布式数据并行
分布式·mnist
开源架构师7 小时前
JVM 与云原生的完美融合:引领技术潮流
jvm·微服务·云原生·性能优化·serverless·内存管理·容器化
what_20187 小时前
分布式2(限流算法、分布式一致性算法、Zookeeper )
分布式·网络协议·rpc
what_20189 小时前
分布式1(cap base理论 锁 事务 幂等性 rpc)
分布式
只因只因爆10 小时前
spark小任务
大数据·分布式·spark
椰椰椰耶11 小时前
【RabbitMQ】路由模式和通配符模式的具体实现
分布式·rabbitmq
金刚猿11 小时前
openfeign 拦截器实现微服务上下文打通
微服务·云原生·架构