1. Zookeeper简介
Zookeeper是hadoop的分布式协调服务,适用与服务部署管理,是从传统的互联网架构演化而来。传统单体应用系统的耦合度非常高、启动应用时间长、依赖庞大等,zookeeper架构相对传统架构更加简单,更加可靠。
下图为zookeeper架构的角色分布图:
介绍:
- Leader:领导者,负责发起决议,如果有client发送请求到某个server,会由leader进行选举决议,如果过半的server同意则开始执行请求,如果leader出现宕机,follower会选举出新的leader。
- Follower:跟随者,接收client请求,只能单独处理读请求,如果存在写请求则将请求上报leader,当leader发起决议时参与决议,且执行。
- Observer:观察者,没有选举权的follower,为了提高整体读性能,因为参与选举比较耗时。
2. Zookeeper在测试中的应用
Zookeeper在测试应用中的优势
对于日渐庞大的测试体系,测试人员无法很好的对设备进行管理,自动化测试使用频率越来越高,导致设备“忙不过来”,执行测试任务时以及开发人员调试时需要花费大量的时间搭建测试、开发环境,花费精力去维护环境。但是有了zookeeper架构,一切就变得简单了。
列出以下几点使用优势:
- 测试、开发人员更加快速的进行测试及调试节
- 稳定性测试过程中能够更加实时的对设备监控
- 对于大型的自动化测试平台无法进行负载均衡,可以合理利用此框架进行资源调配
- 用户面向对象不再是硬件设备,只要提供硬件型号就能分配到所需设备
- 不用花费大量心思去维护设备。只要你请求,它就会合理分配给你,到资源不够分配再进行统一维护
实施思路
下图为基本应用框架:
根据需要了解设备特性,定制不同类型的代理服务器,统一在zookeeper server创建设备节点,对于用户而言看只要通过对zookeeper server请求对应型号的设备,server端就会把空闲的节点参数分配给用户,且把节点加锁。直到用户使用完毕发送解锁指令后server端把设备设置成空闲状态。
下图为一个简单的运作流程图:
3. 环境搭建
这里使用ubuntu系统来搭建环境
1. 安装zookeeper
下载链接:[http://archive.apache.org/dist/zookeeper/ 选择对应版本进行下载]解压,这里选择的是3.4.8版本
解压后的目录结构:
进入bin目录:
这里面有很多可执行文件,这里使用zkServer.sh启动zookeeper服务
这里没有配置端口默认端口为2181,以上就算是启动了一个zookeeper服务
2. 使用client基本命令
开启服务后执行./zkCli.sh -server localhost:2181,进入client模式
4. zookeper的节点和使用
zookeeper节点介绍
zookeeper节点目录结构为树形结构
client可以创建节点以及节点的子节点,且能在节点中添加数据。下图为节点结构图:
Zookeeper cli使用
那么如何创建节点呢?
连接进入client后使用help命令查看client功能
基本功能介绍
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:服务本地数据储存目录
复制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
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
./zkServer.sh status ../conf/zoo.cfg
./zkServer.sh status ../conf/zoo2.cfg
./zkServer.sh status ../conf/zoo3.cfg
这里选举出server.2为leader,server.1和server.3为flower。
client与server.1连接,./zkCli.sh -server localhost:2185
创建Znode, create -s /test 12345;会顺序创建一个id为0的node
get /test0000000000
查看到test node下的数据,此时,我们退出连接另一个server
./zkCli.sh -server localhost:2182;我们同样可以查看到node信息
在此服务中进行对test的监听get /test0000000000 watch
在server.1服务中修改test节点,此服务会跳出事件
6. 总结
通过对zookeeper架构的学习,发现它是一个既好上手又有很大实际用途的工具,我们需要学会如何合理利用好它,对于我们这种多项目多设备并行的测试人员来说,通过它来管理我们的设备,可以非常有效的节省我们的时间,消除了很多此类的烦恼。消除烦恼便能快乐工作。
文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=656882347718737920