栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Zookeeper资料整理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Zookeeper资料整理

目录

Zookeeper概述

 Zookeeper命令操作

 Zookeeper数据模型

 Zookeeper 服务端常用命令

 Zookeeper客户端常用命令

 javaAPI操作

Curator操作

事件监听:

 分布式锁

Zookeeper集群

 概念

集群搭建 



Zookeeper概述
Zookeeper 是 Apache Hadoop 项目下的一个子 项目,是一个树形目录服务。 Z ookeeper 翻译过来就是 动物园管理员,他是用来管 H adoop( 大象)、 Hive( 蜜蜂 )、 Pig( 小 猪 ) 的管理员。简称 zk Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。 Zookeeper 提供的主要功能包括: 配置管理 分布式 锁 集群管理

 Zookeeper命令操作

 Zookeeper数据模型
ZooKeeper 是 一个树形目录 服务 , 其数据模型 和 Unix 的文件系统目录树很类似,拥有一个 层次化 结构。 这里面的每一个节点都被称为: ZNode ,每个节点上都会保存自己的数据和节点信息。 节点可以拥有子节点,同时也允许少量( 1MB )数据存储在该节点之下。 节点可以分为四大类: • PERSISTENT 持久化节点 • EPHEMERAL 临时节点 : -e • PERSISTENT_SEQUENTIAL 持久化顺序节点 : -s • EPHEMERAL_SEQUENTIAL 临时顺序节点  : - es

 Zookeeper 服务端常用命令

• 启动 ZooKeeper 服务 : ./zkServer.sh start • 查看 ZooKeeper 服务状态 : ./zkServer.sh status • 停止 ZooKeeper 服务 : ./zkServer.sh stop  • 重启 ZooKeeper 服务 : ./zkServer.sh restart 

 Zookeeper客户端常用命令

连接服务器

./zkCli.sh –server ip:port

设置节点值

set /节点path value

退出

quit

删除单个节点

delete /节点path

删除带子节点的节点

deleteall /节点path

创建节点

create /节点path value

显示指定节点目录

ls 目录

查看命令帮助

help

获取节点值

get /节点path

 javaAPI操作

Curator操作 Curator 是 Apache ZooKeeper 的Java客户端库 Curator API常用操作
  • 建立连接

  • connectin

  • 添加节点

                        基本创建 creat().forpath(“/path”)

                默认有数据:数据是当前的ip地址

                   

                        创建节点(带有数据)forpath(“/path”,byte [] 数组)

                

                        设置结点类型 withMode(Mode .forpath).(“/path”,byte [] 数组)

                

                默认类型:持久化  

                        

                         多级节点   withMode(Mode . forpath).(“/path/path”)                       不存在使用CreatingifNeeded方法创建                         
  • 删除节点 delete
                         单个节点 delete()forpath()                                                          带有子节点的 delete().deletingChildrenIfneeded().forpath(“path”)                                                   必须成功删除的删除  detele().granted().forpath()                          回调   detele().granted().inbackground(new backgroundCallback)
  • 修改节点
                        修改数据 setData().forpath(“path”,数据.bytes)                         根据版本修改 版本是查询出来的
  • 查询节点
                查数据 getData().forpath(“path”)                                  查子节点 ls   / getChildren().forpath(“path”)                                   查节点状态 ls-s  /  getData().storingStarin.forpath(“path”)
  • Watch事件监听
  • 分布式锁实现

事件监听:

  ZooKeeper 允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 ZooKeeper 实现分布式协调服务的重要特性。

        ZooKeeper 中引入了Watcher机制来实现了发布/订阅功能能,能够让多个订阅者同时监听某一个对象,当一个对象自身状态变化时,会通知所有订阅者。

        ZooKeeper 原生支持通过注册Watcher来进行事件监听,但是其使用并不是特别方便

        需要开发人员自己反复注册Watcher,比较繁琐。

    Curator引入了 Cache 来实现对 ZooKeeper 服务端事件的监听。

     ZooKeeper提供了三种Watcher:

  • NodeCache : 只是监听某一个特定的节点
  • PathChildrenCache : 监控一个ZNode的子节点.
  • TreeCache : 可以监控整个树上的所有节点,类似于PathChildrenCache和NodeCache的组合

 分布式锁 在我们进行单机应用开发,涉及并发同步的时候,我们往往采用 synchronized 或者 Lock 的方式来解决多线程间的代码同步 问题,这时 多线程的运行都是在同一个 JVM 之下,没有任何问题。但当我们的应用是分布式集群工作的情况下,属于多 JVM 下的工作环境 ,跨 JVM 之间已经无法通过多线程的锁解决同步问题 。那么就需要一种更加高级的锁机制,来处理种 跨机器的进程之间的数据同步问题 —— 这就是分布式锁。 分布式锁:

核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除 该 节点。
  1. 客户端获取锁时,在lock节点下创建临时顺序节点。
  2. 然后获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。
  3. 如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件。
  4. 如果发现比自己小的那个节点被删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点 是否是lock子节点中序号最小的,如果是则获取到了锁, 如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。

Zookeeper集群

 概念

Leader选举:

  • Serverid:服务器ID
比如有三台服务器,编号分别是1,2,3, 编号越大在选择算法中的权重越大。
  • Zxid:数据ID
服务器中存放的最大数据ID. 值越大说明数据越新,在选举算法中数据越新权重越大。

在Leader选举的过程中,如果某台ZooKeeper获得了超过半数的选票,则此ZooKeeper就可以成为Leader了。

集群搭建 

使用虚拟机虚拟集群,在服务器上安装3个zookeeper。

配置集群

详细过程如链接::Zookeeper集群搭建_小白文的博客-CSDN博客_zk集群搭建

Zookeeper 集群角色
  • Leader 领导者 :          

1. 处理事务请求

2. 集群内部各服务器的调度者

  • Follower 跟随者 :

1. 处理客户端非事务请求,转发事务请求给Leader服务器

2. 参与Leader选举投票

  • Observer 观察者:

1. 处理客户端非事务请求,转发事务请求给Leader服务器

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号