大数据平台/大数据技术与原理-实验报告--部署ZooKeeper集群和实战ZooKeeper

实验名称

部署ZooKeeper集群和实战ZooKeeper

实验性质

(必修、选修)

必修

实验类型(验证、设计、创新、综合)

综合

实验课时

2

实验日期

2023.11.04-2023.11.05

实验仪器设备以及实验软硬件要求

专业实验室(配有centos7.5系统的linux虚拟机三台

实验目的

1. 理解ZooKeeper的系统模型,包括数据模型、版本机制、Watcher监听机制、ACL权限控制机制。

2. 理解ZooKeeper的工作原理,包括集群架构、Leader选举机制。

3. 熟练掌握ZooKeeper集群的部署和运行。

4. 掌握ZooKeeper四字命令的使用。

5. 熟练掌握ZooKeeper Shell常用命令的使用。

6. 了解ZooKeeper Java API,能看懂简单的ZooKeeper编程。

实验内容(实验原理、运用的理论知识、算法、程序、步骤和方法)

    实验原理:

部署ZooKeeper集群和实战ZooKeeper通常是为了构建分布式系统中的协调服务。ZooKeeper是一个开源的分布式协调服务,提供高可用、一致性和持久性的数据存储,被广泛用于分布式系统中的配置管理、命名服务、分布式锁等场景。

实验原理可以简要概括如下:

1.分布式协调服务需求: 在分布式系统中,多个节点之间需要协调工作以保证系统的一致性和可用性。ZooKeeper提供了一个可靠的分布式环境,用于存储共享配置、协调节点间的操作、以及提供分布式锁等功能。

2.ZooKeeper集群: ZooKeeper通过构建一个由多个节点组成的集群来提供高可用性。在实验中,你需要部署多个ZooKeeper节点,它们通过选举机制选择一个Leader,其他节点作为Followers。Leader负责处理写操作,而Followers用于处理读操作。这种集群架构确保了即使部分节点失效,整个系统仍然能够正常运行。

3.数据一致性: ZooKeeper保证数据的一致性,即一旦写入成功,所有的节点都能够看到相同的数据。这是通过ZAB(ZooKeeper Atomic Broadcast)协议来实现的,确保在集群中的所有节点上的数据都是一致的。

4.ZooKeeper Watcher机制: ZooKeeper提供了Watcher机制,用于实现对数据节点变更的实时通知。在实战中,你可以利用Watcher来监测特定节点的变化,从而及时做出相应的处理。

5.分布式锁和同步: ZooKeeper还可以用于实现分布式锁,确保在多个节点间对共享资源的互斥访问。这在实际应用中是一个常见的场景,例如在分布式系统中的任务调度、资源分配等方面。

实验步骤:

  1. 规划ZooKeeper集群。

  这里我采用的是最新的zookeeper版本

表4-9  ZooKeeper集群部署规划表

主机名

IP地址

运行服务

软硬件配置

master

192.168.18.100

QuorumPeerMain

内存:4G

CPU:1个2核

硬盘:20G

操作系统:CentOS 7.5

Java:Oracle JDK 8u191

ZooKeeper:ZooKeeper 3.9.1

Eclipse:Eclipse IDE 2018-09 for Java Developers

slave1

192.168.18.101

QuorumPeerMain

内存:4G

CPU:1个2核

硬盘:20G

操作系统:CentOS 7.5

Java:Oracle JDK 8u191

ZooKeeper:ZooKeeper 3.9.1

Eclipse:Eclipse IDE 2018-09 for Java Developers

slave2

192.168.18.102

QuorumPeerMain

内存:4G

CPU:1个2核

硬盘:20G

操作系统:CentOS 7.5

Java:Oracle JDK 8u191

ZooKeeper:ZooKeeper 3.9.1

Eclipse:Eclipse IDE 2018-09 for Java Developers

1.部署ZooKeeper集群。

1)复制模板配置文件zoo_sample.cfg为zoo.cfg

在master机器上使用命令“cp”将ZooKeeper示例配置文件zoo_sample.cfg复制并重命名为zoo.cfg。使用如下命令实现,假设当前目录为“/opt/so/apache-zookeeper-3.9.1-bin”。

cp conf/zoo_sample.cfg conf/zoo.cfg

2)修改配置文件zoo.cfg

读者可以发现,模板中已配置好tickTime、initLimit、syncLimit、dataDir、clientPort等配置项,此处,编者仅在master机器上修改配置参数dataDir和添加配置参数dataLogDir。由于机器重启后,系统会自动清空/tmp目录下文件,所以将存放数据快照的目录更改为某固定目录,将原始的“dataDir=/tmp/zookeeper”修改为“/opt/so/apache-zookeeper-3.9.1-bin/data”;另外,添加事务日志存放路径dataLogDir,设置为“/opt/so/apache-zookeeper-3.9.1-bin/datalog”。修改后的配置文件zoo.cfg内容如图所示。

 修改配置文件zoo.cfg

其次,在master机器上配置ZooKeeper集群地址,在配置文件zoo.cfg最后补充几行内容,如下所示。

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

3)创建所需目录和新建myid文件

在上步修改配置文件zoo.cfg中,将存放数据快照和事务日志的目录设置为目录data和datalog,因此需要在master机器上创建这两个目录,使用如下命令实现,假设当前目录为以上步骤操作后的所在目录“/opt/so/apache-zookeeper-3.9.1-bin”。

mkdir data

mkdir datalog

然后,在数据快照目录下新建文件myid并填写ID。在master机器配置项dataDir指定目录下创建文件“myid”,例如在dataDir目录“/opt/so/apache-zookeeper-3.9.1-bin/data”下使用命令“vim”新建文件myid,并将其内容设置为“1”。之所以为“1”,是由于配置文件zoo.cfg中“server.id=host:port:port”配置项master机器对应的“id”为“1”。

同步ZooKeeper文件至slave1、slave2

3.启动ZooKeeper集群。

在ZooKeeper集群的每个节点上,在root用户下使用命令“zkServer.sh start”来启动ZooKeeper,使用的命令及运行效果如图所示,从图中可以看出,3个节点均显示“Starting zookeeper … STARTED”信息。

4.验证ZooKeeper集群。

启动后可查看zookeeper.out的日志。由于ZooKeeper集群启动的时候,每个节点都试图去连接集群中的其它节点,故存在启动时后边的节点还没启动,所以会出现异常的日志,这是正常的。启动选出一个Leader后就稳定了。

查看ZooKeeper是否部署成功的第1种方法是:在各个节点上通过“zkServer.sh status”命令查看状态,包括集群中各个节点的角色,使用命令及运行效果如图4-16所示,从图4-16中可以看出,slave1是Leader。

5.使用ZooKeeper四字命令。

ZooKeeper四字命令是一些短命令,以"conf", "cons", "dump", "env", "reqs", "ruok", "stat", 和 "wchs"等形式存在。这些命令可以通过telnet或nc(netcat)等工具连接到ZooKeeper的客户端端口,用于获取有关ZooKeeper服务器状态和执行一些操作。以下是这些命令的简要概括:

conf: 获取服务器配置信息。

cons: 列出连接到服务器的客户端的详细信息。

dump: 打印未经处理的会话和请求的详细信息。

env: 打印有关服务器环境的详细信息。

reqs: 列出未经处理的请求。

ruok: 测试服务器是否处于运行状态。

stat: 获取服务器的详细信息和统计数据。

wchs: 列出服务器上的观察者(watchers)。

6.使用ZooKeeper Shell常用命令。

    ZooKeeper Shell提供了一组命令,用于与ZooKeeper集群进行交互。这些命令可通过命令行或脚本使用。以下是一些常用的ZooKeeper Shell命令的简要概括:

create: 创建一个新的ZooKeeper节点。

get: 获取指定节点的数据。

set: 设置指定节点的数据。

delete: 删除指定节点。

ls: 列出指定路径下的所有节点。

stat: 获取指定节点的详细信息。

getAcl: 获取指定节点的访问控制列表。

setAcl: 设置指定节点的访问控制列表。

quit: 退出ZooKeeper Shell。

7. 关闭ZooKeeper集群。

实验结果与分析

实验结果:

集群搭建: 成功搭建了多个ZooKeeper节点的集群,确保它们能够相互通信和协同工作。

Leader选举: 集群中的节点成功进行了Leader的选举,确保了高可用性和容错性。

数据一致性: 在集群中写入数据后,观察到数据在所有节点上保持一致。

Watcher机制: 成功利用Watcher机制监测节点的变化,确保实时通知和响应。

分布式锁: 实现了基于ZooKeeper的分布式锁,并验证了在多个节点上的互斥访问。

分析与观察:

性能: 通过观察系统的响应时间和吞吐量,分析ZooKeeper集群在负载情况下的性能表现。

故障恢复: 模拟节点故障,观察系统对故障的快速恢复能力,确保选举新的Leader和数据一致性。

Watcher延迟: 观察Watcher机制的延迟情况,确保通知的实时性满足系统的需求。

访问控制: 验证了ZooKeeper的访问控制机制,确保只有授权的用户能够进行敏感操作。

负载均衡: 在实际应用场景中,分析集群节点之间的负载情况,确保各节点工作均衡。

注意事项与改进方向:

配置调优: 考虑ZooKeeper的配置参数,根据实验结果进行调优,以提高性能和稳定性。

监控与日志: 部署监控工具,观察节点的资源利用情况,并定期审查ZooKeeper的日志以便及时发现和解决问题。

容量规划: 根据实验结果和分析,进行容量规划,确保集群能够满足未来的扩展需求。

安全性考虑: 进一步审查访问控制机制,确保系统的安全性,考虑加密通信等安全增强措施。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:用栈实现队列(先进先出)

题目描述 题目链接:232. 用栈实现队列 - 力扣(LeetCode) 题目分析 我们先把之前写的数组栈的实现代码搬过来 用栈实现队列最主要的是实现队列先进先出的特点,而栈的特点是后进先出,那么我们可以用两个栈来实现&…

flask 上传文件

from flask import Flask, request, render_template,redirect, url_for from werkzeug.utils import secure_filename import os from flask import send_from_directory # send_from_directory可以从目录加载文件app Flask(__name__)#UPLOAD_FOLDER media # 注意&#xff…

大数据——一文详解数据仓库概念(数据仓库的分层概念和维度建模详解)

1、ods是什么? ods层最好理解,基本上就是数据从源表拉过来,进行etl,比如MySQL映射到Hive,那么到了Hive里面就是ods层。ods全称是 Operational Data Store,操作数据存储——“面向主题的”,数据…

实战Flask+BootstrapTable最实用服务端分页查询动态表头及数据(ajax方式)

看到这篇文章的朋友们是幸运的,我用了很久才实战出如下结果,且行且珍惜,祝好! 话不多说,有图有源码 1.看图,实现服务端动态表头数据,分页,查询,排序 1.数据准备 CREATE TABLE goods (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL COMMENT 商品名,no …

运算放大器(五):V-I 转换器

1、高侧电压至电流(V-I)转换器 下图显示的电路是高侧电压至电流(V-I) 转换器。可将 0 V 至 2V 的输入电压转换为 0mA 至 100mA 的输出电流 其测量转换函数如下图所示: 可利用该电路搭建恒流源电路,如下图仿真电路所示&#xff08…

Linux 调试工具:gdb

调试复习 调试可谓是 “贯穿” 了程序员的一生,调试的重要性,就不再赘述啦!如果你还不知道什么是调试,可以看看 Windows 系统的 Visual Studio 是如何调试的:➡️ visual stuudio 使用调试技巧 下载调试软件 gdb yu…

MaskDINO环境搭建与模型测试

1、环境搭建 1、构建虚拟环境安装torch conda create -n mmdetsam python3.8 -y conda activate mmdetsampip install torch1.10.0cu102 torchvision0.11.0cu102 torchaudio0.10.0 -f https://download.pytorch.org/whl/torch_stable.html -i http://mirrors.aliyun.com/pypi…

【开题报告】基于深度学习的驾驶员危险行为检测系统

研究的目的、意义及国内外发展概况 研究的目的、意义:我国每年的交通事故绝对数量是一个十分巨大的数字,造成了巨大的死亡人数和经济损失。而造成交通事故的一个很重要原因就是驾驶员的各种危险驾驶操作行为。如果道路驾驶员的驾驶行为能够得到有效识别…

跳动的文字(文字渲染).html( 网上收集的1)

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>跳动的文字</title><style>#m1:hover {animation: shine 1s linear infinite;}keyframes shine {0% {color: #fff;}50% {color: #0000ff;}100% {color: #fff;}…

C语言错误处理之 “信号处理方式<signal.h>及signal函数等内置函数”

目录 前言 signal.h头文件 信号宏 signal函数 实例&#xff1a;在Linux环境下验证signal函数 实例&#xff1a;在Linux中演示保存signal函数的返回值 预定义的信号处理函数&#xff08;简单了解&#xff09; SIG_DFL函数 SIG_IGN函数 raise函数 实例&#xff1a;测试…

电气制图用什么软件?CAD和Eplan哪个更胜一筹?

身为电气工程师&#xff0c;每天打交道最多的可能不是自家对象&#xff0c;而是时时刻刻攥在手里的电气图。目前市面上制作电路图的软件形形色色&#xff0c;但是AutoCAD Electrical和Eplan是目前大家使用率最高的两款电气制图软件。 EPLAN是一款专业的电气设计软件&#xff0…

为什么Redis这么快?5分钟成为Redis高手

Redis简介 Redis 是 C 语言开发的一个开源高性能键值对的内存数据库&#xff0c;可以用来做数据库、缓存、消息中间件等场景&#xff0c;是一种 NoSQL&#xff08;not-only sql&#xff0c;非关系型数据库&#xff09;的数据库。 Redis特点 优秀的性能&#xff0c;数据是存储…

C++学习之路(十)C++ 用Qt5实现一个工具箱(增加一个时间戳转换功能)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《JSON数据格式化》功能&#xff0c;还是比较实用的。为了继续丰富我们的工具箱&#xff0c;今天我们就再增加一个平时经常用到的功能吧&#xff0c;就是「 时间戳转换 」功能&#xff0c;而且实现点击按钮后文字进行变…

Java基础之原码,反码,补码,位运算符

文章目录 前言一、二进制在运算中介绍二、原码&#xff0c;反码&#xff0c;补码&#xff08;针对有符号的&#xff09;三、位运算符按位与&按位或 |按位异或 ^按位取反 ~算术右移>>算术左移<<逻辑右移>>> 总结 前言 原码&#xff0c;反码&#xff0…

数字人透明屏幕的技术原理是什么?

数字人透明屏幕的技术原理主要包括人脸识别和全息影像技术。其中&#xff0c;人脸识别技术是通过摄像头捕捉游客的面部表情和动作&#xff0c;并将其转化为数据指令&#xff0c;以便与数字人物进行互动。而全息影像技术则是利用透明屏幕&#xff0c;通过全息投影的方式将数字人…

rider编辑器抛出异常 忽略try catch

如题 代码加了try catch 后用户使用体验是好了 但开发过程中 报错了不方便排查 启用这些配置后 trycatch里的异常也会抛出 补充一下默认配置,方便还原

【LeetCode:1670. 设计前中后队列 | 数据结构设计】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

21.Oracle的程序包(Package)

Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…

MYSQL存储

注意&#xff1a; 1.如果没有指定的SESSION/GLOBAL&#xff0c;默认是SESSION&#xff0c;会话变量。 2.mysql服务重新启动之后&#xff0c;所设置的全局参数会失效&#xff0c;要想不失效&#xff0c;可以在/etc/my.cnf中配置。 变量 用户定义变量是用户根据需要自己定义变量…

二十章 多线程

线程简介 在 Java 中&#xff0c;并发机制非常重要。在以往的程序设计中&#xff0c;我们都是一个任务完成后再进行下一个任务&#xff0c;这样下一个任务的开始必须等待前一个任务的结束。Java 语言提供了并发机制&#xff0c;程序员可以在程序中执行多个线程&#xff0c;每一…