报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

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

关注

评论

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

KCL v0.4.4 发布!自定义 YAML Manifests 输出以及 Python SDK!

Peefy

编程语言 Configuration Kubernetes Serverless #DevOps

数据库日常实操优质文章分享(含Oracle、MySQL等) | 11月刊

墨天轮

MySQL 数据库 oracle 性能优化 SQL语句

【异常】window 10 安装node.js时遇到2502 2503错误解决方法

No8g攻城狮

nodejs Node node,js

用友降运维成本实践:OceanBase替换MySQL,实现高可用

OceanBase 数据库

数据库 oceanbase

Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案

C++后台开发

redis 中间件 后端开发 C++开发 redis缓存

IT机构哪家Java培训比较好

小谷哥

南京哪个java培训机构好?

小谷哥

揭秘倚天实例背后的硬核实力

阿里技术

云计算 云原生

StarRocks技术内幕 | 打造一款强大成熟的数据库有多难?

StarRocks

数据库·

企业即时通讯软件哪个比较好用?

BeeWorks

【精彩剧透】PyCon China 2022 邀您共赴技术Party!

PyChina

Python 开源 开发者 技术日

ClickHouse在自助行为分析场景的实践应用

转转技术团队

Clickhouse MPP 大数据分析 OLAP 场景实践

全面上新!阿里2023版(Java岗)面试突击手册,Github已标星37K

Java永远的神

程序员 架构 程序人生 后端 java面试

WorkPlus SE专业版:政企值得托付即时通讯移动办公平台

BeeWorks

2022年双碳背景下汽车行业发展洞察

易观分析

汽车 双碳

读书破万“卷”,《软件研发效能度量规范》的先进认知与开源实现

思码逸研发效能

研发效能 效能度量

大数据培训出来后就业好吗?

小谷哥

鹅厂28K程序员,不会微服务,一周就被优化了?

小小怪下士

Java 程序员 面试 微服务

前端培训学习后程序员的就业前景怎么样?

小谷哥

已经看过这本书的“眼替”,带你探索广告投放的秘密!“照着操作,果然就能有效果!”

图灵社区

流量

极客时间运维进阶训练营第七周作业

好吃不贵

用一张图说一说 ChatGPT 内部技术工作流程

非喵鱼

Java 人工智能 AI 12 月 PK 榜 ChatGPT

知识图谱与古希腊人物关系

数新网络官方账号

知识图谱

泰山众筹NFT版系统开发合约部署

薇電13242772558

智能合约

大数据培训前景怎样

小谷哥

开往春天的自动驾驶,从特斯拉和毫末智行的AI技术探索说起

脑极体

谁能通俗的解释下,什么是云服务器?

Finovy Cloud

服务器 云服务器 云渲染 云渲染农场

已帮助数万程序员找到工作的阿里巴巴面试参考指南到底有什么魅力?

Java全栈架构师

程序员 程序人生 后端 java面试 八股文

ZBC登录iZUMi Finance双挖池APY高达189%,极致通缩的典范

股市老人

随机方法性能差异

FunTester

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