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、下载工具
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和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配置可以在各个层级配置,生效顺序是低层级优先生效,覆盖高层级的配置。
2、参数说明
0、选择表达式
在测试参数文件中,auth、storage、storage、work定义中支持config属性配置,该属性包含一个可选的参数列表(使用键值对格式表示,如"a=a_val;b=b_val")。
在参数列表中,常用的键包括containers、objects、sizes,用来指定如何选择容器、对象、大小。
1 、选择器
| 表达式 | 格式 | 注释 |
|---|---|---|
| constant | c(number) | 仅使用指定数字 一般在常用于对象大小定义,如sizes=c(512)KB,则表示对象大小为512KB |
| uniform | u(min, max) | 从(min,max)中均匀选择 u(1,100)表示从1到100中均匀地选取一个数字,选择是随机的,有些数字可能被选中多次,有些数字永远不会被选中 |
| range | r(min,max) | 从(min,max)递增选择 r(1,100)表示从1到100递增地选取一个数字(每个数字只被选中一次),这通常被用于特殊work(init、prepare、cleanup、dispose) |
| sequential | s(min,max) | 从(min,max)递增选择 s(1,100)表示从1到100递增地选取一个数字(每个数字只被选中一次),这通常被用于常规work |
| histogram | h(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 | ✔ | ✔ | | ✔ | ✔ |
- 工作类型选择器
| Key | init | prepare | normal (read) | normal (write) | normal (delete) | cleanup | dispose |
|---|---|---|---|---|---|---|---|
| containers | r(), 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 | 字符串 | 空 | 指定单位(B | KB | MB | GB) |
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 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;
2、driver启动
在所有driver角色节点执行以下命令启动driver;
sh start-driver.sh
检查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,提交测试文件即可。
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字样,查看相应报错打印。
对应任务的日志:
log/mission/MC1D821DD69.log
FAQ
1、启动报“Ncat: Connection refused.”
需要先安装java。