9

对于扩展/故障转移,mongodb 使用“副本集”,其中有一个主服务器和一个或多个辅助服务器。Primary 用于写入。次要用于读取。这几乎是 SQL 编程中使用的主从模式。如果主节点出现故障,辅助节点集群中的辅助节点将取而代之。因此,水平扩展和故障转移的问题得到了解决。但是,这似乎不是一个允许分片的解决方案。一个真正的分片只保存整个数据的一部分,所以如果副本集中的辅助是分片,当它没有服务请求所需的所有数据时,它怎么能成为主分片?

我们不是必须为每个分片都有一个副本集吗?

这显然是一个初学者的问题,因此视觉或以其他方式说明如何完成的链接将很有帮助。

4

3 回答 3

6

您的假设是正确的,每个分片都包含一个单独的副本集。当有写入请求进来时,MongoS 会根据 shard key 为它找到正确的 shard,并将数据写入该 shard 中包含的副本集的 Primary。这会导致写入扩展,因为(精心选择的)分片键应该将写入分布在所有分片上。

于 2013-02-06T21:57:39.423 回答
1

分片是主要和次要(副本集)的总和,所以是的,您必须在每个分片中都有一个副本集。

整个数据的一部分保存在主数据库中,并与辅助数据库共享以保持一致性。如果主节点出现故障,辅助节点将被选为新的主节点,并具有与其前任相同的数据以立即开始服务。这意味着分片数据仍然存在并且没有丢失。

于 2013-02-06T21:59:09.207 回答
0

您通常会将各个分片映射到单独的副本集。有关MongoDB 分片的概述,请参阅http://docs.mongodb.org/manual/core/sharded-clusters/ 。

于 2013-02-06T21:50:51.157 回答