如何对minio进行性能测试和分析

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 为了更好的评估minio对象存储的性能,我们需要引用一些测试工具对minio cluster进行性能分析。这里我们主要使用minio client中的speedtest还有warp作为性能分析工具。

环境详情

server(组成集群,ec为12:4)

ip hosts 硬盘
storage01 172.16.50.1 12*10T
storage02 172.16.50.2 12*10T
storage03 172.16.50.3 12*10T
storage04 172.16.50.4 12*10T

client

ip host
headnode 172.16.50.5
node02 172.16.50.6
node03 172.16.50.7
node04 172.16.50.8

为什么选择speedtest和warp作为测试工具?

speedtest是一个易用的测试工具,它会先运行PUTS,然后运行GETS,通过增量的方式测试得到最大吞吐量。而warp则是一个完整的工具链,提供了很独立的测试项,能够测试GET;PUT;DELETE等都可以测试得到。同时通过cs的结构设计,更符合真实的使用场景,得到最贴近应用的性能结果,有利于性能分析。

warp结构如下图所示

环境详情

server(组成集群,ec为12:4)

ip hosts 硬盘
storage01 172.16.50.1 12*10T
storage02 172.16.50.2 12*10T
storage03 172.16.50.3 12*10T
storage04 172.16.50.4 12*10T

client

ip host
headnode 172.16.50.5
node02 172.16.50.6
node03 172.16.50.7
node04 172.16.50.8

为什么选择speedtest和warp作为测试工具?

speedtest是一个易用的测试工具,它会先运行PUTS,然后运行GETS,通过增量的方式测试得到最大吞吐量。而warp则是一个完整的工具链,提供了很独立的测试项,能够测试GET;PUT;DELETE等都可以测试得到。同时通过cs的结构设计,更符合真实的使用场景,得到最贴近应用的性能结果,有利于性能分析。

warp结构如下图所示

image.png

开始测试

speedtest

  1. 开始前需要下载minio client
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod+x mc
mv mc /usr/local/bin/
  1. 写入host到/etc/hosts
  2. 配置客户端
/usr/local/bin/mc alias set minio http://172.16.50.1:9000 <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>
  1. 开始测试,执行(以前叫speedtest,现在修改成support perf了)
/usr/local/bin/mc support perf minio/<bucket>

这里可以得到一个网络、硬盘和吞吐量的结果

NODE                    RX              TX
http://storage01:9000   1.8 GiB/s       2.0 GiB/s
http://storage02:9000   1.8 GiB/s       2.0 GiB/s
http://storage03:9000   2.7 GiB/s       2.5 GiB/s
http://storage04:9000   2.4 GiB/s       2.2 GiB/s
NetPerf: ✔
NODE                    PATH    READ            WRITE
http://storage02:9000   /data1  192 MiB/s       235 MiB/s
http://storage02:9000   /data2  219 MiB/s       240 MiB/s
http://storage02:9000   /data3  186 MiB/s       262 MiB/s
http://storage02:9000   /data4  191 MiB/s       230 MiB/s
http://storage02:9000   /data5  179 MiB/s       221 MiB/s
http://storage02:9000   /data6  170 MiB/s       222 MiB/s
http://storage02:9000   /data7  200 MiB/s       219 MiB/s
http://storage02:9000   /data8  198 MiB/s       230 MiB/s
http://storage02:9000   /data9  166 MiB/s       207 MiB/s
http://storage02:9000   /data10 206 MiB/s       209 MiB/s
http://storage02:9000   /data11 198 MiB/s       213 MiB/s
http://storage02:9000   /data12 164 MiB/s       205 MiB/s
http://storage04:9000   /data1  172 MiB/s       259 MiB/s
http://storage04:9000   /data2  201 MiB/s       250 MiB/s
http://storage04:9000   /data3  218 MiB/s       256 MiB/s
http://storage04:9000   /data4  188 MiB/s       245 MiB/s
http://storage04:9000   /data5  157 MiB/s       197 MiB/s
http://storage04:9000   /data6  155 MiB/s       205 MiB/s
http://storage04:9000   /data7  154 MiB/s       210 MiB/s
http://storage04:9000   /data8  143 MiB/s       185 MiB/s
http://storage04:9000   /data9  181 MiB/s       207 MiB/s
http://storage04:9000   /data10 174 MiB/s       214 MiB/s
http://storage04:9000   /data11 173 MiB/s       218 MiB/s
http://storage04:9000   /data12 178 MiB/s       206 MiB/s
http://storage03:9000   /data1  194 MiB/s       337 MiB/s
http://storage03:9000   /data2  204 MiB/s       267 MiB/s
http://storage03:9000   /data3  212 MiB/s       261 MiB/s
http://storage03:9000   /data4  200 MiB/s       235 MiB/s
http://storage03:9000   /data5  168 MiB/s       216 MiB/s
http://storage03:9000   /data6  209 MiB/s       221 MiB/s
http://storage03:9000   /data7  179 MiB/s       222 MiB/s
http://storage03:9000   /data8  170 MiB/s       220 MiB/s
http://storage03:9000   /data9  144 MiB/s       186 MiB/s
http://storage03:9000   /data10 142 MiB/s       172 MiB/s
http://storage03:9000   /data11 149 MiB/s       171 MiB/s
http://storage03:9000   /data12 132 MiB/s       206 MiB/s
http://storage01:9000   /data1  99 MiB/s        119 MiB/s
http://storage01:9000   /data2  103 MiB/s       114 MiB/s
http://storage01:9000   /data3  104 MiB/s       114 MiB/s
http://storage01:9000   /data4  98 MiB/s        186 MiB/s
http://storage01:9000   /data5  186 MiB/s       261 MiB/s
http://storage01:9000   /data6  224 MiB/s       251 MiB/s
http://storage01:9000   /data7  188 MiB/s       240 MiB/s
http://storage01:9000   /data8  222 MiB/s       252 MiB/s
http://storage01:9000   /data9  185 MiB/s       247 MiB/s
http://storage01:9000   /data10 209 MiB/s       236 MiB/s
http://storage01:9000   /data11 191 MiB/s       224 MiB/s
http://storage01:9000   /data12 222 MiB/s       250 MiB/s
DrivePerf: ✔
        THROUGHPUT      IOPS
PUT     1.3 GiB/s       21 objs/s
GET     4.2 GiB/s       67 objs/s
MinIO 2022-08-25T07:17:05Z, 4 servers, 48 drives, 64 MiB objects, 62 threads
ObjectPerf: ✔

我们其实还可以按需做一些调整,做一些独立的测试。比如只需要测量object的读写速度,可以使用下述命令

mc support perf object minio

同理,我们也可以单独测量硬盘或者网络吞吐量,如下述命令

# driverroot@storage01:~# mc support perf object minio        THROUGHPUT      IOPS
PUT     1.6 GiB/s       26 objs/s
GET     4.0 GiB/s       63 objs/s
MinIO 2022-08-25T07:17:05Z, 4 servers, 48 drives, 64 MiB objects, 27 threads
ObjectPerf: ✔
# throughtputroot@storage01:~# mc support perf net minioNODE                    RX              TX
http://storage01:9000   1.9 GiB/s       2.1 GiB/s
http://storage02:9000   2.4 GiB/s       2.2 GiB/s
http://storage03:9000   2.6 GiB/s       2.4 GiB/s
http://storage04:9000   2.1 GiB/s       2.3 GiB/s
NetPerf: ✔

也可以选择在指定时间内测试指定大小的对象的读写速度

root@storage01:~# mc support perf object minio --duration 20s --size 128MiB        THROUGHPUT      IOPS
PUT     2.3 GiB/s       18 objs/s
GET     3.8 GiB/s       30 objs/s
MinIO 2022-08-25T07:17:05Z, 4 servers, 48 drives, 128 MiB objects, 41 threads
ObjectPerf: ✔

warp

在开始测试之前,需要在客户端上安装warp,GitHub - minio/warp: S3 benchmarking tool这里面有多个版本可供选择,建议使用二进制包,比较省事。

wget https://github.com/minio/warp/releases/download/v0.6.2/warp_0.6.2_Linux_x86_64.tar.gz
mkdir warp
tar zxf warp_0.6.2_Linux_x86_64.tar.gz -C warp
# 执行客户端./warp client

执行后,默认开启7761端口,假如配置了防火墙还需要放行该端口才行,我这里没有配置,所以就不演示了

在所有客户端开启warp后,我们可以选择启动一台执行warp混合基准测试了

warp mixed --duration=3m --warp-client=headnode --warp-client=node0{2...3} --host=storage0{1...4}:9000 --access-key=minio --secret-key=miniodev
warp: Benchmark data written to "warp-remote-2022-09-03[172425]-Fj1O.csv.zst"Mixed operations.
Operation: DELETE, 10%, Concurrency: 40, Ran 2m58s.
 * Throughput: 18.47 obj/s
Operation: GET, 45%, Concurrency: 40, Ran 2m58s.
 * Throughput: 831.05 MiB/s, 83.11 obj/s
Operation: PUT, 15%, Concurrency: 40, Ran 2m58s.
 * Throughput: 276.45 MiB/s, 27.65 obj/s
Operation: STAT, 30%, Concurrency: 40, Ran 2m58s.
 * Throughput: 55.30 obj/s
Cluster Total: 1106.95 MiB/s, 184.46 obj/s over 2m58s.

我们也可以单独对GET操作进行压力测试得到最大的写入吞吐量

 
         

接下来我们对DELETE操作进行测试

root@headnode:~# warp delete --duration=3m --warp-client=headnode --warp-client=node0{2...3} --host=storage0{1...4}:9000 --access-key=minio --secret-key=miniodevwarp: Benchmark data written to "warp-remote-2022-09-03[173528]-1d62.csv.zst"----------------------------------------Operation: PUT
* Average: 0.56 MiB/s, 576.46 obj/s
Throughput by host:
 * http://storage01:9000: Avg: 0.14 MiB/s, 144.36 obj/s
 * http://storage02:9000: Avg: 0.14 MiB/s, 143.90 obj/s
 * http://storage03:9000: Avg: 0.14 MiB/s, 143.78 obj/s
 * http://storage04:9000: Avg: 0.14 MiB/s, 144.32 obj/s
Throughput, split into 86 x 1s:
 * Fastest: 655.8KiB/s, 655.89 obj/s
 * 50% Median: 584.4KiB/s, 584.43 obj/s
 * Slowest: 438.5KiB/s, 438.49 obj/s
----------------------------------------Operation: DELETE
* Average: 897.41 obj/s
Throughput by host:
 * http://storage01:9000: Avg: 225.39 obj/s
 * http://storage02:9000: Avg: 221.08 obj/s
 * http://storage03:9000: Avg: 220.70 obj/s
 * http://storage04:9000: Avg: 222.31 obj/s
Throughput, split into 41 x 1s:
 * Fastest: 998.26 obj/s
 * 50% Median: 890.61 obj/s
 * Slowest: 861.53 obj/s
warp: Cleanup done对DELETE操作进行测试
root@headnode:~# warp stat --autoterm --duration=3m --warp-client=headnode --warp-client=node0{2...3} --host=storage0{1...4}:9000 --access-key=minio --secret-key=miniodevwarp: Benchmark data written to "warp-remote-2022-09-03[173008]-vsV9.csv.zst"----------------------------------------Operation: PUT
* Average: 0.56 MiB/s, 584.19 obj/s
Throughput by host:
 * http://storage01:9000: Avg: 0.14 MiB/s, 145.46 obj/s
 * http://storage02:9000: Avg: 0.14 MiB/s, 145.46 obj/s
 * http://storage03:9000: Avg: 0.14 MiB/s, 145.32 obj/s
 * http://storage04:9000: Avg: 0.14 MiB/s, 144.19 obj/s
Throughput, split into 33 x 1s:
 * Fastest: 609.4KiB/s, 624.07 obj/s
 * 50% Median: 585.7KiB/s, 599.81 obj/s
 * Slowest: 499.3KiB/s, 511.37 obj/s
----------------------------------------Operation: STAT
* Average: 10262.16 obj/s
Throughput by host:
 * http://storage01:9000: Avg: 2549.94 obj/s
 * http://storage02:9000: Avg: 2566.62 obj/s
 * http://storage03:9000: Avg: 2572.47 obj/s
 * http://storage04:9000: Avg: 2572.58 obj/s
Throughput, split into 179 x 1s:
 * Fastest: 10622.95 obj/s
 * 50% Median: 10268.04 obj/s
 * Slowest: 9574.31 obj/s
warp: Cleanup done.
将文件切片分批上传性能测试
root@headnode:~# warp multipart --parts=500 --part.size=10MiB --warp-client=headnode --warp-client=node0{2...3} --host=storage0{1...4}:9000 --access-key=minio --secret-key=miniodevwarp: Benchmark data written to "warp-remote-2022-09-03[174331]-AWo5.csv.zst"----------------------------------------Operation: PUT
* Average: 559.26 MiB/s, 55.93 obj/s
Throughput by host:
 * http://storage01:9000: Avg: 137.98 MiB/s, 13.80 obj/s
 * http://storage02:9000: Avg: 140.59 MiB/s, 14.06 obj/s
 * http://storage03:9000: Avg: 138.60 MiB/s, 13.86 obj/s
 * http://storage04:9000: Avg: 141.93 MiB/s, 14.19 obj/s
Throughput, split into 16 x 1s:
 * Fastest: 616.2MiB/s, 61.62 obj/s
 * 50% Median: 562.9MiB/s, 56.29 obj/s
 * Slowest: 437.3MiB/s, 43.73 obj/s
----------------------------------------Operation: GET
* Average: 1026.15 MiB/s, 102.62 obj/s
Throughput by host:
 * http://storage01:9000: Avg: 254.73 MiB/s, 25.47 obj/s
 * http://storage02:9000: Avg: 257.86 MiB/s, 25.79 obj/s
 * http://storage03:9000: Avg: 257.91 MiB/s, 25.79 obj/s
 * http://storage04:9000: Avg: 255.68 MiB/s, 25.57 obj/s
Throughput, split into 298 x 1s:
 * Fastest: 1133.4MiB/s, 113.34 obj/s
 * 50% Median: 1030.0MiB/s, 103.00 obj/s
 * Slowest: 876.0MiB/s, 87.60 obj/s
warp: Cleanup done.

好的,以上就是我做的一些测试和总结,希望对大家有帮助

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
缓存 监控 算法
软件测试中的性能瓶颈分析与优化策略
【10月更文挑战第6天】 性能测试是确保软件系统在高负载条件下稳定运行的重要手段。本文将深入探讨性能测试的常见瓶颈,包括硬件资源、网络延迟和代码效率等问题。通过具体案例分析,我们将展示如何识别并解决这些问题,从而提升软件的整体性能。最后,文章还将分享一些实用的性能优化技巧,帮助读者在日常开发和测试中更好地应对性能挑战。
107 3
|
3月前
|
监控 测试技术 持续交付
软件测试中的性能瓶颈分析与优化策略
性能瓶颈,如同潜伏于软件深处的隐形障碍,悄然阻碍着系统的流畅运行。本文旨在揭示这些瓶颈的形成机理,剖析其背后的复杂成因,并汇聚一系列针对性的优化策略,为软件开发者提供一套系统性的解决方案。
59 5
|
20天前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
20天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
2月前
|
缓存 监控 测试技术
软件测试中的性能瓶颈分析与优化策略
本文深入探讨了在软件测试过程中,如何有效地识别和解决性能瓶颈问题。通过对性能瓶颈的定义、分类以及常见原因的分析,结合实际案例,提出了一系列针对性的优化策略和方法。这些策略旨在帮助测试人员和开发人员提高软件的性能表现,确保软件在高负载条件下依然能够稳定运行。
|
3月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
91 1
|
3月前
|
监控 算法 测试技术
软件测试中的性能瓶颈分析与优化策略
本文旨在深入探讨软件测试过程中性能瓶颈的识别与优化方法。通过对性能瓶颈的概念、分类及其成因进行分析,结合实际案例,提出一套系统的性能瓶颈诊断流程和针对性的优化策略。文章首先概述了性能瓶颈的基本特征,随后详细介绍了内存泄漏、资源竞争、算法效率低下等常见瓶颈类型,并阐述了如何通过代码审查、性能监测工具以及负载测试等手段有效定位问题。最后,结合最佳实践,讨论了代码级优化、系统配置调整、架构改进等多方面的解决措施,旨在为软件开发和测试人员提供实用的性能优化指导。
88 4
|
4月前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
95 1
|
3月前
|
SQL 搜索推荐 测试技术
ChatGPT与测试分析
本产品需求文档(PRD)针对论坛网站的搜索功能优化,旨在提升搜索结果的准确性和速度,增强用户体验。文档涵盖项目背景、目标、功能需求(如搜索结果准确性、搜索速度优化、过滤和排序等)、非功能需求(如兼容性、性能、安全性等)、用户界面设计和技术架构等内容,并制定了详细的测试和上线计划,确保项目顺利实施。
32 0
|
5月前
|
监控 算法 Java
下一篇
DataWorks