Zookeeper

作为分布式中间件,zookeeper有以下几个重要功能

  1. 服务注册
  2. 服务监听 :观察者模式,有服务上线或下线可以感知,并进行响应回调处理
  3. 服务拉取
  4. 配置中心
  5. CP特性
  6. 数据存储方式为标准的文件结构

安装zk需要java环境,可参考
linux搭建java环境

查看服务启动脚本的命令

bash 复制代码
bin/zkServer.sh

以此可以看到脚本启动时,支持的参数

启动zk服务

bash 复制代码
bin/zkServer.sh start

启动成功日志

查看服务启动时的状态

bash 复制代码
bin/zkServer.sh status

可以看到,上面包含了zk服务启动时加载的配置文件,ip端口号,启动方式为单节点

连接zk客户端

bash 复制代码
bin/zkCli.sh

zk客户端,可以通过命令行的方式,对节点进行增删改查的操作
cli命令参考

zk节点类型:

  1. 持久节点 create /node 一直存在,即使客户端关闭
  2. 临时节点 create -e /tmpnode 客户端会话关闭或意外宕机时,该节点会被删除
    临时节点无法创建子节点
  3. 有序节点

create -e -s /sortnode 临时有序节点

create -s /sortnode 持久有序节点

  1. 容器节点 create -c /task

容器节点在最后一个子节点被删除后,也会自动被删除

  1. TTL节点 create -t 3000 /ttlnode
    默认此功能不开启,需修改zoo.conf中配置:
    extendedTypesEnabled = true
    当TTL节点在TTL内没有被修改并且没有子节点时,会被删除

下面来介绍一下zookeeper的一些高级的分布式特性:

  1. 使用临时节点来实现分布式锁

    zk无法重复创建同一名称的节点

    在分布式场景中可以使用该特性,创建一个分布式锁

    此外另一个好处是,临时节点在客户端宕机时会自动删除,其他客户端仍然可以正常创建该节点,因此无需担心死锁问题

  2. 根据节点信息中的版本号,实现分布式乐观锁

    zk节点信息中,包含数据版本号的信息

bash 复制代码
ls -s /tmpnode

bash 复制代码
stat -w /tmpnode

在信息中有个dataVersion = 0,每次修改该节点信息时,版本号都会+1

此时若执行节点删除或修改时,可以带上版本号的参数,实现乐观锁,防止ABA问题

上面的操作,修改版本号为2的节点失败,原因是版本号不正确,需要更新版本号

版本号正确,可修改成功

  1. 根据节点信息中的事务编号,在集群选举时可选择版本最新的节点

在节点信息中包含了zk的分布式事务属性,这是保证CP机制的关键所在

在集群环境中,若主节点服务宕机,会触发选举机制,集群会选举出一个新的节点来作为主节点,

在集群选举中会侧重于选择最新版本的子节点,zk在选举时会通过对比mZxid和pZxid来选择最新

版本的子节点。

相关推荐
WHFENGHE5 小时前
输电线路分布式故障监测装置技术解析
分布式
a587696 小时前
消息队列(MQ)高级特性深度剖析:详解RabbitMQ与Kafka
java·分布式·面试·kafka·rabbitmq·linq
hmb↑7 小时前
Kafka 3.9.x 安装、鉴权、配置详解
分布式·kafka·linq
AAA修煤气灶刘哥8 小时前
缓存世界的三座大山:穿透、击穿、雪崩,今天就把它们铲平!
redis·分布式·后端
失散139 小时前
分布式专题——4 大厂生产级Redis高并发分布式锁实战
java·redis·分布式·缓存·架构
eqwaak010 小时前
科技信息差(9.10)
网络·人工智能·分布式·ar·智能硬件
一个帅气昵称啊10 小时前
C#,RabbitMQ从入门到精通,.NET8.0(路由/分布式/主题/消费重复问题 /延迟队列和死信队列/消息持久化 )/RabbitMQ集群模式
分布式·微服务·架构·rabbitmq·.net
长相易乐10 小时前
RabbitMQ 教程
分布式·rabbitmq
月夕·花晨11 小时前
Gateway -网关
java·服务器·分布式·后端·spring cloud·微服务·gateway
失散1311 小时前
分布式专题——6 Redis缓存设计与性能优化
java·redis·分布式·缓存·架构