Cosbench安装及使用
一、 cosbench简介
cosbench - Cloud Object Storage Beachmark,是Intel开发的一个对象存储基准性能测试工具,支持OpenStack* Swift, Amazon* S3, Amplidata v2.3, 2.5 and 3.1, Scality*, Ceph, CDMI,Google* Cloud Storage, Aliyun OSS对象存储。
cosbench可以联机测试,主要有以下两个关键组件:
- driver
cosbench负载生成器,主要负责工作负载生成,发布针对云对象存储的操作和收集性能统计信息;可以通过http://{driver-ip}:18088/driver地址访问。 - controller
cosbench控制器,主要负责协调负载生成器共同执行工作负载,收集来自负载生成器的基准性能测试结果;可以通过http://{controller-ip}:19088/controller地址访问。
注:controller和driver角色可以部署在同一个节点上。
二、 cosbench安装
1. 环境准备
Cosbench安装需要有java环境,并且需要curl,centos直接yum install jre和yum install curl即可。
确认测试机cosbench包中sh文件有可执行权限,没有的话加上chomd +x *.sh。
2. 程序启动
- 单台测试客户端:
单台测试客户端测试时,只需在客户端执行 sh start-all.sh。
访问http://{controller-ip}:19088/controller,即可看到cosbench界面,在web界面上可操作执行测试及查看测试结果。 - 多客户端:
多客户端时需要首先确定controller主机,修改controller主机上的配置文件:conf/controller.conf,修改为:
[controller]
drivers = [总测试客户端个数]
log_level = INFO
log_file = log/system.log
archive_dir = archive
[driver1]
name = driver1
url = http://127.0.0.1:18088/driver
[driver2]
name = driver2
url = http://[客户端ip地址]:18088/driver
[driver3]
name = driver3
url = http://[客户端ip地址]:18088/driver
……
在各个driver主机上执行sh start-driver.sh,在controller主机上执行sh start-all.sh,访问http://{controller-ip}:19088/controller,即可看到cosbench界面,在web界面上可以看到各个driver信息及状态,并可操作执行测试及查看测试结果。
三、 cosbench使用
1. 测试用例
- s3:
<?xml version="1.0" encoding="UTF-8" ?>
<workload name="s3-sample" description="sample benchmark for s3">
<storage type="s3" config="accesskey=[access key];secretkey=[s3 secret key];endpoint=[s3访问节点地址] />
<workflow>
<workstage name="init">
<work type="init" workers="1" config="cprefix=s3testqwer;containers=r(1,32)" />
</workstage>
<workstage name="prepare">
<work type="prepare" workers="1" config="cprefix=s3testqwer;containers=r(1,32);objects=r(1,50);sizes=c(4)KB" />
</workstage>
<workstage name="main">
<work name="main" workers="128" runtime="600">
<operation type="write" ratio="100" config="cprefix=s3testqwer;containers=u(1,32);objects=u(51,100);sizes=c(4)KB" />
</work>
</workstage>
</workflow>
</workload>
第三行中,storage type规定了对象类型,s3测试则设为s3,swift测试则设为swift,后边的config中输入s3对象设置,包括s3用户的access key,secret key以及访问节点地址;
work有一种普通work和四种特殊类型的work:init、prepare、cleanup和dispose,init为初始化操作,批量创建测试所需的桶,prepare为批量上传对象,cleanup为批量删除对象,dispose为批量删除桶操作;
在测试中,我们一般先后使用init、prepare及数据测试(上例中为main)阶段,若测试完有删除数据的必要,可在main之后加入cleanup操作;
第5-7行为init阶段操作,在第六行work type中规定了work类型为init,设定workers数量,config中则设定了桶名称,cprefix为桶前缀,containers为桶选择表达式,以上例为例,桶设置为共32个桶,名称为s3testqwer1、s3testqwer2……;
第8-10行为prepare阶段操作,在第九行work type中规定了work类型为prepare,设定workers数量,config中则设定了上传数据的桶,对象的个数及大小,桶设置不再赘述,objects为对象选择表达式,sizes为对象大小,以上例为例,再prepare阶段,向s3testqwer1到s3testqwer32的32个桶中,每个桶从1到50上传50个对象,大小为4KB;
第11-15行为数据测试阶段操作,在第12行中设定了workers的个数,一般来说,进行正式测试时,workers数量会比前两个阶段多,通常来说,workers越多,客户端能够进行测试的进程越多,测试值也会增长,runtime为测试时长;
在第13行中,设定了操作类型operation type,占比ratio,及config中的数据设置,config中数据设置与prepare阶段中意义一致,不在赘述,在main阶段,可以设置多个operation,多个operation的radio之和为100,operation的type可以有read、write、filewrite、delete和list,以下为除write外各个操作常用的格式,具体参数意义类似,不再赘述:
<operation type=“read” ratio=“70” config=“containers=c(1);objects=u(1,100)”/>
<operation type=“filewrite” ratio=“20” config=“containers=c(2);fileselection=s;files=/tmp/testfiles” />
<operation type=“delete” ratio=“10” config=“containers=c(2);objects=u(1,1000)” />
<operation type=“list” ratio=“10” config=“containers=c(2);objects=u(1,1000)” />
- swift:
<?xml version="1.0" encoding="UTF-8" ?>
<workload name="swift-sample" description="sample benchmark for swift">
<storage type="swift" />
<auth type="swauth" config="username=[swift用户名];password=[swift secret key];auth_url=[swift认证路径]" />
<workflow>
<workstage name="init">
<work type="init" workers="1" config="containers=r(1,32)" />
</workstage>
<workstage name="prepare">
<work type="prepare" workers="1" config="containers=r(1,32);objects=r(1,50);sizes=c(4)KB" />
</workstage>
<workstage name="main">
<work name="main" workers="128" runtime="600">
<operation type="write" ratio="100" config="containers=u(1,32);objects=u(51,100);sizes=c(4)KB" />
</work>
</workstage>
</workflow>
</workload>
在此swift例中与s3测试例的差别仅在用户认证处。
第3-4行为swift认证的设置,在第三行声明了类型为swift,第四行设置了auth type为swauth,config中设置了swift用户的用户名、sercet key以及认证路径。
由于在s3和swift例中均未涉及到cleanup和dispose类型work的设置,下面单独对此两种类型的work进行说明。
- cleanup:
<workstage name=“cleanup”>
<work type=“cleanup” workers=“1” config=“containers=r(1,32);objects=r(1,100)”/>
</workstage>
第二行中设置了work type为cleanup,并设置了workers数量,config中设置了要删除的桶及桶中对象的设置。
- dispose:
<workstage name=“dispose”>
<work type=“dispose” workers=“1” config=“containers=r(1,32)” />
</workstage>
第二行中设置了work type为dispose,并设置了workers数量,config中设置了要删除的桶设置。
2. 测试执行
测试执行有两种方式,分别为命令行和web界面。
- 命令行:在cosbench目录下直接执行sh cli.sh submit [测试用例文件] 即可,执行后,命令行会返回一个测试编号,可根据编号在web界面查看对应的测试执行情况及结果。
- web界面:访问controller的web界面http://{controller-ip}:19088/controller;点击submit new workloads;先点击选择文件上传测试用例文件,之后点击submit即可开始测试。
3. 结果查看
在web界面即可查看正在执行的测试用例的测试进展及已完成测试的测试结果。
点击进入想要查看的测试编号的详情页面。
在详情界面中可看到测试的id、名称和现在的状态,状态一般有finished、cancelled、failed、terminated 及processing;
在final result中可以看到测试结果,我们一般不关注init和prepare阶段的结果,只关注我们正式测试阶段的结果,即op-type为read或write的测试结果,op-count为执行的总操作的个数,byte-count为测试中总共交互的数据字节数,avg-restime为平均响应时延,throughput为每秒平均执行操作数,bandwith为平均带宽,succ-ration为成功率。