zookeeper简介

目录

zookeeper概念

zookeeper的全局数据一致性

zookeeper集群角色

zookeeper文件系统

znode节点类型

zookeeper监听机制

[zookeeper shell](#zookeeper shell)

典型应用


zookeeper概念

zookeeper是一个分布式协调服务的软件。主要用来解决分布式集群中应用系统的一致性问题。本质上是一个分布式的小文件存储系统

zookeeper的全局数据一致性

集群中的每个服务器都保存着一份相同 的数据副本,cilent无论连接哪台服务器,看到的数据都是一样的;

Q:多个客户端同时操作不同服务器,会冲突,那如何保证全局一致性?

1.针对非事务性操作(查):不需要维护一致性

2.针对事务性操作(增、删、改):follower向leader转发事务性请求,leader把所有请求编成事务ID,根据编号进行执行。

zookeeper集群角色

leader:集群工作的核心,事务请求的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各个服务器的调度者;给事务请求编号并执行操作

follower:处理客户端非事务请求,转发事务请求给leader;参与集群leader的选举投票

observer:不参与投票,但其他与follower作用一致,在不影响集群事务处理能力的前提下,提升集群的读写能力

zookeeper文件系统

一个标准的文件系统特征

1、采用树形目录结构,从根目录开始

3、由文件夹和文件组成

2、同一目录下,文件名唯一

而zookeeper文件系统特征

1、从结构上类似目录树结构

2、但内部没有文件夹、文件之分,统称为znode,既可以创建子目录,也可以保存数据

3、路径从/根目录开始

znode节点类型

持久节点 :客户端断开连接后不会删除,需手动删除
持久带序号节点 :持久化,且创建时自动添加单调递增序列号(如 /lock-0000000001),保证同路径下子节点唯一性
临时节点 :客户端与 ZooKeeper 会话结束后自动删除,适合临时标识(如服务心跳)
临时带序号节点:临时节点 + 自动序列号,常用于分布式锁等场景

zookeeper监听机制

实现步骤

客户端给节点设置监听

节点事件发生,触发监听,客户端收到通知

监听特性

先注册再触发

一次性监听

异步通知

通知是使用event事件来封装的

zookeeper shell

Q:客户端操纵zookeeper集群分为几步?

1、客户端连接集群,建立会话

2、根据需求对zookeeper目录树进行增删改查

3、客户端断开连接,结束会话

连接zookeeper

①连接本地单机

复制代码
zkCli.sh -server localhost:2181

②连接远程集群

复制代码
zkCli.sh -server node1:2181,node2

#连接成功后,终端会显示 [zk: localhost:2181(CONNECTED) 0] 提示符

节点操作命令

①creat:创建节点,语法:create [-s] [-e] 节点路径 节点数据

-s:创建顺序节点,自动追加数字后缀

-e:创建临时节点,会话断开后自动删除

②get:查看节点数据,语法:get [-w] 节点路径

-w:对接待你注册监听器(数据变化时触发通知,一次性有效)

③set:更新节点数据,语法:set 节点路径 新数据 [版本号]

④delete:删除指定节点,该节点必须无子节点,语法:delete 节点路径 [版本号]

⑤deleteall:递归删除节点及其所有子节点

⑥ls:列出指定节点的直接子节点名称,ls [-w] 节点路径

-w:对子节点变化注册监听器(子节点增删时触发)

⑦ls2:列出子节点名称+节点元数据(等价于ls+stat)

⑧stat:查看节点的元数据(如版本号、创建时间、是否为临时节点等),语法:stat [-w] 节点路径

-w:注册监听器(节点删除或数据变化时触发)

查看集群状态

①conc:列出所有连接到当前zookeeper服务器的客户端会话信息

②ruok:检查当前服务器是否正常(返回imok表示正常)

③stats:查看当前服务器的状态信息(如启动时间、连接数、节点总数等)

④quit:关闭连接

典型应用

①数据配置与同步(监听机制)

实现配置集中管理维护,达到自动更新同步的效果

②提供集群选举

实现集群选主,主挂掉备份切换成主

③分布式锁

在分布式系统中,多个节点可能同时操作共享资源,需要通过锁机制保证:同一时间只有一个节点能持有锁、锁释放后,其他节点能正确竞争到锁,避免死锁、部分节点故障不影响锁机制正常运行。

假设有 3 个客户端 A、B、C 竞争锁:

1、A 创建节点 /locks/lock-0000000001,B 创建 /locks/lock-0000000002,C 创建 /locks/lock-0000000003。

2、排序后,A 的节点序号最小,A 获取锁。

3、B 监听 A 的节点,C 监听 B 的节点,进入等待。

4、A 释放锁(删除 /locks/lock-0000000001),B 收到通知,发现自己是当前最小节点,获取锁。

5、B 释放锁后,C 收到通知,获取锁。

相关推荐
拾忆,想起6 小时前
Dubbo动态服务发现配置指南:从基础到云原生实践
服务器·网络·微服务·云原生·架构·服务发现·dubbo
milanyangbo8 小时前
从硬盘I/O到网络传输:Kafka与RocketMQ读写模型及零拷贝技术深度对比
java·网络·分布式·架构·kafka·rocketmq
有梦想的攻城狮8 小时前
Rabbitmq在死信队列中的队头阻塞问题
分布式·rabbitmq·死信队列·延迟队列
Wang's Blog8 小时前
Elastic Stack梳理:深度解析Elasticsearch分布式查询机制与相关性算分优化实践
分布式·elasticsearch
bxlj_jcj8 小时前
分布式ID方案、雪花算法与时钟回拨问题
分布式·算法
java1234_小锋9 小时前
Kafka与RabbitMQ相比有什么优势?
分布式·kafka·rabbitmq
yumgpkpm9 小时前
腾讯TBDS和CMP(Cloud Data AI Platform,类Cloudera CDP,如华为鲲鹏 ARM 版)比较的缺陷在哪里?
hive·hadoop·elasticsearch·zookeeper·oracle·kafka·hbase
古城小栈9 小时前
Spring Boot 4.0 深度解析:云原生时代的Java开发新标杆
java·spring boot·云原生
新手小白*9 小时前
K8S-Deployment 资源对象
云原生·容器·kubernetes
小毅&Nora9 小时前
【微服务】【部署】 ② 优雅停机 - 从“关门打烊“到“无缝交接“的实战指南
微服务·云原生·架构