写点什么

Bugsnag 的 MongoDB 分片集群使用经验

  • 2014-10-09
  • 本文字数:1271 字

    阅读完需:约 4 分钟

Bugsnag 是一家为移动应用开发者提供实时的 Bug 追踪及检测服务的创业公司,Bugsnag 已经使用 MongoDB 存储超过 TB 级的文档数据。从 Bugsnag 的第一个版本开始他们就使用 MongoDB 存储业务数据。近日,Bugsnag 的工程师 Simon Maynard 在博客上分享了他们的MongoDB 分片集群经验,并开源了几个他们常使用的脚本

带标签的分片(Tag Aware Sharding)

带标签的分片是MongoDB 2.2 版本中引入的新特性,此特性支持人为控制数据的分片方式,从而使数据存储到合适的分片节点上。具体的做法是通过对分片节点打tag 标识,再将sharding key 按范围对应到这些标识上。在Bugsnag 中,每个页面的加载都会涉及到用户集合,比如查询用户是否登录,当应用向主分片上写入大量数据时,所有的用户请求都可能因此变得很慢。为了解决这个问题,Bugsnag 对大的分片中的所有分片集合添加了一个标签,这样用户集合就可以存储到一台小型机器上,接下来就可以在内存中直接存取用户数据。关于带标签的分片特性具体如何使用读者也可以参考 Asya 的这篇博客

空的数据块

在删除旧的数据时,分片中会出现空的数据块,这样会导致分片不平衡。平衡分片的算法仅仅只是调整分片中数据块的数量,忽略了数据块的大小。在 MongoDB 2.6 中,新增了一个 mergeChunks 命令用来将空的数据块合并到连续范围的数据块上,但是这个命令并不可以自动执行,所以 Bugsnag 编写了一个脚本,以依次检查数据块,并自动合并空的数据块。

大的数据块

大的数据块是指数据块的大小超过配置大小,Bugsnag 编写了一个脚本用来发现并调整大数据块的大小。由于需要连接mongod 和mongo 实例,所以使用了MongoDB 的Ruby 接口Mongoid。脚本会将大的数据块分割,以保证集群中数据集合分布均衡。

孤立文档(Orphaned documents)

在正常情况下,系统中不会有孤立文档。不过,块迁移过程中的一些失败情况可能会留下孤立文档。孤立文档可以被安全删除,MongoDB 2.6 中可以使用 cleanupOrphaned 命令从分片中删除孤立文档。关于孤立文档的更多内容读者可以参考 MongoDB 工程师的这篇博文

MoveChunk 目录

MoveChunk 目录中的文件是进行分片均衡操作时产生的临时文件,操作完成后,这些文件就可以被删除。Bugsnag 使用定时任务来定期清空该目录,MongoDB 也支持关闭此功能,读者可以自行测试。

监控分片环境

  1. Shell 命令
  • db.collection.getShardDistribution() :查看分片集群中集合是如何分布的。可以通过此命令确定分片上的某个集合相比于其它分片是何时开始突然变大的。
  • db.stats() :打印每个分片下的数据库状态,可以通过此命令跟踪数据大小。可以传入 1024*1024*1024 参数来以 GB 为单位显示数据大小。
  • sh.status() :显示整个集群中数据块的分布情况,可以用来检查数据是否分布均衡。
  1. Mongostat
    Mongostat 是 MongoDB 自带的状态检测工具,当 MongoDB 集群出现问题时,可以运行 mongostat –discover 来检查集群中各个 mongos 机器的性能指标。

作者最后总结到运行一个 MongoDB 分片集群并不难,但是在运行过程中也不时地会有一些小的问题出现。在 Bugsnag 的博客中有很多 MongoDB 的博文,读者可以自行学习。

2014-10-09 04:575760
用户头像

发布了 219 篇内容, 共 151.2 次阅读, 收获喜欢 195 次。

关注

评论

发布
暂无评论
发现更多内容

PostgreSQL的数据集成之路:ETL+CDC实现实时多源聚合

谷云科技RestCloud

postgresql 数据同步 ETL 数据集成 CDC

AirBattery - 在Mac上实时监控所有苹果设备电量

qife122

macos 苹果生态

ETLCloud-重塑制造业数据处理新范式

谷云科技RestCloud

数据处理 数据同步 ETL 数据集成 CDC

混沌工程的十年:从流行概念到可靠性基石

焦振清

混沌工程

语音 AI 初创公司 Smallest.ai 融资 800 万美元;Qwen3-ASR-Toolkit:转录任意时长音视频丨日报

RTE开发者社区

9月 | 塞讯模拟攻击库更新汇总

塞讯科技

有了AI叠buff,低代码行业在沉寂了一段时间后,好似又活过来了?

优秀

低代码 AI 人工智能

AI Compass前沿速览:DeepSeek-V3.2、Sora 2、Imagine v0.9、LONGLIVE–英伟达、xLLM、OpenAgents

汀丶人工智能

从执行到决策:AI加持下,MES的下一站是什么?

万界星空科技

数字化转型 智能制造 mes 万界星空科技mes 智能化MES

我的网站被攻击了!

王磊

云上AI推理平台全掌握(6):大规模EP专家并行

阿里云大数据AI技术

金瀛花全国客服电话全面升级:金瀛花24小时贴心服务守护每一份信任

新消费日报

【IEEE出版|已连续6届EI稳定快速检索】第七届机器学习、大数据与商务智能国际会议(MLBDBI 2025)

搞科研的小刘

机器学习 大数据 商务智能

滥用ACL权限覆盖其他用户S3存储桶中的文件/视频

qife122

aws s3 ACL权限

从 Wonderware 到 TDengine:大理卷烟厂的国产化转型之路

TDengine

tdengine 时序数据库

使用eBPF技术保护FastAPI安全

qife122

网络安全 ebpf

开发者注意了 DevEco Studio 6 Release 开放了,但是我劝你慎重升级6应用

万少

HarmonyOS

现在流行来中国看赛博朋克

脑极体

AI

AI诈骗,围猎空巢老人

脑极体

AI

第六届医学人工智能国际学术会议(ISAIMS 2025)

搞科研的小刘

国际学术会议 医学人工智能

LED大屏幕交货周期一般要多久?

Dylan

LED LED display LED显示屏 LED屏幕

智能制造 柔性制造经验总结(4)

万里无云万里天

自动化 智能制造 柔性制造

一套Avantis做全球市场:加密、外汇、商品、指数都行

股市老人

Linux环境下 java程序提交spark任务到Yarn报错

刘大猫

人工智能 云计算 算法 物联网 大模型

AI心理测评档案管理系统:帮机构跳出“档案乱、分析慢”的坑

上海拔俗

你想轻松调用全球主流AI模型吗?快来加入Sight AI

SightAI

大模型 AI‘’ api Token

Qoder 负责人揭秘:Qoder 产品背后的思考与未来发展

阿里巴巴云原生

阿里云 云原生 Qoder

为什么大家都爱用微擎?这几点真的太香了

微擎应用市场

工业管理 项目管理经验总结(20)

万里无云万里天

项目管理 工业 工厂运维

计算机网络技术全面解析:从基础架构到未来趋势

qife122

网络协议 网络基础

Google+禁用“一次性抓取100条搜索结果”,SEO迎来变革?

掘金安东尼

Bugsnag的MongoDB分片集群使用经验_DevOps & 平台工程_小盖_InfoQ精选文章