当我们在Meteor上开发贪婪的实时监控应用程序时,我们已经达到了单个MongoDB实例的极限。
我们现在将DB迁移到一个有2个碎片的碎片集群中,但我们可能会扩展到6个碎片。(我有2个带有28台服务器的BladeE机箱)
我们如何在启用分片的mongo-db集群上配置Meteor Oplog Tailing
谢谢,
现在有一个好消息:)您可以通过Meteor轻松使用分片MongoDB数据库,只需调整一下即可
尽管Meteor核心开发团队还没有在他们的路线图中添加对分片的Oplog Tailing支持,但解决方法非常简单。你只需添加这两个Meteor包:cultofcoders:redis-oplog
和disable-oplog
,添加另一个Redis
服务器,稍微调整一下代码,就可以开始了。
Oplog Tailing之所以不能使用分片MongoDB数据库,只是因为核心开发团队还没有计划支持它。事实上,现在可以添加对分片数据库的支持了。如果你添加了一堆新记录,并用可定制的游标从所有碎片中读取Oplog,你会注意到MognoDB平衡器会将数据从shard01
移动到shard02
,其中记录id 0001
从shard01
中删除并添加到shard02
中。这种情况似乎让Meteor感到困惑,因为它不知道记录实际上是由用户还是由MongoDB平衡器删除/添加的。然而,有一种方法可以知道用户或MongoDB平衡器是否删除/添加了数据,因为我们可以通过fromMigrate
标志进行区分——在MongoDB官方网站博客上了解更多信息——所以我们现在可以做的是等待核心开发团队的更新,或者用一些技巧解决问题。
到目前为止,我发现的最有前途的解决方案是名为cultofcoders:redis-oplog
的Meteor软件包。它是开源的,可以在Github上获得(请查看他们的存储库以获取完整的文档。它非常容易使用)。这个包背后的想法是使用另一个Redis
服务器作为pub
和sub
系统——它不存储任何数据。它只适用于pub
和sub
,而不是严重依赖Oplog的Meteor。这样,我们就不必担心Meteor还不支持的分片数据库的Oplog了。CCD_ 16是成熟的,已被许多大公司用于生产。它与Meteor完全兼容,您不必更改Meteor的使用方式。但是,在更新集合的数据时,为了发布对Redis
的更改,您必须对代码进行一些调整,然后包cultofcoders:redis-oplog
将处理其余内容。
Meteor似乎还不支持大于1个碎片的分片mongoDB设置:https://forums.meteor.com/t/mongodb-sharding-and-livequery/3712