行业案例| 千亿级高并发MongoDB集群在某头部金融机构中的应用及性能优化实践(上)

某头部金融机构采用MongoDB存储重要的金融数据,数据量较大,数据规模约2000亿左右,读写流量较高,峰值突破百万级/每秒。本文分享该千亿级高并发MongoDB集群的踩坑经验及性能优化实践,通过本文可以了解如下信息:

  • 如何对海量MongoDB集群进行性能瓶颈定位?

  • 千亿规模集群常用踩坑点有哪些?

  • 如何对高并发大数据量MongoDB集群进行性能优化?

  • 集群监控信息缺失,如何分析集群抖动问题?

  • 如何像原厂工程师一样借助diagnose.data(not human-readable)分析内核问题?

业务背景及MongoDB FTDC诊断介绍

1业务背景

该MongoDB集群采用多分片架构部署,业务不定期长时间高并发读写,该集群业务背景总结如下:

  • 数据量大,该集群总数据量突破千亿规模

  • 集群最大表总chunks数约500万

  • 长时间高并发读写

  • 一致性要求较高,读写全走主节点

  • 高峰期持续性读写qps百万/秒

  • 单分片峰值流量接近20万/秒

  • 内核版本:3.6.3版本

  • 非云上集群

  • 除了节点日志,详细监控数据因历史原因缺失,无MongoDB常用监控指标信息

随着时间推移,集群数据规模超过千亿,集群遇到了一些疑难问题,如主从切换、节点异常挂掉、节点数秒卡顿、切主后新主数十分钟不可用等问题,下面章节将逐步分享这些问题,并给出对应的优化方法。

鉴于篇幅,本文无法分享完该案例遇到的所有问题及其优化方法,因此《千亿级高并发MongoDB集群在某头部金融机构中的应用及性能优化实践(下)》中将继续分享本案例遗留的性能优化方法,同时分享分布式数据库核心路由模块原理,并给出腾讯云数据库在最新MongoDB版本中对路由刷新模块所做的优化。

2MongoDB FTDC诊断数据简介

2.1 Full Time Diagnostic Data Capture

To facilitate analysis of the MongoDB server behavior by MongoDB Inc. engineers, mongod and mongos processes include a Full Time Diagnostic Data Collection (FTDC) mechanism. FTDC data files are compressed, are not human-readable, and inherit the same file access permissions as the MongoDB data files. Only users with access to FTDC data files can transmit the FTDC data. MongoDB Inc. engineers cannot access FTDC data independent of system owners or operators. MongoDB processes run with FTDC on by default. For more information on MongoDB Support options, visit Getting Started With MongoDB Support.

详见MongoDb官方FTDC实时诊断说明,地址:

MongoDB Performance — MongoDB Manual

从上面可以看出,diagnose.data是为了官方工程师分析各种问题引入的功能。FTDC数据文件是bson+压缩+私有协议,不是直观可读的,继承了MongoDB数据文件相同的文件访问权限,默认情况下所有mongo节点开启ftdc功能。

2.2 diagnose.data目录结构

如下所示:

root@:/data1/xxxx/xxxx/db# ls  TencetDTSData  WiredTiger.lock  WiredTiger.wt  _mdb_catalog.wt  area  diagnostic.data  local  mongod.lock  mongoshake  storage.bson  WiredTiger   WiredTiger.turtle  WiredTigerLAS.wt  admin  config  journal   maicai  mongod.pid  sizeStorer.wt  test  root@:/data1/xxxx/xxxx/db#   root@:/data1/xxxx/xxxx/db#   root@:/data1/xxxx/xxxx/db#   root@:/data1/xxxx/xxxx/db#

diagnostic.data目录中按照时间记录各种不同诊断信息到metrics文件,除了metrics.interim文件,其他文件内容大约10M左右。

root@:/data1/xxxx/xxx/db/diagnostic.data#   root@:/data1/xxxx/xxxx/db/diagnostic.data# ls  metrics.xxxx-12-27T02-28-58Z-00000  metrics.xxxx-12-28T14-33-57Z-00000  metrics.xxxx-12-30T04-28-57Z-00000  metrics.xxxx-12-31T17-08-57Z-00000  metrics.xxxx-01-02T05-28-57Z-00000  metrics.xxxx-12-27T09-18-58Z-00000  metrics.xxxx-12-28T23-13-57Z-00000  metrics.xxxx-12-30T11-23-57Z-00000  metrics.xxxx-01-01T00-53-57Z-00000  metrics.interim  metrics.xxxx-12-27T16-28-57Z-00000  metrics.xxxx-12-29T06-08-57Z-00000  metrics.xxxx-12-30T19-18-57Z-00000  metrics.xxxx-01-01T07-23-57Z-00000  metrics.xxxx-12-28T00-48-57Z-00000  metrics.xxxx-12-29T12-58-57Z-00000  metrics.xxxx-12-31T02-58-57Z-00000  metrics.xxxx-01-01T14-18-57Z-00000  metrics.xxxx-12-28T07-38-57Z-00000  metrics.xxxx-12-29T21-18-57Z-00000  metrics.xxxx-12-31T09-48-57Z-00000  metrics.xxxx-01-01T22-38-57Z-00000  root@:/data1/xxx/xxxx/db/diagnostic.data#   root@:/data1/xxxx/xxxx/db/diagnostic.data#

集群踩坑过程及优化方法

3memlock不足引起的节点崩掉及解决办法

该集群在运行过程中,出现“Failed to mlock: Cannot allocate memory”,mongod进程崩掉,该问题和jira中的一下bug一模一样:

1. SERVER-29086

链接如下:

[SERVER-29086] Mongod crashed on mlock - MongoDB Jira

2. SERVER-28997

链接如下:

[SERVER-28997] Limit SCRAM-SHA-1 Cache's use of Secure Memory - MongoDB Jira

触发该问题的日志信息如下:

Xxxx 12 22:51:28.891 F -        [conn7625] Failed to mlock: Cannot allocate memory  Xxxx 12 22:51:28.891 F -        [conn7625] Fatal Assertion 28832 at src/mongo/base/secure_allocator.cpp 246  Xxxx 12 22:51:28.891 F -        [conn7625]  ***aborting after fassert() failure  Xxxx 12 22:51:28.918 F -        [conn7625] Got signal: 6 (Aborted).  ..........  ----- BEGIN BACKTRACE -----  {"backtrace":   libc.so.6(abort+0x148) [0x7fccf1b898c8]   mongod(_ZN5mongo32fassertFailedNoTraceWithLocationEiPKcj+0x0) [0x7fccf3b33ed2]   mongod(_ZN5mongo24secure_allocator_details8allocateEmm+0x59D) [0x7fccf51d6d6d]   mongod(_ZN5mongo31SaslSCRAMServerConversationImplINS_8SHABlockINS_15SHA1BlockTraitsEEEE26initAndValidateCredentialsEv+0x167) [0x7fccf4148ca7]   mongod(_ZN5mongo27SaslSCRAMServerConversation10_firstStepENS_10StringDataEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x959) [0x7fccf414dcd9]   mongod(_ZN5mongo27SaslSCRAMServerConversation4stepENS_10StringDataEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x9B) [0x7fccf414eecb]   mongod(_ZN5mongo31NativeSaslAuthenticationSession4stepENS_10StringDataEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x3C) [0x7fccf414731c]   mongod(+0xF355CD) [0x7fccf41405cd]   mongod(+0xF37D3A) [0x7fccf4142d3a]   mongod(_ZN5mongo12BasicCommand11enhancedRunEPNS_16OperationContextERKNS_12OpMsgRequestERNS_14BSONObjBuilderE+0x76) [0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值