大数据技术之Zookeeper总结Ⅰ

news2024/11/28 14:44:54

zookeeper总结目录

  • 1. Zookeeper 入门
    • 1.1 zookeeper概述
    • 1.2 Zookeeper特点
    • 1.3 ZooKeeper 数据模型的结构
  • 2. Zookeeper 本地安装
    • 2.1 本地模式安装
    • 2.2 配置参数解读
  • 3. Zookeeper 集群操作
    • 3.1 集群操作
    • 3.2 Zookeeper 集群启动停止脚本
    • 3.3 客户端命令行语法

1. Zookeeper 入门

1.1 zookeeper概述

  • Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。

  • Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理的数据,然 后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就 将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。

Zookeeper工作机制:
在这里插入图片描述

  • Zookeeper集群有奇数个服务器存储文件系统,在服务器节点信息发生变化时会给正在监听的客户端返回信息----每一次监听只能返回一次节点的变化,等再次发生变化时,客户端就监听不到了

1.2 Zookeeper特点

在这里插入图片描述

(1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
(2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器
(3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
(4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行
(5)数据更新原子性,一次数据更新要么成功,要么失败。
(6)实时性,在一定时间范围内,Client能读到最新数据。

1.3 ZooKeeper 数据模型的结构

  • ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过其路径唯一标识。

在这里插入图片描述

Zookeeper提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。

2. Zookeeper 本地安装

2.1 本地模式安装

  • 安装前准备

    • 安装 JDK
    • 拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下
    • 解压到指定目录: tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
    • 修改名称:mv apache-zookeeper-3.5.7 -bin/ zookeeper-3.5.7
  • 配置修改

    • 将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg
      • mv zoo_sample.cfg zoo.cfg
    • 打开 zoo.cfg 文件,修改 dataDir 路径:
      • dataDir=/opt/module/zookeeper-3.5.7/zkData
    • 在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹存储数据
  • 操作 Zookeeper

    • 启动 Zookeeper: bin/zkServer.sh start
    • 查看状态: bin/zkServer.sh status
    • 启动客户端: bin/zkCli.sh
    • 退出客户端:quit
    • 停止Zookeeper:bin/zkServer.sh stop

2.2 配置参数解读

  • Zookeeper中的配置文件zoo.cfg:
    • tickTime = 2000:通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒------两者通信使用时间
    • initLimit = 10:LF初始通信时限—Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)------初始建立通信连接时间
    • syncLimit = 5:LF同步通信时限:Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。----超时没有通信Leader则会认为该台服务器已经崩了(Follow)
    • dataDir:保存Zookeeper中的数据-----集群数据存储位置

3. Zookeeper 集群操作

3.1 集群操作

  • 集群Leader和Follow选举机制

  • 第一次选举
    在这里插入图片描述

选举解读:

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

(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时**服务器1发现服务器2的myid【服务器编号】**比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果(一共5台服务器),选举无法完成,服务器1,2状态保持LOOKING

(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;LOOKING LOOKING

(4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;----后来者当小弟

(5)服务器5启动,同4一样当小弟。


  • 非第一次选举(中间服务器Leader或者是Follow出故障)

在这里插入图片描述

(1)当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:

  • 服务器初始化启动
  • 服务器运行期间无法和Leader保持连接

(2)而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:

  • 集群中本来就已经存在一个Leader。
    • 对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
  • 集群中确实不存在Leader。
    • 假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、9、9,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。
    • 选举Leader规则: ①EPOCH大的直接胜出 ②EPOCH相同,事务id大的胜出 ③事务id相同,服务器id大的胜出

不存在Leader选举示例

  • 问题:SID分别为1、2、3、4、5,ZXID分别为8、9、9、9、9,ECHO:1、1、1、1、1并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举
    • 首先,1 、2、4进入选举,查看ECHO: 三者相同进入下一轮
    • 看每一台服务器的ZXID:2、4的ZIXID比1大,服务器1号淘汰
    • 最后看2、4号服务器的的SID,4号大,轮选本次的Leader

SID、PID、ZXID参数解读:

SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重
复,和myid一致。
ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,
集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。
Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加

3.2 Zookeeper 集群启动停止脚本

进入到用户的bin目录下:创建zk.sh

#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
 echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh 
start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
 echo ---------- zookeeper $i 停止 ------------ 
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh 
stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
 echo ---------- zookeeper $i 状态 ------------ 
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh 
status"
done
};;
esac
  • 修改权限:
    • chmod u+x zk.sh
  • Zookeeper 集群启动脚本
    • zk.sk start
  • Zookeeper 集群启动脚本
    • zk.sk stop

3.3 客户端命令行语法

命令基本语法功能描述
help显示所有操作命令
ls path使用 ls 命令来查看当前 znode 的子节点 [可监听]          -w 监听子节点变化  -s 附加次级信息
create普通创建 -s 含有序列 -e 临时(重启或者超时消失)
get path获得节点的值 [可监听] -w 监听节点内容变化-s 附加次级信息
set设置节点的具体值
stat查看节点状态
delete删除节点
deleteall递归删除节点

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构七:七大排序

目录 1:排序的概率 2.插入排序 2.1:直接插入排序-----稳定 2.1.1:基本思想 2.2:希尔排序 2.2.1:概念: 3.选择排序 3.1:选择排序 3.1.1:概念 3.2:堆排序 4.交换排序 4.1&…

微信小程序自动化测试之路

1. 前言 在每次发布新版本之前、都需要回归核心功能、已确保上线后小程序也能按照预期运行. 目前这部分回归工作是由测试同事手工去验证测试用例、按照每周一版本的迭代节奏、回归就花了测试挺多时间的. 最近前端工作比较轻松、故在思考能否把这部分重复的工作交给程序自动来进…

【EhCache: 一款Java的进程内缓存框架】EhCache 是什么、代码实战 Demo

文章目录1 EhCache 是什么2 代码实战 DemoTestEH.javaehcache.xml1 EhCache 是什么 Ehcache 是一种开源的、基于标准的缓存,可提高性能、卸载数据库并简化可扩展性。它是最广泛使用的基于 Java 的缓存,因为它健壮、经过验证、功能齐全,并且与…

python 基于PHP+MySQL的装修网站的设计与实现

至今为止,越来越多企业公司都已经实现了线上推广,提高了企业的运营工作效率,为装修公司设计一款强大的智能装修网,集企业信息展示和信息管理于一体,结合企业与外部的在线交流功能,主要用于大力宣传企业服务、企业产品等信息,让更多的人了解,提高企业的知名度 1:系统…

Spring Data Neo4j(1.对象映射)

文章目录一、Spring Data Neo4j二、注释NodeIdVersion(乐观锁)PropertyRelationship一、Spring Data Neo4j Spring Data Neo4j或简称SDN是下一代Spring Data模块,由Neo4j,Inc.创建和维护。与VMware的Spring Data Team密切合作。 它支持所有官方支持的Ne…

<Linux> shell运行原理及Linux权限的理解

文章目录一、shell 命令及其运行原理shell外壳shell运行原理二、Linux 权限的概念1.用户分类2.切换用户3.用户提权三、Linux 权限管理1.文件访问者的分类(人)2.文件类型和访问权限(事物属性)四、文件权限值的表示方法1.字符表示法…

Pycharm 配置远程SSH服务器环境(切换不同虚拟环境)

1.首先在Xshell上通过conda创建新的虚拟环境 2.此时在 /home/y210101004/.conda/envs下多了刚刚创建的环境的文件夹 3.路径说明! (注意!)该环境的编译器python3.6就在.../jiayan_test/bin里面 (注意!&…

04.函数

一、 函数 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务…

ctfshow学习记录-misc入门(图片篇-颜色通道50-59)

目录misc50misc51misc52misc53misc54misc55misc56misc57misc58misc59misc51-52的wp和脚本参考的是csdn博主:z.volcano 九某人的碎碎念:这篇一更,说明近期是真的没有时间写wp了。虽说好多都是之前做过的题,但是wp整理起来还是比较耗…

OpenCV-Python 颜色识别(红色)并拟合矫正目标区域

OpenCV版本:4.6.0.66 算法实现思路: 颜色识别(红色)形态学去噪轮廓检测多边形拟合透视矫正代码实现: import cv2 import numpy as np# 可视化 def img_show(name, img):cv2.namedWindow(name, 0)cv2.resizeWindow(name, 1000, 500)cv2.imsh…

Java内存模型与volatile

Java内存模型 Java内存模型Java Memory Model,简称JMM,本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另…

白鹭群优化算法(ESOA)附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

单调区间能写成并吗?【基于间断区间的讨论】

不能。 问题 在做到一道题的时候,发现了两个减区间,于是就用并∪连接到一起了,但是答案是要用和连接。于是想要辨析一下这个并和和的区别。 区别 并:并的意思是将多个区间看成一个并起来的整体,在整个区间上仍然是…

按照 STAR 法则介绍自己做过的项目

大家好啊,我是大田 介绍项目注意两点:1、自己真的做过 2、逻辑表达能力 为什么推荐你用 STAR 法则说呢? STAR 法则是结构化面试中非常重要的理论。 面试官通过这样的描述全面了解你的测试知识、经验、技术能力的掌握程度,通过你发…

本地pycharm连接到远程服务器(超级详细)

本地pycharm连接到远程服务器(超级详细) 文章之前,你需要做的是 1.服务器需要创建好虚拟环境 2.你的本地安装好pycharm 目的是 同步服务器上的文件 在本地进行debug,并将修改后的文件进行更新 一般是将文件代码上传到服务器上面&…

【微服务】Sentinel 控制台

目录 1. 概述 2. 启动控制台 2.1 获取 Sentinel 控制台 2.2 启动 3. 客户端接入控制台 3.1 引入JAR包 3.2 配置启动参数 3.3 触发客户端初始化 4. 查看机器列表以及健康情况 5. 监控 5.1 "簇点链路"中显示刚刚调用的资源(单机实时) …

猿创征文|分享一下我的日常开发工具和常用软件

1、Eclipse IDE for Java Developers 这个软件,个人已经用了很多年的免费 Java 开发软件。 1)配置JDK 2)新建项目 3)运行使用 这里注意到有 Run As 和 Debug As ,区别就是后者是调试模式,你可以在代码任意处打断点跟…

element-ui中获取el-divider的组件的ref时为空

element-ui中的el-divider组件是函数式组件,所以当我尝试获取其ref时总是获取不到,因为函数式组件没有this. ![在这里插入图片描述](https://img-blog.csdnimg.cn/496711bf5c2a4dd1bee168e4e2d638d4.png)此时打印this.$refs,控制台输出: 没有h2,翻看el-divider源码发现是函数式…

C++入门学习3-指针与字符数组,函数,指针数组

c入门学习3char型指针的使用p*p*p与p与[整型指针指向整型数组]的区别指针与函数的使用指向函数的指针空指针调用函数从函数中返回指针一维数组和二维数组的类比CHAR型指针数组关于&achar型指针的使用 char型指针可以直接指向一个字符串,如下 char s[]{a,b,c};…

YOLO V7源码解析

1.命令行参数介绍 YOLO v7参数与YOLO v5差不多,我就直接将YOLO v5命令行参数搬过来了,偷个懒 --weights:初始权重--cfg:模型配置文件--data:数据配置文件--hyp:学习率等超参数文件--epochs:迭代次数-imgsz:图像大小--rect:长方…