2012-09-04 46 views
0

现在我有两个分片:shard3(16g),shard4(15g)和三台机器: 部署如下: 10.10.10.5:(mongoS, configureserver,shard3小学,shard4主) 10.10.10.6:(mongoS,configureserver,shard3二次,二次shard4) 10.10.10.7:(mongoS,configureserver,shard3 arbitor,shard4 arbitor)MongoDb:有没有更好的方法将生产环境数据复制到测试环境

现在我想打一个性能测试(关于添加新的碎片),我知道我不能使用生产环境进行测试,因为这会影响生产性能,所以我想将所有数据复制到测试三台机器:20.20.20.5,20.20。 20.6和20.20.20.7,我读了马但是找不到更好的方式,所以亲爱的家伙,请你给我一个建议。顺便提一下两个小问题:第一:像我的生产环境一样,我如何将arbitor节点更改为secondary,即我想将10.10.10.7更改为辅助碎片,因为我想要10.7分享读取压力10.6。 第二:如何指示Mongo读取主节点但辅助节点,您知道mongoS在主节点上写入时在辅助节点上读取,但我希望在主节点上读取和写入以便立即获取最新数据。 谢谢inadvance 插孔

回答

1

你应该看看下面的文档:http://www.mongodb.org/display/DOCS/Import+Export+Tools。你可以使用mongoexport和mongoimport来做你想做的事情。或者你也可以使用mongodump & mongorestore。这将允许您备份数据并将其恢复到测试环境。

第一个问题:您无法将仲裁者“转换”为辅助者。这样做的唯一方法是向副本集添加一个新节点,然后取下仲裁器,然后将其从副本集中删除。您可以使用现有副本集节点上的rs.add()将新的mongod添加到副本集。你这样做是为了避免停机。如果你不介意停机时间,那么订单并不重要。有关将节点添加到副本集的文档可以在此处找到:http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

此外,如果您正在执行readScaling并使用SlaveOK(),请务必记住,如果复制从主节点延迟到任一节点次级,你有可能阅读陈旧的数据。如果这对您的应用程序而言可以接受,那么您应该认识到,如果您同时查询副本集中的两个节点,您可以根据复制滞后时间为同一查询读取两个不同的值。

第二个问题:如果您想始终只从主文件读取/写入,则不应使用SlaveOK运行。 SlaveOK关闭是默认设置,但是如果您已经打开它,只需再次调用false即可。

+0

嗨ChadsworthIII,非常感谢您的帮助〜 我怎样才能最大限度地减少生产的冲击,我不影响生产节点。 – Jack

+0

如果转储辅助节点比转储主节点更好 – Jack

+1

使用--host运行mongoExport并指定辅助节点。这个缺点是,如果你有复制滞后,你可能不会转储最新的数据。 – ChadsworthIII

0

只要您的主副本和副本集的大多数副本集都是可写的。所以很自然,只要主服务器没有超载,并且您没有关闭4个节点中的2个,您就可以写入主服务器。它只会复制到大部分已启动的节点。

一般来说,我们试图阻止偶数副本集,所以我会让仲裁者脱机并坚持你的3副本集。这是因为你没有赢得仲裁者的任何胜利。如果两个节点出现故障,您不会占多数,副本集将变为只读。如果一个节点出现故障,您仍然可以写入。仲裁人在偶数组中无助于任何事情。

当您试图执行只有一个辅助的这些查询时,新的辅助是否被数据查找?如果它处于“恢复”状态,那么读取可能没有进行,因为它没有复制所有的数据。除此之外,还可以指定读取首选项。在所有不同的读偏好以及如何使用它们

文档可以在这里找到:http://docs.mongodb.org/manual/applications/replication/#read-preference

相关问题