COSBench-对象存储性能测试工具

1,007 阅读12分钟

1、简介

COSBench是一个开源的分布式的对象存储系统性能测试工具,它可以通过web控制台实时显示性能测试结果。COSBench由一个Controller和多个Driver组件组成,Controller和Driver可以部署在同一个Linux客户端上也可以分离部署。其中Driver是负责生成具体的工作负载,分发对象操作任务的;而Controller是用于协调多个Driver共同完成用户提交的任务。

COSBench可以联机测试,主要有以下两个关键组件:

  • driver
    COSBench负载生成器,主要负责工作负载生成,发布针对云对象存储的操作和收集性能统计信息。
    可以通过http://{driver-ip}:18088/driver地址访问。
  • controller
    COSBench控制器,主要负责协调负载生成器共同执行工作负载,收集来自负载生成器的基准性能测试结果。
    可以通过http://{controller-ip}:19088/controller地址访问。

注:controller和driver角色可以部署在同一个节点上。

COSBench工具使用按照流程可分为以下几个步骤:参数配置--服务启动--提交测试--分析结果。

2、安装说明

1、下载工具

wget github.com/intel-cloud…

2、安装

1、安装依赖

通常情况下,系统默认已经安装curl、nc包,如系统未安装,可通过下面命令在线安装。

yum install -y curl nmap-ncat

安装java rpm -ivh jdk-8u301-linux-x64.rpm

2、关闭时钟同步

(1)注释时钟同步server

vim /etc/chrony.conf

注释: # server 10.255.138.15 iburst minpoll 4 maxpoll 6  

timedatectl set-ntp 1

(2)重启chronyd服务,否则配置文件不生效,重启之后查看时间同步状态

systemctl stop chronyd

(3)看时间同步状态

[root@bootstrap mission]# timedatectl status

               Local time: Fri 2024-03-08 10:29:42 CST

           Universal time: Fri 2024-03-08 02:29:42 UTC

                 RTC time: Fri 2024-03-08 02:29:42

                Time zone: Asia/Shanghai (CST, +0800)

System clock synchronized: no

              NTP service: inactive

          RTC in local TZ: no

  

(4)查看NTP源服务器状态

[root@bootstrap mission]# chronyc sources -v

506 Cannot talk to daemon

(5)对象客户端和存储节点时间误差不能大于5分钟,否则会鉴权失败

3、取消系统HTTP代理

unset http_proxy

4、关闭防火墙

使用过程中需要关闭防火墙或者开放指定端口,通过以下任意一种方法均可以。

(1)关闭防火墙
执行命令如下命令关闭 systemctl stop firewalld systemctl disable firewalld

(2)开放指定端口
driver角色需要使用到18088端口
controller角色需要使用到19088端口

 

#开放driver角色服务端口

firewall-cmd --zone=public --add-port=18089/tcp --permanentsystemctl reload firewalld

#开放controller角色服务端口

firewall-cmd --zone=public --add-port=19089/tcp --permanentsystemctl reload firewalld

5、解压工具

unzip 0.4.2.c4.zip

3、参数介绍

1、工具启动参数

安装目录下编辑conf/controller.conf文件修改url地址为客户端真实地址

配置controller

controller和driver依赖不同系统配置来启动服务,在启动controller和driver服务时,需要先行定义角色配置。

1、controller配置

controller在初始化时读取conf/controller.conf配置文件启动控制器服务

[controller]

  • concurrency
    默认值为1,表示可以同时执行的工作负载数量
  • drivers 默认值为1,表示此controller控制的driver数量
  • log_level
    默认值为INFO,可选值为TRACE、DEBUG、INFO、WARN、ERROR,表示日志打印等级
  • log_file
    默认值为log/system.log,表示日志文件存放位置
  • archive_dir
    默认值为archive,表示工作负载结果存放位置,当参数值为archive,则工作负载结果存放于xxx/archive目录内

[driverx]
当有多个driver时,第{n}个driver命名为[driver{n}]

  • name
    用于标识driver节点的标签,名称可以自定义

  • url
    访问driver节点的地址

2、driver配置

driver在初始化时读取conf/driver.conf配置文件启动负载器服务

[driver]

  • name
    用于标识driver节点的标签,名称可以自定义

  • url
    访问driver节点的地址

3、部署方式

在实际应用过程中,用户可以根据需要调整driver的部署个数以及部署的方式,COSBench支持将driver部署在同一个宿主机上,也可以分离部署在多个宿主机上。修改xxx/conf下的controller.conf可以按需修改。

1、 单宿主机部署多driver
  • 1、进入COSBench安装目录/xxx/conf下编辑conf文件,按照需要修改配置文件

  • 2、进入/xxx下,将start-driver.sh拷贝一份start-driver1.sh,并将其中的端口号按照步骤1中的配置修改

  • 3、在/xxx下编辑start-all.sh脚本,在其中增加“bash start-driver1.sh”行

  • 4、/xxx下执行stop-all.sh和start-all.sh脚本重启COSBench服务即可

 

2、 多宿主机部署多driver

多主机部署多driver整体修改方式按照单主机部署多driver步骤进行,只需要将步骤1和步骤2中driver的ip和端口换成实际部署driver的ip及端口。

修改完成后,start-driver.sh文件中的ip及端口也需要同步修改。

2、工作负载参数****

1、负载文件结构****

COSBench配置并启动完成以后,接下来就需要上传负载文件,告诉COSBench连接哪个对象存储系统,以及向该对象存储系统中做哪些操作,负载配置文件是xml格式的,是有三层配置的。

  • 一个负载文件中只有一个workload,一个workload中可以定义多个workstage,且每个stage是顺序执行。

  • 一个workstage中可以定义多个work,多个work是并行执行的,对于每一个work,使用“workers”来调整负载。

  • Auth认证和存储storage配置可以在各个层级配置,生效顺序是低层级优先生效,覆盖高层级的配置。

工作负载xml示例

2、参数说明

0、选择表达式

在测试参数文件中,auth、storage、storage、work定义中支持config属性配置,该属性包含一个可选的参数列表(使用键值对格式表示,如"a=a_val;b=b_val")。

在参数列表中,常用的键包括containers、objects、sizes,用来指定如何选择容器、对象、大小。

1 、选择器

 

表达式格式注释
constantc(number)仅使用指定数字 一般在常用于对象大小定义,如sizes=c(512)KB,则表示对象大小为512KB
uniformu(min, max)从(min,max)中均匀选择 u(1,100)表示从1到100中均匀地选取一个数字,选择是随机的,有些数字可能被选中多次,有些数字永远不会被选中
ranger(min,max)从(min,max)递增选择 r(1,100)表示从1到100递增地选取一个数字(每个数字只被选中一次),这通常被用于特殊work(init、prepare、cleanup、dispose)
sequentials(min,max)从(min,max)递增选择 s(1,100)表示从1到100递增地选取一个数字(每个数字只被选中一次),这通常被用于常规work
histogramh(min1 | max1 | weight1,…)它提供了一个加权直方图生成器,要配置它,需要指定一个逗号分隔的桶列表,其中每个桶由一个范围和一个整数权重定义。例如: h(1 | 64 | 10,64 | 512 | 20,512 | 2048 | 30)KB 其中定义了一个配置文件,其中(1,64)KB被加权为10,(64,512)KB被加权为20,(512,2048)KB被加权为30.权重之和不一定是100
注:一般常用的选择器通常为c(number)、u(min,max)、s(min,max)
2、 参数组合

基于元素类型和工作类型的选择器有额外的约束,下面两个表列出了允许的组合

  • 元素类型选择器

| Key | constant (c(num)) | uniform (u(min,max)) | range (r(min,max)) | sequential (s(min,max)) | histogram(h(min|max|ratio)) | | --------- | ---------------------- | ------------------------ | ----------------------
| ------------------------ | ------------------------------- | | containers | ✔ | ✔ | ✔ | ✔ |   | | objects | ✔ | ✔ | ✔ | ✔ |   | | sizes | ✔ | ✔ |   | ✔ | ✔ |

  • 工作类型选择器
Keyinitpreparenormal (read)normal (write)normal (delete)cleanupdispose
containersr(), s()r(), s()c(), u(), r(), s()c(), u(), r(), s()c(), u(), r(), s()r(), s()r(), s()
objects r(), s()c(), u(), r(), s()c(), u(), r()c(), u(), r(), s()r(), s() 
sizes c(), u(), h() c(), u(), h()   

 

1、 Workload配置

Workload是用于介绍该负载文件的名字及说明的,没有实际的操作指导意义。

<workload name="s3-sample" description="sample benchmark for s3" config="">  
...
</workload>
2、 Auth配置

Auth用于身份认证,在COSBench对接S3时候,在storage配置中会配置对象存储端的AccessKey和SecretKey,因此可以不关注本节内容,直接将type配置为none,config配置成空即可,配置对接其他接口类型对象存储才有用。

<auth type="none" config=""/>

3、 Storage配置

COSBench可以用来测试多种类型的对象存储服务,本文中只关注对接S3的测试。

<storage type="none|mock|swift|s3|ampli|..." config="<key>=<value>"/>

  • s3服务类型

<storage type="s3" config="accesskey=<accesskey>;secretkey=<secretkey>;endpoint=<url>;"/>

4、 Workstage配置

Workstage是用来描述这一阶段的业务操作,其通用格式与workload一样。

5、 Work配置

Work有五种类型,一个normal型和四个special型(init,prepare,cleanup和dispose),下面的格式是一个全集配置,不同类型的work可以根据需要配置,workers是并发数设置,而runtime(包括rumpup和rumpdown),totalOps和totalBytes是用来配置结束这个work的方法,这三个配置不能在一个work中同时配置,任选其一。

1、 Normal型work通用格式
<work name="main" type="normal" workers="128" interval=”5” division=”none” runtime=”60” config="<key>=<value>;<key>=<value>">
......
</work>
2、非 Normal型work通用格式
<work  type="init|prepare|cleanup|dispose"  workers="128" config="<key>=<value>;<key>=<value>">
......
</work>

 

  • 与normal型work不同主要在以下点:

自动适应任务结束时间,无需runtime/rumpup等结束配置。

已经定义了要完成的操作:init --创建bucket;prepare --上传对象;cleanup--删对象;dispose--删bucket,无需operation定义。

1、init ---创建bucket

通用格式:例如用4个并发创建100个名字前缀为“test”,尾缀为“s3”的bucket。

<storage type="init"  workers=”4” config=”containers=r(1,100);cprefix=”test”;csuffix=”s3”"/>

参数说明:

参数类型默认值备注
containers字符串指定创建bucket个数
cprefix字符串mycontainers_创建的bucket名字前缀
csuffix字符串创建的bucket名字后缀

2、 Prepare ---上传对象

通用格式:例如用4个并发向bucket1-bucket10中上传100个前缀为“test”,尾缀为“s3”的64K大小的对象。

<storage type="prepare"  workers=”4” config=”containers=r(1,10);objects=r(1,100);sizes=c(64)KB;oprefix=”test”;osuffix=”s3”"/>

参数说明:

参数类型默认值备注
objects字符串上传对象个数
oprefix字符串myobjects_上传对象名字前缀
osuffix字符串上传对象名字后缀
sizes字符串指定单位(BKBMBGB)

3、 Cleanup ---删除对象

通用格式:例如用4个并发删除bucket1-bucket10中100个前缀为“test”,尾缀为“s3”的对象。

<storage type="cleanup"  workers=”4” config=”containers=r(1,10);objects=r(1,100);oprefix=”test”;osuffix=”s3”"/>

参数说明:

参数类型默认值备注
objects字符串上传对象个数
oprefix字符串myobjects_上传对象名字前缀
osuffix字符串上传对象名字后缀

4、 Dispose ---删除bucket

通用格式:例如用4个并发删除10个前缀为“test”,尾缀为“s3”的bucket。

<storage type="dispose"  workers=”4” config=”containers=r(1,10);cprefix=”test”;csuffix=”s3”"/>

参数说明:

参数类型默认值备注
containers字符串上传对象个数
cprefix字符串myobjects_上传对象名字前缀
csuffix字符串上传对象名字后缀

3、工作负载示例

  • 配置工作负载xml

配置工作负载xml

<?xml version="1.0" encoding="UTF-8" ?>

<workload name="s3-sample" description="sample benchmark for s3" config="">  

   <storage type="s3" config="accesskey=<accesskey>;secretkey=<secretkey>;endpoint=http://IP:port;path_style_access=true" />

  <workflow>

  

    <workstage name="init">

      <work type="init" workers="10" config="cprefix=s3bucket;containers=r(1,10)" />

    </workstage>

    <workstage name="prepare">

      <work type="prepare" workers="1" config="cprefix=s3bucket;containers=r(1,10);objects=r(1,20);sizes=u(1,1024)KB" />

    </workstage>

 

    <workstage name="main">

  <work name="main1" workers="1" runtime="600" afr="1000000" interval="5">

<storage type="s3" config="accesskey=1234567a;secretkey=1234567a;endpoint=http://10.255.31.172:29899;path_style_access=true"/>

<operation type="write" ratio="50" division="none" config="cprefix=s3bucket;containers=r(1,10);objects=u(1,10);sizes=u(1,64)KB" id="op1"/>

<operation type="read" ratio="50" division="none" config="cprefix=s3bucket;containers=r(1,10);objects=u(11,20)" id="op2"/>

  </work>

    </workstage>

 

  </workflow>

</workload>

4、使用示例

1、服务启动

1、controller启动

在controller角色节点执行以下命令启动controller;

sh start-controller.sh

注:若节点需要同时启动controller和driver角色,也可以使用sh start-all.sh命令启动。

启动服务

检查controller服务启动情况

先根据controller启动端口查看进程pid;

查看controller服务启动情况

2、driver启动

在所有driver角色节点执行以下命令启动driver;

sh start-driver.sh

检查driver服务启动情况

查看driver服务启动情况

3、检查服务启动是否成功

此时可以登录web console检查是否启动成功:http://IP:19088/controller/

连接中的IP替换成实际部署COSBench工具的IP地址。

如果此时web console登录不了,请查看并禁用COSBench宿主机的防火墙服务。

2、提交测试

可以使用以下两种方法提交测试(示例测试参数文件为config.xml)

1、 使用命令行接口

在controller节点COSBench目录下,使用sh cli.sh submit {test.xml}命令提交测试

sh cli.sh submit conf/config.xml

命令行提交测试任务

2、 使用web控制台

web访问控制台地址http://{controller-ip}:19088/controller,点击Submit new workloads--Submit,提交测试文件即可。

7b、web控制台提交测试任务.jpg

3、停止测试服务

正常运行结束停止,或者执行如下命令停止测试。

sh stop-all.sh

5、分析结果

1、 使用命令行接口

在controller节点COSBench目录下,使用sh cli.sh info命令查看当前运行任务。

2、使用web控制台

web访问控制台地址http://{controller-ip}:19088/controller,点击对应任务view details,查看当前运行状态及结果。

查看任务结果

6、问题排查

当COSBench出现业务terminated或者failed时,可以登录安装COSBench的Linux客户端,在log路径下打开system.log日志,筛选terminated关键字,并根据日志时间查看报错具体原因。

对于失败的任务,可以在COSBench的web界面上点击报错的workstage里面的“view details”。

然后在跳转后的的界面中查看具体报错的mission的ID,并在COSBench的后台log/mission路径下查看id.log文件,打开并筛选error字样,查看相应报错打印。

任务ID

对应任务的日志:

log/mission/MC1D821DD69.log

FAQ

1、启动报“Ncat: Connection refused.”

需要先安装java。