zookeeper基础知识学习
官网:Apache ZooKeeper
下载地址:Index of /dist/zookeeper/zookeeper-3.5.7Index of /dist/zookeeperIndex of /dist/zookeeper/zookeeper-3.5.7
ZK配置参数说明:

1、tickTime=2000:通讯心跳时间,zookeeper服务器与客户端心跳时间,单位毫秒

2、initLimit=10:LF初始通讯时限

Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
3、syncLimit=5:LF同步通信时限

Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follower死掉,从服务器列表中删除Follower。
4、dataDir:保存zookeeper中的数据
注意:默认的tmp目录,会被linux系统定期清理,数据一般不放到/tmp下面
5、dataLogDir:保存zookeeper中的事务日志(服务器启动恢复数据的)
6、clientPort=2181:客户端连接端口
集群搭建配置:
1、在zk安装目录XXX/apache-zookeeper-3.5.7-bin/下创建data
mkdir data
2、在XXX/apache-zookeeper-3.5.7-bin/data/目录下创建文件myid
vi myid
在文件中添加与server对应的编号(注意:上下不要有空行,左右不要有空格)
1
3、配置zoo.cfg,添加如下配置:
server.1=192.168.1.100:2888:3888
server.2=192.168.1.101:2888:3888
server.3=192.168.1.102:2888:3888
2888:代表服务器Follower与集群中的Leader服务器交换信息的端口
3888:如果集群中Leader服务器挂掉。需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器间通讯的端口
客户端启动:
1、连接本地
bin/zkCli.sh
2、连接指定服务器
bin/zkCli.sh -server 192.168.1.101:2181
ZK常用命令:
| 命令 | 描述 |
|---|---|
| help | 显示所有操作命令 |
| ls path | 使用ls命令来查看当前znode的子节点【可监听】
-w 监听子节点变化 -s 附加次级信息 |
| create | 普通创建 -s 含有序列 -e 临时(重启或者过期消失) |
| get path | 获得节点的值【可监听】 -w 监听节点内容变化 -s 附加次级信息 |
| set | 设置节点的具体值 |
| stat | 查看节点状态 |
| delete | 删除节点 |
| deleteall | 递归删除节点 |
1、ls /path:查看当前znode
[zk: localhost:2181(CONNECTED) 4] ls /platform
[com.p2p.plugin.login.ILogin, com.p2p.plugin.login.ILoginExport]
[zk: localhost:2181(CONNECTED) 5]
ls -s /path:查看当前znode详情
[zk: localhost:2181(CONNECTED) 3] ls -s /platform
[com.p2p.plugin.login.ILogin, com.p2p.plugin.login.ILoginExport]cZxid = 0x3
ctime = Sun Jul 14 18:47:01 CST 2024
mZxid = 0x3
mtime = Sun Jul 14 18:47:01 CST 2024
pZxid = 0xb
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
| 参数 | 说明 |
|---|---|
| czxid | 创建节点的事务zxid 每次修改zookeeper状态都会产生一个zookeeper事务id。 事务id是zookeeper中所有修改总的次序。 每次修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生 |
| ctime | znode被创建的毫秒数(从1970年开始) |
| mzxid | znode最后更新的事务zxid |
| mtime | znode最后修改的毫秒数(从1970年开始) |
| pZxid | znode最后更新的子节点zxid |
| cversion | znode子节点变化号,znode子节点修改次数 |
| dataversion | znode数据变化号 |
| aclVersion | znode访问控制列表的变化号 |
| ephemeralOwner | 如果是临时节点,这个是znode拥有者的session id。 如果不是临时节点则是0. |
| dataLength | znode的数据长度 |
| numChildren | znonde子节点数量 |
2、create xxx
znode节点有四种类型:
- PERSISTENT:永久节点。客户端与zookeeper断开连接后,该节点依旧存在
- EPHEMERAL:临时节点。客户端与zookeeper断开连接后,该节点被删除
- PERSISTENT_SEQUENTIAL:永久节点、序列化。客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
- EPHEMERAL_SEQUENTIAL:临时节点、序列化。客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

create /xx test # 创建持久化节点
create -e /xx test # 创建临时节点
create -s /xx test # 创建持久序列化节点
create -e -s /xx test # 创建临时序列化节点
3、get path
获取节点信息
4、set path
设置节点
5、delete path
删除节点
6、监听器总结
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删除)时,ZooKeeper 会通知客户端。
1)节点的值变化监听
get -w /xx
注意:在右边的客户端多次修改/dd0000000007的值,左边不会再收到监听。因为注册一次,只能监听一次。想再次监听,需要再次注册。
2)节点的子节点变化监听(路径变化)
ls -w /xx
3)当某个节点创建或者删除的时候
stat -w /xx
zk选举机制:
半数机制,超过半数的投票通过,即通过
1、第一次启动选举规则:
- 投票过半数时,服务器id大的胜出
2、第二次启动选举规则:
- EPOCH(参与选举任期数)大的直接胜出
- EPOCH相同,事务id大的胜出
- 事务id相同,服务器大的胜出
.Zookeeper选举机制——第一次启动

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;
(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING;
(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
(4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;
(5)服务器5启动,同4一样当小弟。
| 名词 | 简介 | 含义 |
|---|---|---|
| SID | 服务器ID | 用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致 |
| ZXID | 事务ID | ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。 |
| Epoch | 每个Leader任期的代号 | 没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加 |
Zookeeper选举机制——非第一次启动
(1)当zookeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:
- 服务器初始化启动
- 服务器运行期间无法和leader保持连接
(2)而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:
- 集群中本来就已经存在一个Leader
对于这种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
- 集群中确实不存在Leader(重点)
假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。最后选了服务器2。

生产环境zk服务器多少合适:
安装奇数台。
生产经验:
- 10台服务器:3台zk
- 20台服务器:5台zk
- 100台服务器:11台zk
- 200台服务器:11台zk
相关文章:
zookeeper基础知识学习
官网:Apache ZooKeeper 下载地址:Index of /dist/zookeeper/zookeeper-3.5.7Index of /dist/zookeeperIndex of /dist/zookeeper/zookeeper-3.5.7 ZK配置参数说明: 1、tickTime2000:通讯心跳时间,zookeeper服务器与客…...
C语言内存管理深度解析面试题及参考答案(2万字长文)
在嵌入式面试时,C语言内存管理是必问面试题,也是难点,相关知识点可以参考: C语言内存管理深度解析 下面整理了各种类型的C语言内存管理的面试题: 目录 全局变量和局部变量在内存中分别存储在哪个区域? 静态变量和全局变量有什么区别? 什么是作用域?…...
C++基础(二)
目录 1.类和对象 1.1类的定义 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.类的默认成员函数 4.1构造函数 4.2析构函数 4.5运算符重载 1.类和对象 1.1类的定义 类的定义格式 class为定义类的关键字,Stack为类的名字&…...
R 绘图 - 中文支持
R 绘图 - 中文支持 R 是一种广泛使用的统计和数据分析编程语言,它提供了强大的绘图功能。然而,R 的默认设置并不直接支持中文,这可能会在使用 R 进行绘图时造成困扰,尤其是当需要在图表中添加中文标签或标题时。本文将介绍如何在…...
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-标题菜单及游戏结束界面(九)
文章目录 开发思路标题菜单界面标题菜单脚本代码结束菜单界面结束菜单脚本代码 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一) 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二) 使用Godot4组件制作竖版…...
[终端安全]-6 移动终端之应用程序安全
笔者在终端安全专题前面的文章中介绍了移动终端硬件安全和操作系统安全,本文主要介绍移动终端应用安全。在本文最前面,笔者想先解答一位朋友的疑问,为什么需要费心打造一个完整的面面俱到的安全体系? 1 移动终端安全的重要性 移…...
基于望获实时Linux的高性能运动控制器适配
在快速迭代的工业自动化与机器人控制领域,高性能运动控制器无疑是实现极致精度与效率的核心引擎。实时操作系统(Real-Time Operating System,RTOS)凭借其低延迟与高度确定性的特性,成为这些高精度、高速度应用的首选平台。 望获…...
电气工程VR虚拟仿真实训平台以趣味化方式增强吸引力
在工业4.0时代和教育信息化的双重推动下,我们致力于推动实训课件的跨界合作与共创。VR实训课件不仅促进了不同领域、不同行业之间的紧密合作,更让学习变得生动直观。我们凭借3D技术生动、直观、形象的特点,开发了大量配套3D教材,让…...
数据结构(单链表(1))
前言 线性表中有着许多的结构,如顺序表和链表。而单链表则是链表的最基础的一种形式,下面就让我们对其做一个了解。 概念 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次…...
STM32第十八课:SPIFlash
目录 需求一、SPI概要二、SPI配置1.开时钟2.配置IO3.配置&使能SPI 三、FLash操作函数1.SPI发送数据2.FLASH写使能3.FLASH等待操作完成4.FLASH页写操作5.FLASH读操作6.FLASH扇区擦除 四、需求实现 需求 通过SPI控制FLash进行数据的保存和删除。 一、SPI概要 在我们使用UA…...
如何使用IPython的并行计算能力处理大数据
目录 引言IPython概述 什么是IPythonIPython的特点 并行计算简介 什么是并行计算并行计算的优势 IPython的并行计算功能 IPython.parallel模块IPython并行架构 IPython的安装与配置 安装IPython配置并行环境 IPython并行计算的基础 任务分发与负载均衡核心概念:Cli…...
前端热门面试题二
你有使用过哪些前端构建工具(如Webpack、Gulp、Rollup)?并谈谈它们的特点和优势。 在前端开发中,构建工具扮演着至关重要的角色,它们能够自动化处理各种任务,如代码压缩、模块打包、代码转换、静态资源管理…...
Android TabLayout+ViewPager2如何优雅的实现联动详解
一、介绍 Android开发过程中,我们经常会遇到滑动导航栏的做法,之前的做法就是我们通过ViewGroup来转动,然后通过大量的自定义来完成,将导航栏item与viewpage 滑动,达到业务需求 二、现实方案 通过介绍,我…...
k8s快速部署一个网站
1)使用Deployment控制器部署镜像: kubectl create deployment web-demo --imagelizhenliang/web-demo:v1 kubectl get deployment,pods[rootk8s-matser ~]# kubectl get pods NAME READY STATUS RESTARTS A…...
期货量化交易客户端开源教学第四节——交易接口协议
指令介绍: 01----09:服务端发送到客户端指令 10----49:客户端发送操作指令 50----59:客户端与服务端通讯指令 60----99:股票接口与服务端交互指令 --------------------------------------------------- 02:商品行情 03:用户信息接收 04:用户资产信息接收 ----发送到…...
M1000 4G蓝牙网关:高速稳定,赋能物联网新体验
桂花网M1000的4G移动网络功能主要体现在以下几个方面: 一、高速稳定的数据传输 高速率:M1000支持4G移动网络,能够实现高速的数据传输。根据4G网络的技术标准,其理论上的最大下行速率可达到数百Mbps(如TD-LTE在20MHz带…...
中国高端水果元宇宙
高档榴莲通常指的是品质上乘、口感极佳、产地知名且价格较高的榴莲品种。榴莲因其独特的风味和营养价值而被誉为“水果之王”,在东南亚尤其受欢迎。以下是一些被认为是高档榴莲的品种: 1.**猫山王榴莲(Musang King or Mao Shan Wangÿ…...
MySQL:库操作
1. 创建数据库 create database [if not exists] name [create_specification], [create_specification]... []内为可选的选项 create_specification: character set charset_name -- 指定数据库采用的字符集 -- 数据库未来存储数据 collate collation_name -- 指定数据库字符…...
struts2如何防止XSS脚本攻击(XSS防跨站脚本攻击过滤器)
只需要配置一个拦截器即可解决参数内容替换 一、配置web.xml <filter><filter-name>struts-xssFilter</filter-name><filter-class>*.*.filters.XssFilter</filter-class></filter><filter-mapping><filter-name>struts-xss…...
SQL基础 | NOT NULL 约束介绍
在SQL中,NOT NULL是一个约束条件,用于确保列不接受NULL值。 这个约束通常在创建表或修改表时使用,以确保数据的完整性和准确性。 以下是NOT NULL的一些常见用法: 创建表时指定NOT NULL约束: 当你创建一个新表时&#x…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
