记一次使用ycsb工具对mongodb进行性能测试过程

前言

最近在做性能测试,目的是要优化mongodb的性能,要求5w qps,mongodb已经做了分片,三台mongo shard存储,三台mongos 路由,三台configserver,用于记录路由和存储的对应关系。

YCSB简介

ycsb是一款性能测试工具,用Java写的,并且什么都可以压,像是mongodb,redis,mysql,hbase,等等,感觉还是很厉害的。并且是有apache2.0的认证的,官网在github上,有讲如何安装和使用,个人建议放到pod中执行,比较方便。

其中mongodb压测文档

简单上手

工作负载模式

下载的ycsb压缩包,解压后会有一个workloads目录,其中有些workloada,workloadb,workloadc,之类的文件,这些文件都很类似:

recordcount = 1000 //记录数
operationcount = 1000 //操作次数

readproportion = 0.5 // 查询操作所占百分比
updateproportion = 0.5 // 更新操作所占百分比
insertproportion = 0 // 写入操作所占百分比
scanproportion = 0 // 扫描操作所占百分比

不同的工作负载模式,就对应这个百分比的不同。

压测步骤

压测分为两步,加载数据和运行测试,第一步也就是load,第二步即为run,这个可以从官方文档中了解到:
Now you are ready to run! First, use the asynchronous driver to load the data:

./bin/ycsb load mongodb -s -P workloads/workloada > outputLoad.txt
Then, run the workload:

./bin/ycsb run mongodb -s -P workloads/workloada > outputRun.txt

还可以使用异步的方式,不过个人使用异步方式,报错信息是认证失败,不知道为什么。反正使用同步模式,问题不大。

简单原理

由于是开源的,所以简单看了一下,使用java程序,调用mongodb的原生driver,使用多线程模式进行测试,测试过程中会在mongodb中新建一个名称为ycsb的db,需要压测完后手动删除。

踩雷记录

重复写入会报主键冲突,可使用upsert规避:

-p mongodb.upsert=true

客户端线程数默认是1,可设置线程数:

-p threads 10

后记

这个线程数的问题真的是气死人了,官方文档中好像并没有说明需要设置这个值,但是使用单线程测出来的qps很低,不如人意,然后又尝试了加大了mongo shard的cpu和memory,测试出来的qps并不会随着资源的增加而增大,所以当时很迷,卡在这里许久,到后边经过大佬的指导,讲线程数改为10,在shard pod核心数为2,memory为4G的时候,读取的速度大概在14000QPS,写入的速度10000左右。已经初步达到性能要求了,只需要再扩容pod或者持续增加mongo shard的cpu和memory的规格,就应该可以达到5w qps的要求了。

结语

本来还想水一波apache bench的用法的,因为最近做压测,ab也是了解一点儿,hey也是知道一点儿的,但是整体比较简单,所以就不讲了,现在说我是个运维测试好像也没啥毛病了,本来只是一个简单的开发,现在什么都要懂一点儿。😃

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值