Crates.io | mongobar |
lib.rs | mongobar |
version | 0.2.5 |
source | src |
created_at | 2024-08-06 08:13:20.393882 |
updated_at | 2024-08-12 12:33:59.219746 |
description | This is a stress testing tool for mongo. |
homepage | https://github.com/WumaCoder/mongobar.git |
repository | https://github.com/WumaCoder/mongobar.git |
max_upload_size | |
id | 1327020 |
size | 1,290,684 |
用 Rust 编写的 mongo 压力测试工具。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # install cargo
cargo install mongobar
mongobar --help
特别提示: 在进行 写 压力测试的时候请注意数据库的备份。
mongobar.json
{
"uri": "mongodb://root:12345678@localhost:27017/?authSource=admin",
"db": "qxg",
"thread_count": 1000,
"loop_count": 100
}
上面比较简单我就不多说了。
mongobar op-record oplogsname -f
# oplogsname 最后要压力测试或者重放的名称
# -f 如果之前录制过则覆盖
原理是开启 profileLevel 2 进行全量日志采集,采集完成之后输入 Y
就可以生成了 oplogs.op 文件,当执行命令的时候就算是开始录制,Y 之后就是结束采集,结束采集后会将 profileLevel 设置成 0 或者 1(恢复设置)。
这里的 *.op 文件是最终要跑的测试脚本文件。
生成的 .op 文件会放在 .mongobar/oplogsname/oplogs.op
.
有两种方式可以执行压力测试:
mongobar op-stress oplogsname -l 10 -t 128
# op-stress 是这个命令
# oplogsname 是压测的例子
# -l 是循环次数, 0 表示无限次数
# -t 表示线程数,也就是并发
mongobar ui oplogsname -l 10 -t 128
# op-stress 是这个命令
# oplogsname 是压测的例子
# -l 是循环次数, 0 表示无限次数
# -t 表示线程数,也就是并发
执行上面的命令会打开一个 tui 界面,我们可以通过 UP 、Down、Enter 来操作。
我们可以通过这个路径进入进行压力测试 UI -> [Stress] -> [Start].
query_stats.csv
测试报告日志回放与上面区别就是:
注意:
我们可以通过一些方法来采集到一些完整的数据执行命令的片段,比如我就是从阿里云的审计日志拉取的 100w 条日志进行日志回放的压力测试的,为此我还开发一些命令用来将阿里审计日志的 csv 转为 mongobar 的 op 文件 mongobar tool cov xxx.csv
。
我们可以操作:
UI -> [Replay] -> [Revert]
完成之后执行:
UI -> [Replay] -> [Start]
测试完成后执行:
UI -> [Replay] -> [Resume]
进行恢复。
提示:
- 我在实践过程中其实 replay 功能还是无法对大数据压崩,但是工具也不支持分布式集群压测,所以该功能还是有很多局限的,不过我操作的方式是开多个 linux,然后使用 termius 的广播功能统一处理。
@班级小管家/lyda