COSBench(Cloud Object Storage Benchmark) 是一款 Intel 团队基于 Java 语言开发,用于衡量对象存储服务性能的压测工具。您可以使用 COSBench 工具对 TOS 进行读写性能压测,便于您评估对象存储 TOS 的性能,确保业务稳定。
推荐在 CentOS 7.6 及以上版本环境运行 COSBench 工具,其他环境可能存在非预期问题。
下载针对 TOS 的 COSBench 工具安装包,并解压至本地。
说明
COSBench 工具不能直接用于压测 TOS,使用该工具前,您需要修改 COSBench 工具源码,然后使用修改后的源码制作 TOS COSBench 工具包,具体操作,请参见附录:制作 TOS COSBench 工具包。
执行以下命令,安装 COSBench 的依赖库。
sudo yum install nmap-ncat java curl java-1.8.0-openjdk-devel -y
编辑 COSBench 工具包中的 s3-config-sample.xml
文件,配置压测任务信息。
示例代码如下:
<workload name="s3-sample" description="sample benchmark for s3"> <storage type="s3" config="accesskey=***;secretkey=***;endpoint=http://tos-s3-cn-beijing.ivolces.com;path_style_access=false;" /> <workflow> <workstage name="init" closuredelay="90"> <work type="init" workers="1" config="cprefix=examplebucket;containers=r(1,2)" /> </workstage> <workstage name="prepare"> <work type="prepare" workers="10" config="cprefix=examplebucket;containers=r(1,2);objects=r(1,1000);sizes=c(4)KB" /> </workstage> <workstage name="main"> <work name="main" workers="100" runtime="300"> <operation type="read" ratio="80" config="cprefix=examplebucket;containers=u(1,2);objects=u(1,1000)" /> <operation type="write" ratio="20" config="cprefix=examplebucket;containers=u(1,2);objects=u(1001,2000);sizes=c(4)KB" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="10" config="cprefix=examplebucket;containers=r(1,2);objects=r(1,2000)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="1" config="cprefix=examplebucket;containers=r(1,2)" /> </workstage> </workflow> </workload>
压测任务配置包含 5 个阶段,您需要配置每个阶段的参数,说明如下:
参数 | 说明 |
---|---|
accesskey | 火山引擎账号的 Access Key ID 信息。 说明 查看 AK/SK 信息的具体步骤,请参见获取当前身份的 Access Key。 |
secretkey | 火山引擎账号的 Secret Access Key 信息。 |
endpoint | S3 Endpoint 地址,详细介绍,请参见地域及访问域名。 |
cprefix | 存储桶名称的前缀。 |
csuffix | 存储名称的后缀,可选参数。 |
containers | 存储桶的数量和命名规则,例如设置 |
objects | 每个存储桶要写入的对象数量和命名规则。 |
sizes | 设置对象的大小。 |
ratio | 不同操作类型在测试中所占的比例,例如设置写入操作的 |
runtime | 测试持续时间,单位为秒。 |
workers | 执行对应阶段的工作线程数。 |
编辑 cosbench-start.sh
文件,在该文件中添加如下参数,调整缓冲区的大小并关闭 md5 校验功能。缓存区的大小需不小于测试对象的大小,您可以根据实际情况设置该值。
-Dcom.amazonaws.sdk.s3.defaultStreamBufferSize=104857600 -Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true -Dcom.amazonaws.services.s3.disablePutObjectMD5Validation=true
执行以下命令,启动 COSBench 工具。
sudo bash start-all.sh
在 Debian 等操作系统中,可能由于 nmap 工具版本差异,导致 nc 命令的探测操作失败,影响 COSBench 启动。如果您遇到此类情况,可以编辑 cosbench-start.sh 文件,在 nc
探测命令中增加 -q 1
参数来解决问题。
执行以下命令,提交测试任务。
sudo bash cli.sh submit conf/s3-config-sample.xml
在浏览器打开 http://ip:19088/controller/index.html
地址(ip 需替换为压测服务器的 ip),查看测试任务状态。
完成测试后,执行以下命令,停止 COSBench 工具。
sudo bash stop-all.sh
COSBench 工具不能直接用于压测 TOS,使用该工具前,您需要修改 COSBench 工具源码,然后使用修改后的源码制作 TOS COSBench 工具包。
本文在以下环境制作 TOS COSBench 工具包,供您参考。
在 GitHub 网站下载 COSBench 源码压缩包,并解压至本地。
在 Eclispe 导入 COSBench 源码。
配置 S3Storage.java 文件。
clientConf.withSignerOverride
的值,修改为 AWSS3V4SignerType
,指定使用 AWS V4 签名。修改后的示例如下:clientConf.withSignerOverride("AWSS3V4SignerType");
client.setS3ClientOptions
的值,增加 disableChunkedEncoding
,禁用 ChunkedEncoding。修改后的示例如下:client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(parms.getBoolean(PATH_STYLE_ACCESS_KEY)).disableChunkedEncoding());
client.putObject
的值,从而可以使用 BufferedInputStream 上传对象。修改后的示例如下:client.putObject(container, object, new BufferedInputStream(data), metadata);
生成 COSBench 工具包。
在 COSBench 源码目录下,执行以下命令,创建交付包。
sh pack.sh cosbench-tos
执行以下命令,打包 COSBench 工具包。
zip -r -X cosbench-tos.zip cosbench-tos