写点什么

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:575636
用户头像

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

关注

评论

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

VMware Tools 13.0.1.0 发布 - 客户机操作系统无缝交互必备组件

sysin

vmware

VMware ESXi 8.0U3f 发布 - 领先的裸机 Hypervisor

sysin

esxi

Golang基础笔记十二之defer、panic、error

Hunter熊

golang 后端 defer panic Error

使用 SeaTunnel 建立从 MySQL 到 Databend 的数据同步管道

Databend

埋点采集之曝光

神策技术社区

埋点 曝光埋点 大数据分析

大数据-43 Redis Lua脚本实战全解析 eval redis.call redis.pcall

武子康

Java lua redis 大数据 分布式

隐藏Bash历史记录:实用技巧与最佳方法

qife122

Linux 安全

资源利用率提升50%:Serverless 驱动国诚投顾打造智能投顾新范式

阿里巴巴云原生

阿里云 Serverless 云原生

VMware ESXi 8.0U2e 发布 - 领先的裸机 Hypervisor

sysin

esxi

更新Mac软件有哪些方法 Mac软件如何管理待更新软件

阿拉灯神丁

appstore 应用程序 Mac软件 卸载清理软件 CleanMyMac X中文

招商管理系统(源码+文档+讲解+演示)

深圳亥时科技

基于 Amazon Nova Sonic 和 MCP 构建语音交互 Agent

亚马逊云科技 (Amazon Web Services)

7月17日 2025可信数据库发展大会 邀您共探GenAI时代对数据库的挑战与需求

MatrixOrigin

Vue3响应式编程三剑客:计算属性、方法与侦听器深度实战指南

量贩潮汐·WholesaleTide

Vue 前端

线上活动丨AI 语音客服:最先跑通的 Voice Agent 场景,在面临什么真问题?丨 RTE Meetup

声网

Nacos 开源 MCP Router,加速 MCP 私有化部署

阿里巴巴云原生

阿里云 云原生 nacos MCP

VMware ESXi 9.0.0.0100 发布 - 领先的裸机 Hypervisor

sysin

esxi

2015年9月微软安全更新汇总 - MS15-094至MS15-105漏洞修复

qife122

安全更新 Windows安全

VMware Workstation 17.6.4 Pro for Windows & Linux - 领先的免费桌面虚拟化软件

sysin

Workstation

VMware Tools 12.5.3 发布 - 客户机操作系统无缝交互必备组件

sysin

vmware

酷开携AI智能体亮相ATC,重塑人车交互新范式

业界

Apache RocketMQ + “太乙” = 开源贡献新体验

阿里巴巴云原生

阿里云 云原生 Apache RocketMQ

VMware Fusion 13.6.4 for Mac - 领先的免费桌面虚拟化软件

sysin

fusion

Console 纳管 Elasticsearch 9(二):日志监控

极限实验室

elasticsearch console

枫清科技参编的《人工智能知识工程指南(1.0)》发布

Fabarta

人工智能

VMware ESXi 7.0 U3w 发布 - 领先的裸机 Hypervisor

sysin

esxi

中烟创新入选2025全国企业“人工智能+”行动创新案例TOP100

中烟创新

产品更新丨谷云科技 iPaaS 集成平台 V7.6 版本发布

谷云科技RestCloud

API网关 产品更新 集成平台 ipaas

云测试提前定位和解决问题 萤火故事屋 上架流程

万少

HarmonyOS NEXT

微软发布安全公告2887505:IE远程代码执行漏洞分析与缓解方案

qife122

网络安全 浏览器安全

时序数据库 TimechoDB V2.0.5 发布 | 新增树转表视图、模型微调等功能

Apache IoTDB

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