首页 > 其他分享 >学习笔记之Zookeeper内部原理解析

学习笔记之Zookeeper内部原理解析

时间:2023-06-16 19:02:32浏览次数:32  
标签:znode 选举 Zookeeper 笔记 更改 服务器 解析 节点

1.1 节点类型

1.2 Stat结构体

(1)czxid-创建节点的事务zxid

每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。

事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。

(2)ctime - znode被创建的毫秒数(从1970年开始)

(3)mzxid - znode最后更新的事务zxid

(4)mtime - znode最后修改的毫秒数(从1970年开始)

(5)pZxid-znode最后更新的子节点zxid

(6)cversion - znode子节点变化号,znode子节点修改次数

(7)dataversion - znode数据变化号

(8)aclVersion - znode访问控制列表的变化号

(9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。

(10)dataLength- znode的数据长度

(11)numChildren - znode子节点数量

1.3 监听器原理

学习笔记之Zookeeper内部原理解析_zookeeper

1.4 选举机制

(1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。

(2)Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。

(3)以一个简单的例子来说明整个选举的过程。

学习笔记之Zookeeper内部原理解析_zookeeper_02

假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。

Zookeeper的选举机制

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;

(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的ID比自己目前投票推举的(服务器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一样当小弟。

1.5 写数据流程

学习笔记之Zookeeper内部原理解析_zookeeper_03

标签:znode,选举,Zookeeper,笔记,更改,服务器,解析,节点
From: https://blog.51cto.com/u_13878326/6501654

相关文章

  • 用声明式宏解析 Rust 语法
    在上一篇Rust声明式宏中的Metavariables有哪些的基础上,今天尝试解析一下Rust中的几种item。我们知道一个crate是由item组成的,每一个fnstructenumimplmod等定义都是一个item,这篇文章就简单解析一下Function和structFunction先看一个最简单的函数fnfoo(......
  • PAT甲级笔记
    第一次刷题笔记如果对数组进行sort排序:sort(a,a+n,cmp1);如果对vectorv或者字符串v进行sort排序:sort(v.begin(),v.end(),cmp1);辗转相除法求最大公约数:1 intgcd(inta,intb){2 returnb==0?a:gcd(b,a%b);3 }#definemax(a,b)a逗号后面不要加空......
  • 「学习笔记」组合数学
    本文部分内容来自\(\texttt{OI-Wiki}\)。加法&乘法原理加法原理完成一个工程可以有\(n\)类办法,\(a_i(1\lei\len)\)代表第\(i\)类方法的数目。那么完成这件事共有\(S=a_1+a_2+\cdots+a_n\)种不同的方法。乘法原理完成一个工程需要分\(n\)个步骤,\(a_i(1\le......
  • attention学习-课程笔记
    attention层计算过程:相似度函数fatt计算输入X和查询向量q之间的相似度e;相似度e经过softmax计算得到权重a。 向量e和a的长度与输入X的第一个维度相同。权重a与输入X相乘,得到输出y。相似度计算可使用点积dotprodecut,由于输入X的维度通常较高,q.X值会很大,因此使用sqrt(Dq)进......
  • 【阅读笔记】Anchored Neighborhood Regression for Fast Example-Based uper Resolut
    论文信息[AnchoredNeighborhoodRegressionforFastExample-BaseduperResolution]-TIMOFTER,2013,IEEEInternationalConferenceonComputerVision前置内容邻域嵌入(NeighborEmbedding,NE)是“样本-样本”映射,在训练样本中寻找测试样本的相似邻居特征样本,计算量略大。......
  • 打工笔记--------------------------弄了一个还不错的NPOI的helper类
    `usingNPOI.HSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.SS.Util;usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Text;namespaceUtils.Public{publicpartialclassNPOIHelper{/......
  • 用python生成正玄波信号源码解析
    一前记项目需要生成不同频点的正玄波信号,没找到现成的软件,只能自己写一个了。顺便温习一下python。 二源码解析:#!/usr/bin/pythonimportnumpyasnpfromscipyimportsignalimportwaveimportstructimportsysnum_samples=48000sampling_rate=48000.0ampl......
  • Linux终端快捷键笔记
    Linux快捷键: Tab  补全机制,可以补全文件名以及命令 ctrl+c 强制中断当前命令程序 ctrl+x 暂停终端当前运行的程序,fg命令可以恢复暂停的程序 ctrl+a 光标迅速回到行首 ctrl+e 光标迅速回到行尾 ctrl+u 剪切(删除)当前光标前的......
  • FLASH-CH32x芯片FLASH读写保护解析
    一、flash的操作流程1、解锁芯片复位后默认会给控制寄存器FLASH_CTRL上锁,这个时候不允许设置FLASH的控制寄存器,从而不能修改FLASH的内容。所以每次对FLASH写入数据前,都需要先给它解锁。2、擦除擦除有几种方式:页擦除(256字节、32K、64K)、标准擦除(4K)、全擦,不同擦除方式擦除flash......
  • Doo Prime 德璞资本:怎么买美股?美股购买流程大解析
    怎么买美股?对新手投资者来说是一个相对复杂的命题。因为受到地域因素的限制,美股购买流程会相对复杂一些,每一个美股购买流程环节都有许多注意点。以下是美股购买流程大解析的相关内容。美股购买流程一、选择美股开户方式美股开户方式有两种,一是到美国开户,而是通过线上交易平台完成开......