Minio稳定性测试

864 阅读19分钟

1、硬件环境

组件配置/版本说明备注
操作系统Ubuntu 22.04 LTS轻量级,低初始资源公司常用系统
cpu2核低配置
内存4G重点关注资源
存储50G HDD(挂载到/data)单磁盘,无raid需要定时清理
minIo版本RELEASE.2minio-test/023-12-06T09-09-22Z裸机部署/docker部署
网络本地千兆网络专用测试网络,无其他干扰

2、基准测试工具

测试工具功能说明备注
mc (MinIO Client)内置基准测试工具mc support perf的基准测试需要企业版才可以,所以基准测试需要另外工具来完成。
minio/warpminIO开源组织的客户端基准测试工具需要独立安装,模拟真实的客户端

2.1、mc工具安装:

直接到github下载对应的二进制文件,注意下载的版本一定要大于等于minio的版本。

可执行文件下载地址:<https://dl.min.io/client/mc/release/linux-amd64/archive/>

项目地址:[GitHub - minio/mc: Unix like utilities for object store](https://github.com/minio/mc)

mc使用文档:[MinIO客户端 &#8212; MinIO中文文档 | MinIO Linux中文文档](https://www.minio.org.cn/docs/minio/linux/reference/minio-mc.html)

descript

把二进制文件拷贝到要运行的机器直接执行,重命名成简短的mc:

descript

minIO后台申请客户端访问秘钥:
accessKey:
xxxxxx secretKey: xxxx descript
设置mc连接配置命令:

设置成功界面

descript

测试连接是否正常

descript

descript

2.2、minio/warp的安装

下载地址:Releases · minio/warp · GitHub

选择下载二进制文件并解压并拷贝到带压测的机器
descript

descript

授予运行权限:

descript

配置yml文件来进行后续的测试:

2.3、测试数据准备

本地生产1k、10m、1minio-test/00m、5minio-test/00m、1G的txt文件并上传到mc客户端的机器来进行下一步压测。
descript

使用python脚本来批量生产测试数据:

  1. 测试用例设计

1、基础功能验证

测试项步骤预期结果备注
服务启动

1. 运行启动minio

2. 检查日志无报错

MinIO 服务正常启动,控制台可访问具体指令运维处理
Bucket 操作创建 bucket、删除bucket、查看bucketBucket 创建成功,列表可见
文件上传1.上传 10个 10MB 文件
2. 检查minio服务列表是否新增
文件上传成功,元数据正确
文件下载1.下载已上传的10个10MB文件
2. 检查本地磁盘文件是否下载
文件内容完整,MD5 校验一致
删除操作

1. 删除已上传的文件

2. 检查minio服务列表是否删除

文件被删除,Bucket 状态更新

2、边界性能测试

测试场景方法监控指标预期阈值(参考)
小文件高并发读写使用 warp压测 1KB 文件,测试并发上限,持续10分钟

1. minio吞吐量 (ops/s)

3. minio读写速率
4. 系统磁盘读写IOPS
2. 系统内存峰值
4. 系统cpu峰值
5. 系统网络带宽峰值

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。
大文件顺序读写

使用 warp压测 1minio-test/00MB 文件,测试并发上限,持续10分钟

1. minio吞吐量 (ops/s)

3. minio读写速率
4. 系统磁盘读写IOPS
2. 系统内存峰值
4. 系统cpu峰值
5. 系统网络带宽峰值

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。
大小文件混合读写

使用 1k、1minio-test/00MB 文件持续测试读写,持续10分钟

1. minio吞吐量 (ops/s)

3. minio读写速率
4. 系统磁盘读写IOPS
2. 系统内存峰值
4. 系统cpu峰值
5. 系统网络带宽峰值

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。

3、稳定性测试

测试项方法预期结果
长时间运行持续运行 MinIO 24 小时,每小时上传 1minio-test/00 个 10MB 文件服务无崩溃,无 OOM 终止
断点续传

1. 上传 5minio-test/00MB、1GB 文件时中断网络

2. 恢复网络后重试上传

文件续传成功,数据一致性校验通过
磁盘空间不足

1. 填充磁盘至 95%

2. 尝试上传新文件

返回明确错误(5minio-test/03 Service Unavailable)

三、测试报告

1、基础功能测试

测试项目指令测试内容是否符合预期备注
服务启动运维执行docker启动服务器
Bucket 操作

1. 创建 bucket:./mc mb minio/test-bucket
2. 删除bucket:./mc rb minio/test-bucket

3. 查看bucket: ./mc ls minio

创建/删除/查看
文件上传1. 上传 10个 10MB 文件:./mc cp -r testData/*10m.txt minio/test-bucket上传10个10M的txt文件
文件下载1. 下载已上传文件:./mc find minio/test-bucket --name "*m.txt" --exec "./mc cp {} downloadData/"批量把上传的下载到本地
删除操作

1. 删除已上传的文件:
./mc find minio/test-bucket --name "*m.txt" --exec "./mc rm {}"

2. 检查列表更新: ./mc ls minio

批量删除上传的文件
  1. 边界性能测试

2.1、小文件写上限

测试内容:

持续时间文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1kb16不限制

执行指令:./warp run min_file_put.yml 配置文件:min_file_put.yml**

minIO指标:

数值单位备注
总请求数量621455
总对象数量621455
总对象大小606.9MB
测试流程耗时597s
平均吞吐量1minio-test/035obj/s多少个对象每秒
最慢吞吐量79.13obj/s
最快吞吐量1281.87obj/s
50%中位数吞吐1173.10obj/s50%的请求吞吐量在obj/s以上
平均写入速率1minio-test/035.1KB/s
最慢写入速率79.1KB/s
最快写入速率1281.9KB/s
50%写入速率1173.1KB/s50%的请求写入速率在MB/s以上
平均请求延迟16.1ms
50%延迟14.9ms50%的请求延迟在几毫秒以内
90%延迟20.6ms
99%延迟39.8ms
最快请求4ms
最慢请求1093.1ms
请求标准偏差8.3ms

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。

|

3、稳定性测试

测试项方法预期结果
长时间运行持续运行 MinIO 24 小时,每小时上传 1minio-test/00 个 10MB 文件服务无崩溃,无 OOM 终止
断点续传
1. 上传 5minio-test/00MB、1GB 文件时中断网络

2. 恢复网络后重试上传

| 文件续传成功,数据一致性校验通过 | | 磁盘空间不足 |

1. 填充磁盘至 95%

2. 尝试上传新文件

| 返回明确错误(5minio-test/03 Service Unavailable) |

三、测试报告

1、基础功能验证

测试项步骤预期结果备注
服务启动

1. 运行启动minio

2. 检查日志无报错

MinIO 服务正常启动,控制台可访问具体指令运维处理
Bucket 操作创建 bucket、删除bucket、查看bucketBucket 创建成功,列表可见
文件上传1.上传 10个 10MB 文件
2. 检查minio服务列表是否新增
文件上传成功,元数据正确
文件下载1.下载已上传的10个10MB文件
2. 检查本地磁盘文件是否下载
文件内容完整,MD5 校验一致
删除操作

1. 删除已上传的文件

2. 检查minio服务列表是否删除

文件被删除,Bucket 状态更新

2、边界性能测试

测试场景方法监控指标预期阈值(参考)
小文件高并发读写使用 warp压测 1KB 文件,测试并发上限,持续10分钟

1. minio吞吐量 (ops/s)

3. minio读写速率
4. 系统磁盘读写IOPS
2. 系统内存峰值
4. 系统cpu峰值
5. 系统网络带宽峰值

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。
大文件顺序读写

使用 warp压测 1minio-test/00MB 文件,测试并发上限,持续10分钟

1. minio吞吐量 (ops/s)

3. minio读写速率
4. 系统磁盘读写IOPS
2. 系统内存峰值
4. 系统cpu峰值
5. 系统网络带宽峰值

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。
大小文件混合读写

使用 1k、1minio-test/00MB 文件持续测试读写,持续10分钟

1. minio吞吐量 (ops/s)

3. minio读写速率
4. 系统磁盘读写IOPS
2. 系统内存峰值
4. 系统cpu峰值
5. 系统网络带宽峰值

在系统资源没达到阈值的情况下minIO的吞吐和读写速率越大越好,p99延迟越低越好。

3、稳定性测试

测试项方法预期结果
长时间运行持续运行 MinIO 24 小时,每小时上传 1minio-test/00 个 10MB 文件服务无崩溃,无 OOM 终止
断点续传

1. 上传 5minio-test/00MB、1GB 文件时中断网络

2. 恢复网络后重试上传

文件续传成功,数据一致性校验通过
磁盘空间不足

1. 填充磁盘至 95%

2. 尝试上传新文件

返回明确错误(5minio-test/03 Service Unavailable)

三、测试报告

1、基础功能测试

测试项目指令测试内容是否符合预期备注
服务启动运维执行docker启动服务器
Bucket 操作

1. 创建 bucket:./mc mb minio/test-bucket
2. 删除bucket:./mc rb minio/test-bucket

3. 查看bucket: ./mc ls minio

创建/删除/查看
文件上传1. 上传 10个 10MB 文件:./mc cp -r testData/*10m.txt minio/test-bucket上传10个10M的txt文件
文件下载1. 下载已上传文件:./mc find minio/test-bucket --name "*m.txt" --exec "./mc cp {} downloadData/"批量把上传的下载到本地
删除操作

1. 删除已上传的文件:
./mc find minio/test-bucket --name "*m.txt" --exec "./mc rm {}"

2. 检查列表更新: ./mc ls minio

批量删除上传的文件
  1. 边界性能测试

    2.1、小文件写上限

    测试内容:
持续时间文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1kb16不限制

执行指令:./warp run min_file_put.yml
配置文件:min_file_put.yml**

minIO指标:

数值单位备注
总请求数量621455
总对象数量621455
总对象大小606.9MB
测试流程耗时597s
平均吞吐量1minio-test/035obj/s多少个对象每秒
最慢吞吐量79.13obj/s
最快吞吐量1281.87obj/s
50%中位数吞吐1173.10obj/s50%的请求吞吐量在obj/s以上
平均写入速率1minio-test/035.1KB/s
最慢写入速率79.1KB/s
最快写入速率1281.9KB/s
50%写入速率1173.1KB/s50%的请求写入速率在MB/s以上
平均请求延迟16.1ms
50%延迟14.9ms50%的请求延迟在几毫秒以内
90%延迟20.6ms
99%延迟39.8ms
最快请求4ms
最慢请求1093.1ms
请求标准偏差8.3ms
测试报告截图:
descript
系统指标:
系统内存(M)系统cpu(%)系统磁盘读写速率系统磁盘IOPS网络带宽备注
4G135读514.minio-test/01kb/s、写15.22MB/s读125.49io/s、写1850io/s发382kb/s、收1.35MB/s
系统资源监控截图:

descript

descript

2.2、小文件读上限

测试内容:

持续时间文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1kb16不限制

执行指令:./warp run min_file_get.yml
配置文件:min_file_get.yml**

minIO指标:

数值单位备注
总请求数量58minio-test/0minio-test/027
总对象数量58minio-test/0minio-test/027
总对象大小566.4MB
测试流程耗时597s
平均吞吐量966obj/s
最慢吞吐量780.98obj/s多少个对象每秒
最快吞吐量1378.72obj/s
50%中位数吞吐953.15obj/s50%的请求吞吐量在obj/s以上
平均读取速率966.4KB/s
最慢读取速率781KB/s
最快读取速率1378.7KB/s
50%读取速率953.2KB/s50%的请求写入速率在MB/s以上
平均请求延迟17ms
50%延迟4ms50%的请求延迟在几毫秒以内
90%延迟77ms
99%延迟85ms
最快请求1ms
最慢请求183ms
请求标准偏差28ms
测试报告截图:
descript
系统指标:
系统内存系统cpu(%)系统磁盘读写速率系统磁盘IOPS网络带宽备注
4G2minio-test/00读467.04kb/s、写0kb/s读114.minio-test/02io/s、写39.58io/s收410kb/s、发1MB/s

系统资源监控截图:
descript

descript

2.3、小文件混合读写上限

测试内容:

持续时间读写比例文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1:11kb16不限制

执行指令:./warp run min_file_mixed.yml
配置文件:min_file_mixed.yml**

minIO指标:

数值单位备注
总请求数量726991
总对象数量726991
总对象大小710MB
测试流程耗时597s
平均吞吐量605obj/s
最慢吞吐量253.14obj/s多少个对象每秒
最快吞吐量1896.77obj/s
50%中位数吞吐1131.67obj/s50%的请求吞吐量在obj/s以上
平均写入速率605.2KB/s
最慢写入速率253.1KB/s
最快写入速率1896.8KB/s
50%写入速率1131.7KB/s50%的请求写入速率在MB/s以上
平均请求延迟get:5.5/put:21.4ms
50%延迟get:2.6/put:13.8ms50%的请求延迟在几毫秒以内
90%延迟get:8.9/put:52.1ms
99%延迟get:57.5/put:78.7ms
最快请求get:1.1/put:2.9ms
最慢请求get:418.2/put:827.4ms
请求标准偏差get:10.4/put:19.1ms
测试报告截图:
descript
系统指标:
系统内存(M)系统cpu(%)系统磁盘读写速率系统磁盘IOPS网络带宽备注
4G2minio-test/00读965.49kb/s、写13.78MB/s读235.71io/s、写1580io/s收1.33MB/s、发1.14MB/s

系统资源监控截图:

descript

descript

2.4、大文件写上限

测试内容:

持续时间文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1minio-test/00MB16不限制

执行指令:./warp run max_file_put.yml
配置文件:max_file_put.yml**

minIO指标:

数值单位备注
总请求数量3minio-test/02
总对象数量3minio-test/02
总对象大小29.49GB
测试流程耗时624s
平均吞吐量0.48obj/s
最慢吞吐量0.23obj/s多少个对象每秒
最快吞吐量0.58obj/s
50%中位数吞吐0.48obj/s50%的请求吞吐量在obj/s以上
平均写入速率48.24MB/s
最慢写入速率22.6MB/s
最快写入速率58.1MB/s
50%写入速率47.9MB/s50%的请求写入速率在MB/s以上
平均请求延迟32810ms
50%延迟34478.9ms50%的请求延迟在几毫秒以内
90%延迟38530.9ms
99%延迟38530.9ms
最快请求11875.8ms
最慢请求51338.9ms
请求标准偏差4532.7ms
测试报告截图:
descript
系统指标:
系统内存(M)系统cpu(%)系统磁盘读写速率系统磁盘IOPS网络带宽备注
4G46.7读85.24kb/s、写35.16MB/s读20.81io/s、写1minio-test/00.71io/s收43.5MB/s、发182kb/s

系统资源监控截图:

descript

descript

内存异常情况:容器内minio进程内存没降下来在波动
descript

2.5、大文件读上限

测试内容:

持续时间文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1minio-test/00MB16不限制

执行指令:./warp run max_file_get.yml
配置文件:max_file_get.yml**
minIO指标:

数值单位备注
总请求数量672
总对象数量672
总对象大小65.62GB
测试流程耗时6minio-test/01s
平均吞吐量1obj/s
最慢吞吐量1.11obj/s多少个对象每秒
最快吞吐量1.12obj/s
50%中位数吞吐1.11obj/s50%的请求吞吐量在obj/s以上
平均读取速率111.4MB/s
最慢读取速率111.2MB/s
最快读取速率111.8MB/s
50%读取速率111.4MB/s50%的请求写入速率在MB/s以上
平均请求延迟14364ms
50%延迟14364.8ms50%的请求延迟在几毫秒以内
90%延迟14371.1ms
99%延迟14373ms
最快请求14116.7ms
最慢请求14471.4ms
请求标准偏差5.8ms
测试报告截图:
descript
系统指标:
系统内存(M)系统cpu(%)系统磁盘读写速率系统磁盘IOPS网络带宽备注
4G30.4读124M/s、写0M/s读390.48io/s、写21.98io/s收0M/s、发117M/s

系统资源监控截图:

descript

descript

2.6、大文件混合读写上限

测试内容:

持续时间读写比例文件大小客户端并发实例每个实例请求限制测试后是否清理数据
10min1:11minio-test/00MB16不限制

执行指令:./warp run max_file_mixed.yml
配置文件:max_file_mixed.yml**

minIO指标:

数值单位备注
总请求数量347失败4个
总对象数量343
总对象大小33.89GB
测试流程耗时6minio-test/02s
平均吞吐量0.56obj/s
最慢吞吐量0.1obj/s多少个对象每秒
最快吞吐量1.52obj/s
50%中位数吞吐0.48obj/s50%的请求吞吐量在obj/s以上
平均读写速率56.26MB/s
最慢读写速率10.3MB/s
最快读写速率151.5MB/s
50%读写速率48.4MB/s50%的请求写入速率在MB/s以上
平均请求延迟get:61minio-test/02.3/put:44123.2ms
50%延迟get:7110.3/put:45872.1ms50%的请求延迟在几毫秒以内
90%延迟get:7549.4/put:50947.4ms
99%延迟get:7549.4/put:50947.4ms
最快请求get:969.4/put:18358.1ms
最慢请求get:29346.4/put:99289.7ms
请求标准偏差get:1625.6/put:4973ms
测试报告截图:
descript
系统指标:
系统内存(G)系统cpu(%)系统磁盘读写速率系统磁盘IOPS网络带宽备注
436.3读16.43M/s、写30.12M/s读70.97io/s、写155.06io/s收30M/s、发32M/s
系统资源监控截图:

descript

descript
2. ## 长期稳定性测试

测试项目操作是否符合预期备注
长时间运行运行24小时的脚本观察minio系统稳定性
断点续传文件传输一半断开网络要结合Multipart Upload的功能把大文件拆分为小文件。
磁盘空间不足磁盘满的情况下继续上传文件
**运行指令长期稳定性运行:**nohup ./warp run long_time_run.yml

long_time_run.yml
**配置:**2个进程,每秒上传一个10M的文件,持续24小时,get、put、delete比例:5:3:2。

磁盘不足写不进去报错:
descript

4、结果总结

docker虚拟化的机器内存可以达到4G,实际物理机会更低一些,这边grafana抓的内存不准。总体没有把内存耗光宕机所以内存不是瓶颈。

minIO不同操作资源瓶颈表现

操作瓶颈资源总结备注
小文件写iops达到1850io/s,磁盘io平均耗时1minio-test/00%,压测期间内存峰值长期在4G小文件写磁盘io为主要瓶颈
小文件读cpu峰值1minio-test/00%,内存峰值压测期间长期在4G小文件读cpu为主要瓶颈,查阅资料大概是文件读取后进行http请求、解压、哈希计算较为消耗cpu的操作。
小文件1:1混合读写cpu峰值2minio-test/00%,io峰值1580io/s,内存峰值压测期间长期在4G小文件混合1:1读写cpu和io峰值交替频繁出现
大文件写写速率峰值73.5MB/s,io耗时交替出现峰值1minio-test/00%,内存峰值压测期间长期在4G大文件写表现主要在磁盘写入速率上,其次是iops
大文件读读峰值124.51MB/s,io耗时较高在90%附近,内存峰值压测期间长期在4G大文件读主要表现在磁盘读取速率,其次是iops
大文件1:1混合读写读均值30.12M/s,写均值16.43M/s,io耗时1minio-test/00%,内存峰值压测期间长期在4G大文件1:1混合读写的时候,io耗时长时间维持在1minio-test/00%,由于io耗时影响和读写同时压测读写速率都达不到各自的峰值

建议:用mingIO作为存储,高频读或者高频写任意组合的业务,磁盘的IOPS要好,磁盘转速要高,能选SSD固态盘的不要选HDD机械以保证业务的稳定性和峰值吞吐。如果是低频读写或者归档的业务可以考虑用HDD以节省成本。同时读频率较高的业务建议cpu核心数要高一些。