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也支持关闭此功能,读者可以自行测试。
监控分片环境
- Shell命令
- db.collection.getShardDistribution():查看分片集群中集合是如何分布的。可以通过此命令确定分片上的某个集合相比于其它分片是何时开始突然变大的。
- db.stats():打印每个分片下的数据库状态,可以通过此命令跟踪数据大小。可以传入1024*1024*1024参数来以GB为单位显示数据大小。
- sh.status():显示整个集群中数据块的分布情况,可以用来检查数据是否分布均衡。
- Mongostat
Mongostat是MongoDB自带的状态检测工具,当MongoDB集群出现问题时,可以运行mongostat –discover来检查集群中各个mongos机器的性能指标。
作者最后总结到运行一个MongoDB分片集群并不难,但是在运行过程中也不时地会有一些小的问题出现。在Bugsnag的博客中有很多MongoDB的博文,读者可以自行学习。