Zookeeper学习分享

简介: Zookeeper是hadoop的分布式协调服务,适用与服务部署管理,是从传统的互联网架构演化而来。传统单体应用系统的耦合度非常高、启动应用时间长、依赖庞大等,zookeeper架构相对传统架构更加简单,更加可靠。

1. Zookeeper简介

Zookeeper是hadoop的分布式协调服务,适用与服务部署管理,是从传统的互联网架构演化而来。传统单体应用系统的耦合度非常高、启动应用时间长、依赖庞大等,zookeeper架构相对传统架构更加简单,更加可靠。

下图为zookeeper架构的角色分布图:

image.png

介绍:

  1. Leader:领导者,负责发起决议,如果有client发送请求到某个server,会由leader进行选举决议,如果过半的server同意则开始执行请求,如果leader出现宕机,follower会选举出新的leader。
  2. Follower:跟随者,接收client请求,只能单独处理读请求,如果存在写请求则将请求上报leader,当leader发起决议时参与决议,且执行。
  3. Observer:观察者,没有选举权的follower,为了提高整体读性能,因为参与选举比较耗时。

2. Zookeeper在测试中的应用

Zookeeper在测试应用中的优势

对于日渐庞大的测试体系,测试人员无法很好的对设备进行管理,自动化测试使用频率越来越高,导致设备“忙不过来”,执行测试任务时以及开发人员调试时需要花费大量的时间搭建测试、开发环境,花费精力去维护环境。但是有了zookeeper架构,一切就变得简单了。

列出以下几点使用优势:

  1. 测试、开发人员更加快速的进行测试及调试节
  2. 稳定性测试过程中能够更加实时的对设备监控
  3. 对于大型的自动化测试平台无法进行负载均衡,可以合理利用此框架进行资源调配
  4. 用户面向对象不再是硬件设备,只要提供硬件型号就能分配到所需设备
  5. 不用花费大量心思去维护设备。只要你请求,它就会合理分配给你,到资源不够分配再进行统一维护

实施思路

下图为基本应用框架:

image.png

根据需要了解设备特性,定制不同类型的代理服务器,统一在zookeeper server创建设备节点,对于用户而言看只要通过对zookeeper server请求对应型号的设备,server端就会把空闲的节点参数分配给用户,且把节点加锁。直到用户使用完毕发送解锁指令后server端把设备设置成空闲状态。

​ 下图为一个简单的运作流程图:

image.png

3. 环境搭建

​ 这里使用ubuntu系统来搭建环境

  1. 安装zookeeper

下载链接:http://archive.apache.org/dist/zookeeper/ 选择对应版本进行下载]解压,这里选择的是3.4.8版本

解压后的目录结构:

image.png

进入bin目录:

image.png

这里面有很多可执行文件,这里使用zkServer.sh启动zookeeper服务

image.png

这里没有配置端口默认端口为2181,以上就算是启动了一个zookeeper服务

  1. 使用client基本命令

开启服务后执行./zkCli.sh -server localhost:2181,进入client模式

4. zookeper的节点和使用

zookeeper节点介绍

zookeeper节点目录结构为树形结构

client可以创建节点以及节点的子节点,且能在节点中添加数据。下图为节点结构图:

image.png

Zookeeper cli使用

那么如何创建节点呢?

连接进入client后使用help命令查看client功能

image.png

基本功能介绍

create [-s] [-e] path data acl

-s :创建一个顺序节点

-e :创建一个临时节点;在于客户端断连时,临时节点会被删除,且临时节点没有子节点

data:节点数据

举例:create -s /test 1234

ls path [watch]

列出Path下对应的Znode

watch:能够监听Znode的的所有变化,可以不选

get path [watch]

获取Path对应的Znode的数据和属性

ls2 path [watch]

查看Path下所有子Znode以及子Znode的属性

set path data [version]

更新节点

delete path [version]

删除节点, 如果要删除的节点有子Znode则无法删除

rmr path

删除节点, 如果有子Znode则递归删除

5. Zookeeper实战

这里在一台PC中建立三个zookeeper sever,当然,在实际搭建集群时应该把集群搭建在不同的服务器中。

文件配置

​ 进入conf目录;能够 查看到zoo.cfg

​ 配置server.1、server.2、server.3

配置文件中端口的作用:clientport中2815为对client端提供服务的端口;2881为集群内及其通讯使用的端口;3881为集群选举leader时使用的端口

dataDir:服务本地数据储存目录

image.png

复制zoo.cfg为zoo2.cfg、zoo3.cfg 修改clientPort配置分别为2182、2183;修改dataDir分别为data2、data3

那么如何把server.x与实际服务器对应起来呢?

在dataDir目录我这边是/tmp/zookeeper/;在data、data2、data3目录中(如果没有此目录需新建)新建myid目录,此文件的作用为标注服务的唯一标识,分别对应config文件中server.x中的x;此步骤为关键步骤

操作:
mkdir /tmp/zookeeper/data;vim myid;
编辑文件内容为1;

​mkdir /tmp/zookeeper/data2;vim myid;

编辑文件内容为2;

mkdir /tmp/zookeeper/data3;vim myid;

编辑文件内容为3;

启动服务

进入bin目录,分别执行./zkServer.sh start ../conf/zoo.cfg;./zkServer.sh start ../conf/zoo2.cfg;./zkServer.sh start ../conf/zoo3.cfg开启三个服务

注意:如果没有关闭防火墙需要关闭防火墙才能开启服务systemctl stop firewalld.service

正确开启服务后我们使用./zkServer.sh status来查看服务状态

./zkServer.sh start ../conf/zoo.cfg

image.png

./zkServer.sh start ../conf/zoo2.cfg

image.png

./zkServer.sh start ../conf/zoo3.cfg

image.png

./zkServer.sh status ../conf/zoo.cfg

image.png

./zkServer.sh status ../conf/zoo2.cfg

image.png

./zkServer.sh status ../conf/zoo3.cfg

image.png

这里选举出server.2为leader,server.1和server.3为flower。

​ client与server.1连接,./zkCli.sh -server localhost:2185

​ 创建Znode, create -s /test 12345;会顺序创建一个id为0的node

image.png

​ get /test0000000000

image.png

查看到test node下的数据,此时,我们退出连接另一个server

./zkCli.sh -server localhost:2182;我们同样可以查看到node信息

image.png

在此服务中进行对test的监听get /test0000000000 watch

在server.1服务中修改test节点,此服务会跳出事件

image.png

6. 总结

通过对zookeeper架构的学习,发现它是一个既好上手又有很大实际用途的工具,我们需要学会如何合理利用好它,对于我们这种多项目多设备并行的测试人员来说,通过它来管理我们的设备,可以非常有效的节省我们的时间,消除了很多此类的烦恼。消除烦恼便能快乐工作。

原文作者:humm1
点击查看原文

相关文章
|
异构计算
Magisk模块:停用HW叠加层
Magisk模块:停用HW叠加层
3506 0
Magisk模块:停用HW叠加层
|
存储 Web App开发 消息中间件
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
|
5月前
|
存储 弹性计算 固态存储
阿里云服务器配置怎么选择?根据用户类型及使用场景配置推荐
如何选择阿里云服务器配置?2025年全解析!个人用户可选68元/年的轻量应用服务器(2核2G、200M带宽),企业用户推荐199元/年的ECS通用算力型u1实例(2核4G、5M带宽)。针对不同需求,还有内存型、计算型、高主频型及GPU服务器等多规格实例。带宽选择需根据访问量,小流量应用3M即可,高流量建议10M起步。存储方面,系统盘40GB够用,数据盘按需选择ESSD或SSD云盘,确保I/O性能满足业务需求。阿小云为你整理最新攻略,助你高效选型!
|
缓存 安全 Java
原子操作的实现原理
原子操作的实现原理
228 0
|
10月前
|
存储 安全 JavaScript
浏览器的同源策略
【10月更文挑战第31天】浏览器的同源策略是浏览器安全模型的重要组成部分,它通过限制不同源之间的资源交互,有效地保护了用户和网站的安全。开发者在进行Web开发时,需要充分理解和遵循同源策略,同时合理地运用各种跨域技术来满足业务需求,确保网站的安全性和功能性的平衡。
241 2
|
10月前
|
分布式计算 监控 大数据
如何优化Spark中的shuffle操作?
【10月更文挑战第18天】
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
消息中间件 Unix Linux
C语言 多进程编程(二)管道
本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
998 1
基于IEEE802.11g标准的OFDM信号帧检测matlab仿真
此项目旨在应对无线信号识别挑战,利用MATLAB/Simulink开发IEEE 802.11g OFDM信号识别算法。通过对标准的深入研究,设计并计算PLCP前导码数据,采用信号相关性进行信号鉴定。项目构建了完整的发射机模型,在AWGN信道下评估性能。通过生成特定的短训和长训序列,实现帧头检测,并模拟真实信号传输。测试使用MATLAB 2022a版本,展示了信号生成与识别的关键步骤及结果。