Bugsnag的MongoDB分片集群使用经验

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目录

http://c.tieba.baidu.com/p/3354370368

http://c.tieba.baidu.com/p/3354534701

http://c.tieba.baidu.com/p/3354547666

http://c.tieba.baidu.com/p/3354546842

http://c.tieba.baidu.com/p/3354527799

http://c.tieba.baidu.com/p/3354545064

http://c.tieba.baidu.com/p/3354537993

http://c.tieba.baidu.com/p/3354536371

http://c.tieba.baidu.com/p/3354566167

http://c.tieba.baidu.com/p/3354563874

http://c.tieba.baidu.com/p/3354559790

http://c.tieba.baidu.com/p/3354558402

http://c.tieba.baidu.com/p/3354557382

http://c.tieba.baidu.com/p/3354575677

http://c.tieba.baidu.com/p/3354574673

http://c.tieba.baidu.com/p/3354329758

http://c.tieba.baidu.com/p/3354324754

http://c.tieba.baidu.com/p/3354328957

http://c.tieba.baidu.com/p/3354358425

http://c.tieba.baidu.com/p/3354357165

http://c.tieba.baidu.com/p/3354354914

http://c.tieba.baidu.com/p/3354351963

http://c.tieba.baidu.com/p/3354339313

http://c.tieba.baidu.com/p/3354365196

http://c.tieba.baidu.com/p/3354516479

http://c.tieba.baidu.com/p/3354363645

http://c.tieba.baidu.com/p/3354511292

http://c.tieba.baidu.com/p/3354362725

http://c.tieba.baidu.com/p/3354493596

http://c.tieba.baidu.com/p/3354386728

http://c.tieba.baidu.com/p/3354247248

http://c.tieba.baidu.com/p/3354246081

http://c.tieba.baidu.com/p/3354244736

http://c.tieba.baidu.com/p/3354243829

http://c.tieba.baidu.com/p/3354255255

http://c.tieba.baidu.com/p/3354251795

http://c.tieba.baidu.com/p/3354251040

http://c.tieba.baidu.com/p/3354250060

http://c.tieba.baidu.com/p/3354289895

http://c.tieba.baidu.com/p/3354319537

http://c.tieba.baidu.com/p/3354259808

http://c.tieba.baidu.com/p/3354313871

http://c.tieba.baidu.com/p/3354309420

http://c.tieba.baidu.com/p/3354300027

http://c.tieba.baidu.com/p/3354297069

http://c.tieba.baidu.com/p/3354195479

http://c.tieba.baidu.com/p/3354206526

http://c.tieba.baidu.com/p/3354204491

http://c.tieba.baidu.com/p/3354202763

http://c.tieba.baidu.com/p/3354200335

http://c.tieba.baidu.com/p/3354196351

http://c.tieba.baidu.com/p/3354226726

http://c.tieba.baidu.com/p/3354218172

http://c.tieba.baidu.com/p/3354215444

http://c.tieba.baidu.com/p/3354213289

http://c.tieba.baidu.com/p/3354209995

http://c.tieba.baidu.com/p/3354239543

http://c.tieba.baidu.com/p/3354238270

http://c.tieba.baidu.com/p/3354236627

http://c.tieba.baidu.com/p/3354234679

http://c.tieba.baidu.com/p/3354135902

http://c.tieba.baidu.com/p/3354133928

http://c.tieba.baidu.com/p/3354150505

http://c.tieba.baidu.com/p/3354149639

http://c.tieba.baidu.com/p/3354147111

http://c.tieba.baidu.com/p/3354145982

http://c.tieba.baidu.com/p/3354183940

http://c.tieba.baidu.com/p/3354182721

http://c.tieba.baidu.com/p/3354181977

http://c.tieba.baidu.com/p/3354165876

http://c.tieba.baidu.com/p/3354193677

http://c.tieba.baidu.com/p/3354191318

http://c.tieba.baidu.com/p/3354190267

http://c.tieba.baidu.com/p/3354188371

http://c.tieba.baidu.com/p/3354187491

http://c.tieba.baidu.com/p/3354071718

http://c.tieba.baidu.com/p/3354068213

http://c.tieba.baidu.com/p/3354066474

http://c.tieba.baidu.com/p/3354065260

http://c.tieba.baidu.com/p/3354081216

http://c.tieba.baidu.com/p/3354076242

http://c.tieba.baidu.com/p/3354075326

http://c.tieba.baidu.com/p/3354070260

http://c.tieba.baidu.com/p/3354125762

http://c.tieba.baidu.com/p/3354116024

http://c.tieba.baidu.com/p/3354112949

http://c.tieba.baidu.com/p/3354111925

http://c.tieba.baidu.com/p/3354083858

http://c.tieba.baidu.com/p/3354143274

http://c.tieba.baidu.com/p/3354138548

http://c.tieba.baidu.com/p/3353995244

http://c.tieba.baidu.com/p/3353983804

http://c.tieba.baidu.com/p/3354033869

http://c.tieba.baidu.com/p/3354031872

http://c.tieba.baidu.com/p/3354030072

http://c.tieba.baidu.com/p/3354029118

http://c.tieba.baidu.com/p/3354017868

http://c.tieba.baidu.com/p/3354051512

http://c.tieba.baidu.com/p/3354047829

http://c.tieba.baidu.com/p/3354045861

http://c.tieba.baidu.com/p/3354045354

http://c.tieba.baidu.com/p/3354062282

http://c.tieba.baidu.com/p/3354060763

http://c.tieba.baidu.com/p/3354055056

http://c.tieba.baidu.com/p/3354054049

http://c.tieba.baidu.com/p/3353927623

http://c.tieba.baidu.com/p/3353940240

http://c.tieba.baidu.com/p/3353938328

http://c.tieba.baidu.com/p/3353936543

http://c.tieba.baidu.com/p/3353963286

http://c.tieba.baidu.com/p/3353962877

http://c.tieba.baidu.com/p/3353947445

http://c.tieba.baidu.com/p/3353945576

http://c.tieba.baidu.com/p/3m/p/3353932494

http://c.tieba.baidu.com/p/3353931175

http://c.tieba.baidu.com/p/3353929436

http://c.tieba.baidu.com/p/3348228581

http://c.tieba.baidu.com/p/3353836792

http://c.tieba.baidu.com/p/3348038141

http://c.tieba.baidu.com/p/3353721933

http://c.tieba.baidu.com/p/3353832562

http://c.tieba.baidu.com/p/3348036152

http://c.tieba.baidu.com/p/3353725953

http://c.tieba.baidu.com/p/3353809347

http://c.tieba.baidu.com/p/3348033983

http://c.tieba.baidu.com/p/3353634819

http://c.tieba.baidu.com/p/3348030767

http://c.tieba.baidu.com/p/3347963870

http://c.tieba.baidu.com/p/3353894141

http://c.tieba.baidu.com/p/3353882414

http://c.tieba.baidu.com/p/3353892081

http://c.tieba.baidu.com/p/3353871521

http://c.tieba.baidu.com/p/3353623846

http://c.tieba.baidu.com/p/3353627803

http://c.tieba.baidu.com/p/3353840487

http://c.tieba.baidu.com/p/3353632403353944480

http://c.tieba.baidu.com/p/3353973983

http://c.tieba.baidu.com/p/3353971215

http://c.tieba.baidu.com/p/3353969648

http://c.tieba.baidu.com/p/3353967089

http://c.tieba.baidu.com/p/3354012796

http://c.tieba.baidu.com/p/3353997102

http://c.tieba.baidu.com/p/3353890191

http://c.tieba.baidu.com/p/3353905961

http://c.tieba.baidu.com/p/3353899997

http://c.tieba.baidu.com/p/3353899117

http://c.tieba.baidu.com/p/3353897901

http://c.tieba.baidu.com/p/3353912601

http://c.tieba.baidu.com/p/3353911106

http://c.tieba.baidu.com/p/3353909641

http://c.tieba.baidu.com/p/3353908731

http://c.tieba.baidu.com/p/3353918532

http://c.tieba.baidu.com/p/3353916671

http://c.tieba.baidu.com/p/3353915532

http://c.tieba.baidu.co

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

监控分片环境

  1. Shell命令

    • db.collection.getShardDistribution():查看分片集群中集合是如何分布的。可以通过此命令确定分片上的某个集合相比于其它分片是何时开始突然变大的。
    • db.stats():打印每个分片下的数据库状态,可以通过此命令跟踪数据大小。可以传入1024*1024*1024参数来以GB为单位显示数据大小。
    • sh.status():显示整个集群中数据块的分布情况,可以用来检查数据是否分布均衡。
  2. Mongostat 

    Mongostat是MongoDB自带的状态检测工具,当MongoDB集群出现问题时,可以运行mongostat –discover来检查集群中各个mongos机器的性能指标。

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

时间: 2024-10-07 16:13:49

Bugsnag的MongoDB分片集群使用经验的相关文章

使用HAProxy作为MongoDB分片集群mongos负载均衡

MongoDB分片集群的入口mongos自身没有failover机制.官方建议是将mongos和应用服务器部署在一起,多个应用服务器就要部署多个mongos实例,这样很是不方便.还可以使用LVS或者HAProxy来实现多个mongos的failover机制,但是一定要注意使用client affinity即客户端关联特性. global     chroot      /data/app_platform/haproxy/share/      log         127.0.0.1 loc

mongodb分片集群突然停电造成一些错误,分片无法启动

今天突然停电使mongodb分片集群造成这种错误,暂时不知道怎么解决,如果 有人知道请回复我 ,现在把记录下来,等后期处理. Fri Aug  8 10:49:52.165 [initandlisten] connection accepted from 172.16.0.115:59542 #2 (2 connections now open)Fri Aug  8 10:49:52.954 [initandlisten] connection accepted from 172.16.0.10

MongoDB 分片集群实战

背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁盘,此种方法虽然成本很高,但是实现比较简单,维护起来也比较方便. 水平扩展:通过使用更多配置一般的服务器来共同承担工作负载,此种方法很灵活,可以根据工作负载的大小动态增减服务器的数量,但是实现比较复杂,得有专门的人员来运维. Databases for MongoDB 试用 IBM Cloud 上提

mongoDB(三) mongoDB分片集群

mongoDB分片集群 介绍 解决数据分片,防止数据丢失生产环境需要擦用分片+副本集的部署方式 组成部分 route: 提供入口,不存储数据 configserver: 存储元数据信息,建议使用副本集 shardserver: 数据存储服务,存储真正数据, 也许要使用副本集 依赖关系 当数据插入时,需要从configsrv知道数据要插入哪个shardsrv分片 当用户获取数据时,需要从configsrv知道数据存储在哪个shardsrv分片 集群搭建 使用同一份mongodb二进制文件 修改对应

MongoDB分片集群配置实例

环境: windows操作系统 mongodb 3.4社区版 目标: 配置包含两个分片一个配置服务器的分片集群.其中每一个分片和一个配置服务器都被配置为一个单独的副本集.如下图所示: 注:每一个分片都应该被配置在一个单独的服务器设备上.方便起见,本文在同一台机器通过不同端口模拟不同服务器上的组件,实现分片集群的配置.(生产环境的配置与此相同,只需使用自己的主机名.端口.路径等即可). 下图为本文配置的分片集群架构,其中的任意节点(副本集节点和分片节点)都是可扩展的. 1.分别为config se

[ MongoDB ] 分片集群及测试

分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 为什么使用分片? 1. 复制所有的写入操作到主节点    2. 延迟的敏感数据会在主节点查询    3. 单个副本集限制在12个节点    4. 当请求量巨大时会出现内存不足.    5. 本地磁盘不足    6. 垂

备份和还原MongoDB分片集群数据

1.使用mongodump备份小量分片集群数据 如果一个分片集群的数据集比较小,可以直接使用mongodump连接到mongos实例进行数据备份.默认情况下,mongodump到非primary的节点进行数据查询. 如: mongodump --host 192.168.100.200 --port 28018 -d taiwan_game1 -o . mongorestore --host 192.168.100.200 --port 28018 taiwan_game1 需要注意的是如果使用

MongoDB分片集群

Mongodb Sharding分片集群 OS                      CentOS6.5 192.168.3.100 server1 configport=27017 192.168.3.100 server1 mongosport=27018 192.168.3.101 node1 mongodport=27018 192.168.3.102 node2 mongodport=27018 #CentOS安装mongo软件包 yum -y install mongodb mo

MongoDB分片集群还原

从mongodb 3.0开始,mongorestore还原的时候,需要一个运行着的实例.早期的版本没有这个要求. 1.为每个分片部署一个复制集 (1)复制集中的每个成员启动一个mongod mongod --dbpath /mdb/data/s11 --logpath /mdb/mlog/s11.log --fork --port 27017 --replSet s1 --smallfiles & mongod --dbpath /mdb/data/s12 --logpath /mdb/mlog