高可用mongodb集群(分片+副本):性能测试

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
性能测试 PTS,5000VUM额度
简介: 高可用mongodb集群(分片+副本):性能测试

Yahoo! Cloud Serving Benchmark (YCSB) 是一个Java语言实现的用于云端或者服务器端的数据库性能测试工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。
这个框架具有很好的可扩展性,可以通过配置文件来指定需要进行什么样的workload的测试,比如读写比例多少,每条记录多大,每个字段多大,并发数多大,进行随机选择使用的分布(比如读一条数据的时候)等。

wget https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-mongodb-binding-0.17.0.tar.gz
tar xvfz ycsb-mongodb-binding-0.17.0.tar.gz
chown -R mongod:mongod ycsb-mongodb-binding-0.17.0

默认的6种测试场景如下:
1)workloada:读写均衡型,50%/50%,Reads/Writes
2)workloadb:读多写少型,95%/5%,Reads/Writes
3)workloadc:只读型,100%,Reads
4)workloadd:读最近写入记录型,95%/5%,Reads/insert
5)workloade:扫描小区间型,95%/5%,scan/insert
6)workloadf:读写入记录均衡型,50%/50%,Reads/insert

■ 为指定的库和表指定hash分片

sh.enableSharding("testdb")
sh.shardCollection("testdb.test1", {_id:"hashed"})

■ 测试模型,即workload模型

workload id |workload desc                   |recordcount
------------|--------------------------------|----------
workload_s6 |60% read, 40% insert            |100万

与研发负责人沟通,本次测试的业务模型采用如上的s6模型,比较接近业务真实状态。

■ 测试指标

RunTime
Throughput
AverageLatency
评判指标:通过调整线程数,直到发现ops不再增加而平均响应时间继续增加,或者测试主机、集群节点的cpu负荷达到一定程度

■ workload_s6

cat > workloads/workload_s6 << EOF
recordcount=1000000
operationcount=1000000
workload=site.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=0.6
updateproportion=0
scanproportion=0
insertproportion=0.4
requestdistribution=zipfian
EOF

THREADS=100
bin/ycsb load mongodb -threads ${THREADS} -P workloads/workload_s6 -p fieldcount=1 -p fieldlength=1024 -p clientbuffering=true -p table=test1 -p mongodb.url=mongodb://admin:'password'@node1:20000,node2:20000,node3:20000/testdb?authSource=admin 1>workload_s6_load_${THREADS}.result 2>workload_s6_load.log&
tail -100f workload_s6_load_${THREADS}.result

bin/ycsb run mongodb -threads ${THREADS} -P workloads/workload_s6 -p fieldcount=1 -p fieldlength=1024 -p clientbuffering=true -p table=test1 -p mongodb.url=mongodb://admin:'password'@node1:20000,node2:20000,node3:20000/testdb?authSource=admin 1>workload_s6_run_${THREADS}.result 2>workload_s6_run.log&
tail -100f  workload_s6_run_${THREADS}.result

使用如上的脚本,调整THREADS参数,反复测试,分析如下。

■ 分片集群性能测试数据统计分析

 workload  |threads| rows   |RunTime|Throughput||Operations|AverageLatency||Operations|AverageLatency
           |       |        |  (s)  |          || (Read)   |    (us)      || (Insert) |    (us)
-----------|-------|--------|-------|----------||----------|--------------||----------|--------------
           |  1    |1000000 | 1199  | 833      || 599849   |    1151      || 400151   |    1262
           |  10   |1000000 | 145   | 6916     || 600565   |    1486      || 399435   |    1274
workload_s6|  20   |1000000 | 71    | 14097    || 598887   |    1357      || 401113   |    1377
           |  20   |1000000 | 105   | 9472     || 600002   |    1506      || 399998   |    1409
           |  30   |1000000 | 52    | 19102    || 599719   |    1495      || 400281   |    1521
           |  50   |1000000 | 52    | 19126    || 600574   |    2833      || 399426   |    1835
           |  50   |1000000 | 151   | 6596     || 600413   |    8572      || 399587   |    2526
           |  50   |1000000 | 173   | 5758     || 600193   |    9140      || 399807   |    2600
           |  80   |1000000 | 69    | 14470    || 599662   |    4440      || 400338   |    2553
           |  100  |1000000 | 42    | 23628    || 599939   |    3981      || 400061   |    3827
           |  150  |1000000 | 141   | 7066     || 599882   |    6373      || 400118   |    4007
           |  150  |1000000 | 45    | 21845    || 601056   |    5593      || 398944   |    4284
           |  200  |1000000 | 47    | 20879    || 599388   |    6972      || 400612   |    5275
           |  300  |1000000 | 81    | 12336    || 599795   |    10121     || 400205   |    8441
测试表明,开20并发时,集群各个节点(16c)的cpu负荷比较均衡,空闲均为50%-60%左右;
开50并发准备阶段时(全部操作是100%插入100万数据),集群各节点cpu空闲已经较低,部分降至20%以内,因为50并发平均每节点超过16线程,已经超过cpu负荷极限,只是由于是虚机,cpu超限使用了;
开50并发60%读40%写时,集群各节点cpu空闲明显比较均衡,基本空闲60%左右;
开200、300并发时,测试主机的cpu空闲瞬时达到20%左右,集群节点1的cpu空闲5%左右,node2、3分别是25%、40%,可见3节点集群的并发能力基本达到了极限。可见,开100并发时,集群基本达到了最佳性能。
如果不启用分片,测试如下:
 workload  |threads| rows   |RunTime|Throughput||Operations|AverageLatency||Operations|AverageLatency
           |       |        |  (s)  |          || (Read)   |    (us)      || (Insert) |    (us)      
-----------|-------|--------|-------|----------||----------|--------------||----------|--------------
           |  100  |1000000 | 189   | 5279     || 600016   |    7094      || 399984   |    2572
workload_s6|  100  |1000000 | 38    | 26168    || 600205   |    4076      || 399795   |    2696
           |  150  |1000000 | 39    | 25371    || 600090   |    5650      || 399910   |    5884
           |  150  |1000000 | 85    | 11764    || 599122   |    6058      || 400878   |    3877
此次不分片测试表明,大并发时,集群节点的cpu负荷主要集中在数据分片的主节点上,从节点cpu消耗明显低很多,而仲裁节点cpu消耗更小,此时数据统计类似如下:
    'shard2/node2:27002,node3:27002': {
      db: 'testdb',
      collections: 1,
      views: 0,
      objects: 1399984,

可见数据落到了shard2 server,根据之前的规划,主节点是node2,从节点是node3,仲裁节点是node1,shard2的数据实际存储在了node2、3。
100-150并发时,集群的整体性能表现稳定,并没有下降,说明此时即使不使用分片,集群也能承受这个压力。
但是可以预见,一旦并发数大到一定程度,肯定会导致明显的性能下降,此时就需启用3个shard分片,可充分利用集群3个节点的io及cpu能力,把压力均衡到各个节点。

■ 测试结论

总结如上可见,100-200并发时,不管分片与否,排除虚机io不稳定情况,集群吞吐量基本可以达到每秒20000次以上,针对100万表的100万次操作,60%读40%插入,总体耗时在40秒左右,每次操作平均时延均在10ms以内,完全可以满足业务需求。
当然,如果能力需求压力较大,则务必为相关的collection设置分片策略,以充分利用多节点的处理能力。
另必须说明,如果不启用并发做大数据量操作,由于没有充分利用集群多节点多cpu多存储的处理能力,务必会导致耗时较长的情况,实际监测也能看到单线程每秒写入仅1MB-2MB,远低于大并发时的每秒20MB-30MB,以上大并发时每次操作的平均延时已经表明了集群的处理能力是没有问题的,因此研发及实施人员务必特别关注这一点,确保大量操作务必启用多并发,必要时启用多分片。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
30天前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
31 3
|
3月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
3月前
|
存储 监控 NoSQL
震撼!揭秘高可用 MongoDB 分片集群搭建的神秘魔法,开启数据存储的无敌模式!
【8月更文挑战第9天】在数字化时代,数据至关重要。MongoDB作为流行非关系型数据库,通过搭建高可用分片集群确保系统稳定性和性能。分片技术将大数据集分布于多服务器以实现水平扩展。搭建集群需准备服务器资源,配置环境,启动配置服务器、路由服务器及分片服务器,并设置分片策略。例如,对特定数据库和集合启用分片。此架构适用于高流量应用如大型电商平台,确保数据高效处理和高可用性。搭建过程需持续监控和优化,合理规划分片策略以维持系统稳定运行。
39 3
|
3月前
|
存储 运维 NoSQL
轻松上手:逐步搭建你的高可用MongoDB集群(分片)
【8月更文挑战第13天】在数据激增的背景下,传统单机数据库难以胜任。MongoDB作为流行NoSQL数据库,采用分片技术实现水平扩展,有效处理海量数据。分片将数据分散存储,提高并发处理能力和容错性,是高可用架构基石。构建MongoDB集群需理解shard、config server和router三组件协同工作原理。通过具体实例演示集群搭建流程,包括各组件的启动及配置,确保数据高可用性和系统稳定性。合理规划与实践可构建高效稳定的MongoDB集群,满足业务需求并支持未来扩展。
81 0
|
6月前
|
NoSQL 测试技术 MongoDB
【MongoDB 专栏】MongoDB 的性能基准测试与评估
【5月更文挑战第11天】MongoDB的性能基准测试对于优化至关重要,涉及数据读写速度、查询响应时间及吞吐量等指标。测试应明确目标和范围,选择合适的工具,考虑数据模型、索引、查询优化和系统配置等因素。性能评估需关注读写吞吐量、响应时间和资源利用率。通过多次测试、逐步增加负载和对比其他系统,识别性能瓶颈并持续优化。随着技术发展,测试方法和工具将持续创新,以应对复杂性能挑战。
276 3
【MongoDB 专栏】MongoDB 的性能基准测试与评估
|
6月前
|
分布式计算 Java Hadoop
HDFS 集群读写压测
在虚拟机中配置集群时,需设置每台服务器网络为百兆,以模拟实际网络环境。使用Hadoop的`TestDFSIO`进行HDFS性能测试,包括写入和读取数据。写测试中,创建11个128MB文件,平均写入速度为3.86 MB/sec,总处理数据量1408 MB,测试时间137.46秒。资源分配合理,传输速度超过单台服务器理论最大值12.5M/s,说明网络资源已充分利用。读测试主要依赖硬盘传输速率,速度快。测试完成后使用`TestDFSIO -clean`删除测试数据。
130 2
|
6月前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
101 1
|
6月前
|
监控 NoSQL 测试技术
MongoDB性能最佳实践:如何制定更有效的基准测试?
感谢你与我们一起走过这段MongoDB性能最佳实践之旅,希望你能从中获取一些有用的信息
1898 3
|
12月前
|
监控 NoSQL MongoDB
轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
mtools是一个基于Python实现的MongoDB工具集,旨在提供一系列功能,包括MongoDB日志分析、报表生成以及简易的数据库安装等。它由MongoDB原生的工程师单独发起并进行开源维护。mtools包含了一些常用的组件,如mlaunch、mlogfilter、mplotqueries和mlogvis等,可以帮助我们更方便地启动和创建MongoDB数据库。
175 1
|
6月前
|
NoSQL 测试技术 Redis
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
218 0