1、简介
COSBench是Intel团队基于java开发,用于对象存储的测试工具,全称是Cloud object Storage Bench,可以支持swift、s3、Openstack等接口。
COSBench分控制台和发起请求的driver,其模式是一个控制台控制几个driver向后端对象存储网关节点发起请求。driver可以分布式部署。
2、组成
Cosbench包含Controller和Driver两个关键组件:
Controller(也称为Cosbench控制器):
负责协调drivers集体执行工作负载,收集和汇总来自driver实例的运行时状态和基准测试结果,并接受工作负载提交。
Driver(也称为Cosbench驱动或负载生成器):
负责工作负载生成,向目标云对象存储下发操作,收集性能统计数据。
Controller和Driver可以部署在相同的节点上,也可以部署在不同的节点上,节点可以是物理机或者虚拟机(VM)实例。
3、安装
这里我们以CentOS7为系统环境介绍COSBench的安装和使用。
安装步骤:
1)COSBench依赖java和nc,所以在安装COSBench前要先安装java和nc
yum install java nmap-ncat
2)下载COSBench工具并解压
wget https://github.com/intelcloud/cosbench/releases/download/v0.4.2.c4/0.4.2.c4.zip
unzip 0.4.2.c2.zip
3)进入解压路径,赋予shell脚本可执行权限,并取消代理防止冲突
chmod +x *.sh
unset http_proxy
4)执行./start-driver.sh,启动Driver,出现如下画面则启动成功
5)执行./start-controller.sh,启动Controller,出现如下画面则表示启动Controller成功
备注:
- 本机同时启动了Controller和Driver,Controller的默认端口为19088,Driver的默认端口为18088,所以要确保这两个端口可以被访问。
- 如果Controller和Driver同时部署在一台机器上,可以用start-all.sh脚本同时启动Controller和Driver。
- 一台Controller同时控制几台Driver发起请求,Driver节点只需要执行start-driver.sh启动Driver即可。
6)在浏览器中访问:http://192.168.188.129:19088/controller/,这里192.168.188.129为部署Controller的主机地址,出现如下画面则表示部署成功
4、配置
1)Driver配置
编辑conf目录下的driver.conf文件(新部署的COSBench要编辑driver_template.conf文件),修改driver name和ip地址,如下图所示:
2)Controller配置
编辑conf目录下的controller.conf文件,修改driver数量,日志级别,driver name和driver ip等信息,如下图所示:
3)COSBench测试文件示例
以conf/s3-config-sample.xml说明,代码如下图所示
下面对配置文件的参数进行说明:
- workload name : 测试时显示的任务名称,这里可以自行定义
- description : 描述信息,这里可以自己定义
- storage type: 存储类型,这里配置为s3即可
- config : 对该类型的配置,
- workstage name : cosbench是分阶段按顺序执行,此处为init初始化阶段,主要是进行bucket的创建,workers表示执行该阶段的时候开启多少个工作线程,创建bucket不会计算为性能,所以单线程也可以;config处配置的是存储桶bucket的名称前缀;containers表示桶的轮询数,上例中将会创建以s3testqwer为前缀,后缀分别为1和2的bucket
- prepare阶段 : 配置为bucket写入的数据,workers和config以及containers与init阶段相同,除此之外还需要配置objects,表示一轮写入多少个对象,以及object的大小。
- main阶段 : 这里是进行测试的阶段,runtime表示运行的时间,时间默认为秒
- operation type : 操作类型,可以是read、write、delete等。ratio表示该操作所占有操作的比例,例如上面的例子中测试读写,read的比例为80%,write的比例为20%; config中配置bucket的前缀后缀信息。注意write的sizes可以根据实际测试进行修改
- cleanup阶段 : 这个阶段是进行环境的清理,主要是删除bucket中的数据,保证测试后的数据不会保留在集群中
- dispose阶段 : 这个阶段是删除bucket
5、测试
配置完成后,就可以启动测试,这里提供两种启动测试的方法:
1)通过脚本启动
执行./cli.sh submit fc/gen-data.xml提交测试,其中(fc/gen-data.xml)为修改后的测试文件名,系统返回当前任务的任务号,如下图所示
2)通过页面提交任务
点击页面上的submit new workloads按钮,如下图1所示,选择要提交的任务文件,点击submit提交任务,如下图2所示
图1
图2
6、测试结果分析
测试结果存放在COSBench目录下的archive子目录下,以具体的任务号区分,每个任务一个目录,如下图所示:
以任务w8为例,该目录下有以下文件:
其中w8-s3-sample.csv为任务的概要运行数据,如IOPS、时延、带宽等总体数据都在此文件中,s3-main.csv为主要运行阶段的详细分时数据。
下载w8-s3-sample.cvs,打开该文件,会显示如下信息:
表中各列含义如下:
- Op-Type : 操作类型
- Op-Count : 操作总数
- Byte-Count : 操作产生的Byte
- Avg-ResTime : 操作产生的平均时间
- Avg-ProcTime : 操作的平均时间,这个是主要的延时参考,它反映了平均每次请求的时延
- Throughput : 吞吐量,主要反映了操作的并发程度,也是重要的参考
- Bandwidth : 带宽,反映了操作过程中的平均带宽情况
- Succ-Ratio : 操作的成功率
也可以在控制页面上看到这些数据,如下图所示:
7、使用中的问题
1)COSBench校验数据完整性失败导致测试终止
查看COSBench log发现以下错误信息(log路径为/path/to/cosbench/archive/workload/workload.log):
解决办法:
停止COSBench 进程(Controller和Driver都要停);
编辑cosbench-start.sh文件,找到java启动命令行参数, 增加”-Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true”,关闭S3的MD5校验功能;
启动COSBench进程。
2)COSBench测试128M大对象的读取时,读取对象失败
查看COSBench log发现以下错误信息(log路径为/path/to/cosbench/archive/workload/workload.log):
Uploading large file fails with ResetException: Failed to reset the request input stream
解决办法:
根本原因是COSBench默认读文件的大小是128k,调整读取文件大小参数,在cosbench-start.sh脚本中的Java命令行加入以下参数:
-Dcom.amazonaws.sdk.s3.defaultStreamBufferSize=<YOUR_MAX_PUT_SIZE>