zookeeper

一. Zookeeper

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

Zookeeper的命令操作

1.zookeeper的数据模型

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

2.zk客户端常用命令

zookeeper_第2张图片
zookeeper_第3张图片
zookeeper_第4张图片

二.ZooKeeper JavaAPI

<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.建立连接
zookeeper_第5张图片

2.添加节点(创建节点)
zookeeper_第6张图片

//通过连接对象(client).creat()的方法调用

3.删除节点
zookeeper_第7张图片

必须删除,就是防止抖动,本质就是重试
zookeeper_第8张图片
zookeeper_第9张图片

4.修改节点
zookeeper_第10张图片
在这里插入图片描述

5.查询节点

通过连接对象client.方法进行调用

zookeeper_第11张图片

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

NodeCache
zookeeper_第12张图片
PathChildrenCache
zookeeper_第13张图片
TreeCache
zookeeper_第14张图片

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

分布式锁

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

ZooKeeper集群介绍

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

zookeeper集群的搭建

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

伪集群的搭建
1.上传解压,修改配置文件(略)
2.在每个zookeeper的data目录下创建一个myid文件
zookeeper_第20张图片
3.修改配置文件
zookeeper_第21张图片
4.启动zk服务
5.查看对应服务身份./zkServer.sh status

你可能感兴趣的:(zookeeper,分布式,云原生)