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

相关推荐
chilavert3186 小时前
技术演进中的开发沉思-146 java-servlet:Servlet 在云原生时代的适配”
服务器·servlet·云原生
容器魔方6 小时前
Karmada 用户组再迎新成员,Scatter Lab 正式加入!
云原生·容器·云计算
Serverless社区6 小时前
加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
阿里云·云原生·serverless
小安运维日记6 小时前
RHCA - DO374 | Day01:使用红帽Ansible自动化平台开发剧本
运维·服务器·云原生·自动化·云计算·ansible
鸽鸽程序猿6 小时前
【RabbitMQ】简介
分布式·rabbitmq
在未来等你6 小时前
Kafka面试精讲 Day 29:版本升级与平滑迁移
大数据·分布式·面试·kafka·消息队列
在未来等你7 小时前
Kafka面试精讲 Day 30:Kafka面试真题解析与答题技巧
大数据·分布式·面试·kafka·消息队列
白帽子黑客罗哥7 小时前
云原生安全深度实战:从容器安全到零信任架构
安全·云原生·架构·零信任·容器安全·kubernetes安全·服务网络