大数据平台/大数据技术与原理-实验报告--部署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的日志以便及时发现和解决问题。 容量规划: 根据实验结果和分析,进行容量规划,确保集群能够满足未来的扩展需求。 安全性考虑: 进一步审查访问控制机制,确保系统的安全性,考虑加密通信等安全增强措施。 ||||

相关推荐
Data跳动5 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark
woshiabc1116 小时前
windows安装Elasticsearch及增删改查操作
大数据·elasticsearch·搜索引擎
lucky_syq6 小时前
Saprk和Flink的区别
大数据·flink
lucky_syq6 小时前
流式处理,为什么Flink比Spark Streaming好?
大数据·flink·spark
袋鼠云数栈6 小时前
深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业
大数据
Java程序之猿6 小时前
微服务分布式(一、项目初始化)
分布式·微服务·架构
清平乐的技术专栏6 小时前
Hive SQL 查询所有函数
hive·hadoop·sql
来一杯龙舌兰7 小时前
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
分布式·rabbitmq·ruby·持久化·ack·消息确认
小白学大数据8 小时前
如何使用Selenium处理JavaScript动态加载的内容?
大数据·javascript·爬虫·selenium·测试工具
15年网络推广青哥8 小时前
国际抖音TikTok矩阵运营的关键要素有哪些?
大数据·人工智能·矩阵