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

相关推荐
斑驳竹影3 小时前
【RabbitMQ】之高可用集群搭建
分布式·rabbitmq
floret*5 小时前
Kafka高频面试题详解
分布式·kafka
Wlq04155 小时前
分布式技术缓存技术
分布式·缓存
明达技术5 小时前
LVDS高速背板总线:打造分布式I/O高效数据传输新境界
分布式·物联网·自动化·lvds
java1234_小锋5 小时前
分布式环境下宕机的处理方案有哪些?
分布式
颜淡慕潇6 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
运维&陈同学6 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
大数据魔法师6 小时前
Hadoop生态圈框架部署(六)- HBase完全分布式部署
hadoop·分布式·hbase
知否&知否6 小时前
kafka中是如何快速定位到一个offset的
分布式·kafka
꧁薄暮꧂7 小时前
Kafka生产者如何提高吞吐量?
分布式·kafka