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之前发生

ctimeznode被创建的毫秒数(从1970年开始)
mzxidznode最后更新的事务zxid
mtimeznode最后修改的毫秒数(从1970年开始)
pZxidznode最后更新的子节点zxid
cversionznode子节点变化号,znode子节点修改次数
dataversionznode数据变化号
aclVersionznode访问控制列表的变化号
ephemeralOwner如果是临时节点,这个是znode拥有者的session id。 如果不是临时节点则是0.
dataLengthznode的数据长度
numChildrenznonde子节点数量

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378689.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连锁直营店小程序赋能多店如何管理

如商超便利店卖货线下场景,也有不少品牌以同城多店和多地开店经营为主,获取店铺周围客户和散流,如今线上重要性凸显,品牌电商发展是经营的重要方式之一,也是完善同城和外地客户随时便捷消费的方式之一。 多个门店管理…

Python | Leetcode Python题解之第238题除自身以外数组的乘积

题目: 题解: class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:length len(nums)# L 和 R 分别表示左右两侧的乘积列表L, R, answer [0]*length, [0]*length, [0]*length# L[i] 为索引 i 左侧所有元素的乘积# 对于索引为…

STM32智能交通监测系统教程

目录 引言环境准备智能交通监测系统基础代码实现:实现智能交通监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:交通监测与管理问题解决方案与优化收尾与总结 1. 引言 智能交通监测系统通…

MyBatis源码中的设计模式1

1. 建造者模式的应用 建造者模式属于创建类模式,通过一步一步地创建一个复杂的对象,能够将部件与其组装过程分开。用户只需指定复杂对象的类型,就可以得到该对象,而不需要了解其内部的具体构造细节。《Effective Java》中也提到&…

OpenCV教程04:结合pillow在图片上显示中文文字

1.如果添加的内容是纯英文文字,直接使用cv2.putText 函数操作即可。但它不支持自定义字体文件,仅限于这些内置的字体样式。如果你需要更复杂的字体支持,可能需要使用其他库,如 Python Imaging Library (PIL) 或 Pillow。可用的字体…

Docker-Nvidia(NVIDIA Container Toolkit)

安装NVIDIA Container Toolkit工具,支持docker使用GPU 目录 1.NVIDIA Container Toolkit 安装1.1 nvidia-docker安装1.2 验证1.2.1 验证安装1.2.2 额外补充 1.NVIDIA Container Toolkit 安装 1.1 nvidia-docker安装 NVIDIA/nvidia-docker Installing the NVIDIA …

【BUG】已解决:java.lang.IllegalStateException: Duplicate key

已解决:java.lang.IllegalStateException: Duplicate key 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市…

线程控制

对线程的控制思路和进程相似,创建、等待、终止,只需要调用接口就行。但是在Linux下没有线程的概念,因为Linux的设计者认为,线程是一种轻量级的进程,毕竟创建线程只需要创建PCB。因此Linux中使用多线程必须使用第三方pt…

聊一聊前后端权限控制 RBAC(完整流程)

介绍 RBAC(Role-Based Access Control)模型也就是基于角色的权限控制。 权限会分配到角色中,角色再分配给用户,这样用户就根据角色有了不同的权限。 当然,你可以说把权限直接挂载到用户上,这样不是更直接…

前端工程化10-webpack静态的模块化打包工具之各种loader处理器

9.1、案例编写 我们创建一个component.js 通过JavaScript创建了一个元素,并且希望给它设置一些样式; 我们自己写的css,要把他加入到Webpack的图结构当中,这样才能被webpack检测到进行打包, style.css–>div_cn.js–>main…

代码随想录二刷复习(二分法)

二分法模板: 1:左闭右闭区间写法 第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。 区间的定义这就决定了二分法的代码应该如何写,因为定…

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述: 泛微 e-cology 是泛微公司开发的协同管理应用平台。泛微 e-cology v10.64.1的/services/接口默认对内网暴露,用于服务调用,未经身份认证的攻击者可向 /services/WorkflowServiceXml 接口发送恶意的SOAP请求进行SQL注入,…

Web渗透:Shiro550漏洞(CVE-2016-4437)

Apache Shiro 是一个强大且易于使用的Java安全框架,提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)和密码学支持等功能。Apache Shiro 550反序列化漏洞&a…

AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS

偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法,它集中了主成分分析、典型相关分析和线性回归的特点,特别在解决回归中的共线性问题具有无可比拟…

内网安全:权限维持的各种姿势

1.Linux权限维持 2.Windows权限维持 目录: 一.Linux权限维持: 1.webshell: 2.定时任务: 3.SUID后门: 4.SSH Key免密登录后门: 5.添加用户后门: 二.Windows权限维持 1.计划任务后门&…

记录些Spring+题集(1)

接口防刷机制 接口被刷指的是同一接口被频繁调用,可能是由于以下原因导致: 恶意攻击:攻击者利用自动化脚本或工具对接口进行大量请求,以消耗系统资源、拖慢系统响应速度或达到其他恶意目的。误操作或程序错误:某些情…

iOS ------ 消息传递和消息转发

一,消息传递 在OC中,传递消息就是在对象上调用方法。 相对于C语言的方法就“静态绑定”的函数,在编译器就决定了运行时所要调用的函数。在OC中,如果向某对象传递消息,就会使用动态绑定机制来决定需要调用那个方法。调…

【操作系统】定时器(Timer)的实现

这里写目录标题 定时器一、定时器是什么二、标准库中的定时器三、实现定时器 定时器 一、定时器是什么 定时器也是软件开发中的⼀个重要组件.类似于⼀个"闹钟".达到⼀个设定的时间之后,就执行某个指定 好的代码. 定时器是⼀种实际开发中⾮常常用的组件. ⽐如⽹络通…

浅谈C嘎嘎类与对象

本篇文章与大家浅谈一下C嘎嘎的类与对象知识点 类的定义 关键字:class 语法格式: class 类名 { };//这里的分号不能少 此外,class有三个属性分别是private、public、protected,这三个属性是干啥的,相…

FPGA CFGBVS 管脚接法

说明 新设计了1个KU040 FPGA板子,回来之后接上JTAG FPGA不识别。做如下检查: 1、电源测试点均正常; 2、查看贴片是否有漏焊,检查无异常,设计上NC的才NC; 3、反复检查JTAG接线是否异常,贴片是…