【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

关注

评论

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

为了 Vue 组件测试,你需要为每个事件绑定的方法加上括号吗?

OpenTiny社区

开源 Vue 前端 测试

21 天技术人写作行动营招募中

InfoQ写作社区官方

AI 写作 写作技巧 热门活动 活动预告

基于数据中台的过程看板助力光伏单晶行业管理提升

用友BIP

数据中台

观测云产品更新 | 监控、图表、服务管理、单点登录、Pipeline 等优化

观测云

数据库 pipeline 单点登录

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

TakinTalks稳定性社区

如何基于亚马逊云科技打造高性能的 SQL 向量数据库 MyScale

亚马逊云科技 (Amazon Web Services)

机器学习 深度学习 存储 Amazon EC2 向量数据库

如何充分压榨一台EC2

申屠鹏会

Colibri for Mac(原生无损音频播放器) 2.1.9永久激活版

mac

苹果mac Windows软件 Colibri 音频播放器软件

提升提测质量之研测共建 | 京东云技术团队

京东科技开发者

测试 研发 企业号11月PK榜

四载磨砺,一群青年“识瘤者”以AI助力医疗创新

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 先锋开发者云上说

SCSS 进阶之道:探索更多样式表达的可能性

伤感汤姆布利柏

Mini PCIe WiFi card SOC-QCA9880 vs. QCA9882: 802.11ac Dual-Band Wireless Chipset Sh

wifi6-yiyi

QCA9880 Mini PCIe WiFi card

TiDB x 云盛海宏丨加速精细化运营,云海零售系统的架构演进

TiDB 社区干货传送门

实践案例

学习指南:如何快速上手媒体生态一致体验开发

HarmonyOS开发者

HarmonyOS

PON网络应用场景

小魏写代码

OpenCL任务调度基础介绍 | 京东物流技术团队

京东科技开发者

gpu 编程语言 企业号11月PK榜 OpenCL

aiohttp - Python 异步 HTTP 客户端库入门教程

Liam

Python 编程 程序员 后端 aiohttp

利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

袋鼠云数栈

Kubernetes 运维 集群管理

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

Serverless Devs

云计算 Serverless AIGC 沙龙预告

你真的了解@Async吗? | 京东云技术团队

京东科技开发者

spring 注解 Async 企业号11月PK榜

如何用AB测试完善产品激励体系

字节跳动数据平台

大数据 A/B 测试 对比实验

微众银行 TiDB HTAP 和自动化运维实践

TiDB 社区干货传送门

实践案例

TiDB 在安信证券资产中心与极速交易场景的实践

TiDB 社区干货传送门

实践案例

陈长城:NineData面向Doris实时数仓集成的技术实践

NineData

数据库 实时数仓 Doris 玖章算术 NineData

MATLAB R2023b mac最新中文激活版资源

影影绰绰一往直前

在小红书认识不到一周,我和TA成为了同事

用友BIP

智能招聘

预发部署时机器总是重启两次的“简单”排查

阿里技术

部署 故障排查 排查 预发 重启

主流的第三方直播SDK对比(腾讯云、即构、阿里云、声网、网易云信、网宿)

音视频开发_AIZ

实时音视频 直播技术 SDK测试 音视频开发 直播间

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓

RestCloud

ETL

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