【问题标题】:MongoDB replication factorsMongoDB 复制因子
【发布时间】:2017-05-04 21:08:39
【问题描述】:

我是 Mongo 的新手,使用 Cassandra 已经有一段时间了。我没有从 Mongo 的文档中找到任何明确的答案。我下面的问题都是密切相关的。

1) Mongo中如何指定复制因子?

在 C* 中,您可以为整个数据库和/或每个表定义复制因子(多少副本)。 Mongo 较新的副本集概念类似于 C* 的想法。但是,我看不到如何为 Mongo 中的每个表/集合定义复制因子。在 Mongo 中哪里定义?

2) 副本集和复制因子?

您似乎可以在 Mongo 集群中为您的数据库定义多个副本集。一个副本集最多可以有 7 个投票成员。 5 成员副本集是否意味着数据被复制 5 次?还是副本集仅用于对主节点进行投票?

3) 哪些集合的副本集?

副本集配置文档没有提及有关数据库或集合的任何内容。有没有办法指定副本集用于哪些集合?

4) 副本集定义?

如果我想创建一个 15 节点的 Mongo 集群,每条记录保留 3 个副本,如何将节点划分为多个副本集?

谢谢。

【问题讨论】:

    标签: mongodb replication


    【解决方案1】:

    Mongo 复制通过复制整个实例来工作。它不是在单个数据库或集合级别完成的。除仲裁器外,所有副本都包含数据的副本。仲裁者不持有任何数据,只参与新主节点的选举。它们通常被部署来创建足够的多数,如果一个实例出现故障,一个新的实例可以被选为主要实例。

    这里解释得很好https://docs.mongodb.com/manual/replication/

    【讨论】:

    • 所以对于我的 15 节点和 3 副本的情况,我实际上只需要 3 个节点,其他 12 个节点不能有效使用,除非我对集合进行分片?
    • 根据您的需要,您可以将所有 15 个副本放在一个副本集中并使用辅助读取,以减轻您的主要负担,只要您可以处理潜在的陈旧数据。否则是的,你可以分片,但我在分片方面的经验是有限的,而且它是一项复杂的工作。仅当您知道绝对必须进行分片时才应该进行分片,而不是因为您周围有额外的机器。
    • 嗯,在我看来,Mongo 仍然没有解决可扩展性问题。如果我知道保留 3 个副本就足够了,并且通过拥有额外的机器,Mongo 应该自动创建多个虚拟副本集(在我的情况下,每个集合中有 3 个成员)以平均自动分配所有数据并由这些副本集管理,并且这会像 Cassandra 一样扩大规模。当前副本集的东西在没有手动分片的情况下无法扩大规模,从某种意义上说,它仍然是单机上的整个数据库实例。
    【解决方案2】:

    复制是指确保相同数据在多个 Mongo DB 服务器上可用的过程。为了提高数据可用性,有时需要这样做。

    因为如果您的主 MongoDB 服务器因任何原因出现故障,将无法访问数据。但是,如果您将数据定期复制到另一台服务器,即使主服务器出现故障,您也可以从另一台服务器访问数据。

    复制的另一个目的是负载平衡的可能性。如果有很多用户连接到系统,而不是让每个人都连接到一个系统,用户可以连接到多个服务器,以便平均分配负载。

    在 MongoDB 中,多个 MongDB 服务器被分组到称为副本集的集合中。副本集将有一个主服务器,它将接受来自客户端的所有写操作。在此之后添加到集合中的所有其他实例将被称为辅助实例,主要用于所有读取操作。

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 2019-08-10
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多