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

相关推荐
无所不在的物质12 分钟前
Jenkins基础教程
运维·云原生·自动化·jenkins
是芽芽哩!3 小时前
【Kubernetes 指南】基础入门——Kubernetes 基本概念(二)
云原生·容器·kubernetes
SelectDB4 小时前
Apache Doris 创始人:何为“现代化”的数据仓库?
大数据·数据库·云原生
m0_663234014 小时前
云原生是什么
云原生
weisian1514 小时前
Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)
redis·分布式·缓存
不能只会打代码5 小时前
Java并发编程框架之综合案例—— 分布式日志分析系统(七)
java·开发语言·分布式·java并发框架
Elastic 中国社区官方博客5 小时前
如何通过 Kafka 将数据导入 Elasticsearch
大数据·数据库·分布式·elasticsearch·搜索引擎·kafka·全文检索
马剑威(威哥爱编程)6 小时前
分布式Python计算服务MaxFrame使用心得
开发语言·分布式·python·阿里云
运维小文6 小时前
K8S中的服务质量QOS
云原生·容器·kubernetes