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 收到通知,获取锁。

相关推荐
Elastic 中国社区官方博客4 分钟前
使用 Elastic 中的 OpenTelemetry 为 Nginx 实现端到端分布式追踪的实用指南
大数据·运维·分布式·elasticsearch·搜索引擎·信息可视化·全文检索
win x43 分钟前
Redis 分布式锁
数据库·redis·分布式
原神启动12 小时前
K8S(九)—— Kubernetes 集群调度全面解析
云原生·容器·kubernetes
百度Geek说5 小时前
百度流式计算开发平台的降本增效之路
运维·云原生
a努力。5 小时前
字节跳动Java面试被问:一致性哈希的虚拟节点和数据迁移
java·开发语言·分布式·算法·缓存·面试·哈希算法
安科瑞小许6 小时前
分布式光伏车棚的智慧化运维:从数据采集到AI赋能
运维·人工智能·分布式·能源·光伏
ICT董老师7 小时前
kubernetes中operator与helm有什么区别?部署mysql集群是选择operator部署还是helm chart部署?
linux·运维·mysql·云原生·容器·kubernetes
一个向上的运维者9 小时前
实战解析|EFK 日志系统数据同步问题全解(附核心配置模板)
elasticsearch·云原生
论迹9 小时前
【RabbitMQ】-- 七种工作模式
分布式·rabbitmq
独自归家的兔10 小时前
解决k8s UI界面进不去
云原生·容器·kubernetes