開發與維運

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
点击查看原文

Leave a Reply

Your email address will not be published. Required fields are marked *