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

相关推荐
舰长11510 小时前
k8s 持久化存储方案-PVC
云原生·容器·kubernetes
南方以南_11 小时前
对比k8s的service和kube-proxy
云原生·容器·kubernetes
SirLancelot112 小时前
MongoDB-基本介绍(一)基本概念、特点、适用场景、技术选型
java·数据库·分布式·后端·mongodb·软件工程·软件构建
koping_wu12 小时前
【Kafka】架构原理、消息丢失、重复消费、顺序消费、事务消息
分布式·架构·kafka
小醉你真好12 小时前
16、Docker Compose 安装Kafka(含Zookeeper)
docker·zookeeper·kafka
AKAMAI13 小时前
Linebreak赋能实时化企业转型:专业系统集成商携手Akamai以实时智能革新企业运营
人工智能·云原生·云计算
博睿谷IT99_14 小时前
K8s 核心架构是什么?组件怎么协同工作的?
云原生·kubernetes·k8s·k8s pod 设计原理·容器编排与集群管理
久绊A15 小时前
Kubernetes(k8s)版本查看
云原生·容器·kubernetes
007php00715 小时前
Docker 实战经验之关键文件误删恢复指南(一)
jvm·docker·云原生·容器·面试·职场和发展·eureka
KubeSphere 云原生16 小时前
HolmesGPT 正式上线 丨 KubeSphere 助力云原生智能排障新体验
云原生