实验名称
部署ZooKeeper集群和实战ZooKeeper
实验性质
(必修、选修)
必修
实验类型(验证、设计、创新、综合)
综合
实验课时
2
实验日期
2023.11.04-2023.11.05
实验仪器设备以及实验软硬件要求
专业实验室(配有centos7.5系统的linux虚拟机三台)
实验目的
理解ZooKeeper的系统模型,包括数据模型、版本机制、Watcher监听机制、ACL权限控制机制。
理解ZooKeeper的工作原理,包括集群架构、Leader选举机制。
熟练掌握ZooKeeper集群的部署和运行。
掌握ZooKeeper四字命令的使用。
熟练掌握ZooKeeper Shell常用命令的使用。
了解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还可以用于实现分布式锁,确保在多个节点间对共享资源的互斥访问。这在实际应用中是一个常见的场景,例如在分布式系统中的任务调度、资源分配等方面。
实验步骤:
- 规划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。
- 关闭ZooKeeper集群。
实验结果与分析
实验结果:
集群搭建: 成功搭建了多个ZooKeeper节点的集群,确保它们能够相互通信和协同工作。
Leader选举: 集群中的节点成功进行了Leader的选举,确保了高可用性和容错性。
数据一致性: 在集群中写入数据后,观察到数据在所有节点上保持一致。
Watcher机制: 成功利用Watcher机制监测节点的变化,确保实时通知和响应。
分布式锁: 实现了基于ZooKeeper的分布式锁,并验证了在多个节点上的互斥访问。
分析与观察:
性能: 通过观察系统的响应时间和吞吐量,分析ZooKeeper集群在负载情况下的性能表现。
故障恢复: 模拟节点故障,观察系统对故障的快速恢复能力,确保选举新的Leader和数据一致性。
Watcher延迟: 观察Watcher机制的延迟情况,确保通知的实时性满足系统的需求。
访问控制: 验证了ZooKeeper的访问控制机制,确保只有授权的用户能够进行敏感操作。
负载均衡: 在实际应用场景中,分析集群节点之间的负载情况,确保各节点工作均衡。
注意事项与改进方向:
配置调优: 考虑ZooKeeper的配置参数,根据实验结果进行调优,以提高性能和稳定性。
监控与日志: 部署监控工具,观察节点的资源利用情况,并定期审查ZooKeeper的日志以便及时发现和解决问题。
容量规划: 根据实验结果和分析,进行容量规划,确保集群能够满足未来的扩展需求。
安全性考虑: 进一步审查访问控制机制,确保系统的安全性,考虑加密通信等安全增强措施。
版权归原作者 jakeonil 所有, 如有侵权,请联系我们删除。