0

现在我有两个分片:shard3(16g),shard4(15g) 和三台机器:像这样部署:10.10.10.5:(mongoS,configureserver,shard3 primary,shard4 primary) 10.10.10.6:(mongoS,configureserver,shard3 secondary) ,shard4 secondary) 10.10.10.7:(mongoS,configureserver,shard3 arbitor,shard4 arbitor)

现在我想做一个性能测试(关于添加新分片),我知道我不能使用生产环境进行测试,因为这会影响生产性能,所以我想将所有数据复制到我测试的三台机器上: 20.20.20.5,20.20.20.6 和 20.20.20.7,我读了手册,但找不到更好的方法,所以亲爱的,请给我一个建议。

顺便问两个小问题:第一:和我的生产环境一样,如何将仲裁节点改为二级,即我想将10.10.10.7改为二级分片,因为我想10.7和10.6分担读取压力。第二:如何指示Mongos读取主节点但辅助节点,您知道mongoS在主节点上写入而在辅助节点上读取,但我想在主节点上读写以立即获取最新数据。谢谢提前杰克

4

2 回答 2

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。

于 2012-09-04T22:37:50.110 回答
0

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

一般来说,我们尽量不鼓励偶数副本集,所以我会让仲裁器离线并坚持使用你的 3 个副本集。这是因为你真的没有从拥有仲裁者中赢得任何东西。如果 2 个节点以任何一种方式失败,您都没有多数,并且副本集将变为只读。如果一个节点出现故障,您仍然可以进行写入。仲裁器对偶数集没有任何帮助。

当您尝试执行这些仅转到一个辅助节点的查询时,新的辅助节点是否在数据方面都赶上了?如果它处于“恢复”状态,那么读取可能还没有到达它,因为它还没有复制所有数据。除此之外,还有一些方法可以指定阅读偏好。

关于所有不同的阅读偏好以及如何使用它们的文档可以在这里找到:http: //docs.mongodb.org/manual/applications/replication/#read-preference

于 2012-09-07T17:28:39.800 回答