Zookeeper

Zookeeper 是一种中间件,用于提供协调服务,适用于分布式系统。本文涵盖了Zookeeper的安装与使用,基本数据模型(如master节点选举、集群数据一致性),特性与命令,包括watcher机制和acl权限。此外,还讨论了Zookeeper的Java原生API开发,Apache Curator客户端的使用,以及在分布式锁和dubbo场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在这里插入图片描述
作用:

  • 中间件,提供协调服务
  • 作用于分布式系统

安装与使用

zoo.cfg文件
在这里插入图片描述
在这里插入图片描述

sh bin/zkServer.sh start
sh bin/zkServer.sh status
sh bin/zkServer.sh stop

基本数据模型

>类似linux的文件系统
>每个节点称为znode,分为临时和永久节点,有版本号(乐观锁),可设置权限
在这里插入图片描述

作用体现:

  1. master节点选举
  2. 集群数据的强一致性(统一配置文件管理)
  3. 发布和订阅
  4. 分布式锁

特性与命令

通过 ./zhCli.sh 打开客户端

ls / : 查看根目录下的节点
get /test : 获取/test节点的值及状态
stat / : 查看节点状态
ls2 / : ls /和stat /一起使用的效果
create /test test : 创建节点及值 create -e /test/tem2 test : 创建临时节点,此时get ephemeralOwner值不是0*0(说明是临时节点) create -s /test/tem2
test :
创建顺序节点(递增) set /test aa : 修改 set /test ab 1
带有版本号(乐观锁) delete /test2 : 删除

在这里插入图片描述
在这里插入图片描述

watcher机制

使用场景:
在这里插入图片描述
用法:
在这里插入图片描述
在这里插入图片描述

get /test watch : 等等 设置父节点watch事件

在这里插入图片描述

acl 权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
permissions:cdrwa(create,read,write,delete.admin)

setAcl /test world:anyone:crwa(设置没有删除子节点权限)

addauth digest zhao:zhao(登陆)
auth:zhao:zhao:crwa
setAcl /test ip:172.27.49.732:crdwa(基于ip设置权限)

zk四字命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

echo ruok | nc localhost 2181
echo conf | nc localhost 2181

集群基础知识

在这里插入图片描述
集群同步用的端口和选举用的端口

zookeeper的java原生api开发

同步或者异步创建节点,都不支持子节点的递归创建,异步有一个callback函数

ZooKeeper zk = new ZooKeeper(zkServerPath, timeout, new ZKConnect());(创建连接)
zookeeper.create(path, data, acls, CreateMode.PERSISTENT, newCreateCallBack(), ctx);(创建节点)
Stat status = zkServer.getZookeeper().setData(“/testnode”, “xyz”.getBytes(), 0);(修改)
zkServer.getZookeeper().delete(“/test-delete-node”, 0);(删除)
byte[] resByte = zkServer.getZookeeper().getData(“/testnode”, true, stat);(获取节点数据)
zkServer.getZookeeper().getChildren(“/test2”, true);(获取子节点)
zkServer.createZKNode(“/aclimooc/testdigest”, “testdigest”.getBytes(), acls);(登陆才能访问)
zkServer.getZookeeper().addAuthInfo(“digest”, “imooc1:123456”.getBytes());(登陆)

Apache Curator客户端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

dubbo

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分布式锁

活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。
活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。死锁是加不上就死等,活锁是加不上就放开已获得的资源重试

在这里插入图片描述

与spring融合

	<description>zk与spring容器结合, 启动项目加载的时建立与zk的连接</description>

	<!-- zookeeper 重试策略 -->
	<bean id="retryPolicy" class="org.apache.curator.retry.RetryNTimes">
		<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值