zeekeeper总结详解

Zookeeper 概念

  • Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务。

  • Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk

  • Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。

  • Zookeeper 提供的主要功能包括:

    • 配置管理

    • 分布式锁

    • 集群管理

Zookeeper 命令操作

Zookeeper 数据模型

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

ZooKeeper 命令操作

Zookeeper 服务端常用命令

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

Zookeeper 客户端常用命令

# 常用的命令都做了注释,未注释的,后面用到再回来完善补充
#连接ZooKeeper服务端
./zkCli.sh –server host:port
#查看帮助
help

ZooKeeper -server host:port -client-configuration properties-file cmd args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close 
config [-c] [-w] [-s]
connect host:port
#创建节点 create /节点path value  -s创建顺序节点  -ec创建临时节点
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
#删除单个节点 delete /节点path
delete [-v version] path
#删除带有子节点的节点 deleteall /节点path
deleteall path [-b batch size]
delquota [-n|-b] path
#获取节点 get /节点path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history 
listquota path
#显示指定目录的节点  ls 目录
ls [-s] [-w] [-R] path
printwatches on|off
#断开连接
quit 
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
#设置节点值 set /节点path value
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path
version

Curator 介绍

  • Curator 是 Apache ZooKeeper 的Java客户端库。
  • 常见的ZooKeeper Java API :
    • 原生Java API
    • ZkClient
    • Curator
  • Curator 项目的目标是简化 ZooKeeper 客户端的使用。
  • Curator 最初是 Netfix 研发的,后来捐献了 Apache 基金会,目前是 Apache 的顶级项目。
  • 官网:http://curator.apache.org/

Curator API 常用操作

  • 建立连接

  • 添加节点

  • 删除节点

  • 修改节点

  • 查询节点

  • Watch事件监听

    1.ZooKeeper 允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会	 将事件通知到感兴趣的客户端上去,该机制是 ZooKeeper 实现分布式协调服务的重要特性。
    2.ZooKeeper 中引入了Watcher机制来实现了发布/订阅功能能,能够让多个订阅者同时监听某一个对象,当一个·   对象自身状态变化时,会通知所有订阅者。
    3.ZooKeeper 原生支持通过注册Watcher来进行事件监听,但是其使用并不是特别方便    需要开发人员自己反复   注册Watcher,比较繁琐。
    4.Curator引入了 Cache 来实现对 ZooKeeper 服务端事件的监听。
    5.ZooKeeper提供了三种Watcher:
    	NodeCache : 只是监听某一个特定的节点
    	PathChildrenCache : 监控一个ZNode的子节点. 
    	TreeCache : 可以监控整个树上的所有节点,类似于PathChildrenCache和NodeCache的组合
    
  • 分布式锁实现

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

ZooKeeper分布式锁原理

  • 核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。

    • 客户端获取锁时,在lock节点下创建临时顺序节点。

    • 然后获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。

    • 如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件。

    • 如果发现比自己小的那个节点被删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点 是否是lock子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。

Curator实现分布式锁API

在Curator中有五种锁方案:

  • InterProcessSemaphoreMutex:分布式排它锁(非可重入锁)
  • InterProcessMutex:分布式可重入排它锁
  • InterProcessReadWriteLock:分布式读写锁
  • InterProcessMultiLock:将多个锁作为单个实体管理的容器
  • InterProcessSemaphoreV2:共享信号量

ZooKeeper 集群搭建

Zookeeper 集群介绍

Leader选举:
Serverid:服务器ID
  比如有三台服务器,编号分别是1,2,3。
  编号越大在选择算法中的权重越大。
Zxid:数据ID
  服务器中存放的最大数据ID.值越大说明数据  越新,在选举算法中数据越新权重越大。
在Leader选举的过程中,如果某台ZooKeeper
    获得了超过半数的选票,
    则此ZooKeeper就可以成为Leader了。

Zookeeper 集群角色

在ZooKeeper集群服中务中有三个角色:
Leader 领导者 :          
	1. 处理事务请求
	2. 集群内部各服务器的调度者
Follower 跟随者 :
	1. 处理客户端非事务请求,转发事务请求给Leader服务器
	2. 参与Leader选举投票
Observer 观察者:
	1. 处理客户端非事务请求,转发事务请求给Leader服务器

小结

对zookeeper知识梳理总结,不足之处,后面再补充。

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP)并提供可靠的消息传递机制。它可以用于构建分布式系统,处理大量的消息传递和异步通信。以下是关于RabbitMQ的一些详解: 1. 下载和安装:你可以从RabbitMQ官方网站下载RabbitMQ的安装包。你可以使用wget命令下载RabbitMQ的rpm包,例如:wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm。安装完成后,你可以双击安装包进行安装。安装完成后,你可以运行rabbitmq-plugins enable rabbitmq_management命令来安装RabbitMQ-Plugins插件。然后,你可以运行rabbitmq-server.bat来启动RabbitMQ服务。\[1\]\[2\] 2. 后台运行:如果你想在后台运行RabbitMQ,你可以使用rabbitmq-server -detached命令来启动RabbitMQ服务。如果你想停止RabbitMQ服务,你可以使用rabbitmqctl stop命令。\[3\] 总结起来,RabbitMQ是一个功能强大的消息代理软件,它可以用于构建分布式系统和处理大量的消息传递。你可以通过下载和安装RabbitMQ来开始使用它,并且可以选择在前台或后台运行RabbitMQ服务。 #### 引用[.reference_title] - *1* *2* [RabbitMQ详解,用心看完这一篇就够了【重点】](https://blog.csdn.net/weixin_42039228/article/details/123493937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [RabbitMQ 详解](https://blog.csdn.net/m0_53067943/article/details/130578563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值