Docs 菜单

Docs 主页开发应用程序MongoDB Manual

跨两个或多个数据中心分布的副本集

在此页面上

  • 概述
  • 节点分布
  • 成员的可选举性
  • 连接
  • 了解详情

虽然副本集提供了针对单实例故障的基本保护,但其成员全部位于单个数据中心的副本集容易受到数据中心故障的影响。断电、网络中断和自然灾害等问题均有可能影响其成员位于单个设施中的副本集。

将副本集成员分布在地理位置不同的数据中心可提升冗余性,并可在某一数据中心变为不可用时提供容错能力。

有些云提供商使用区域可用性区域。区域是独立的地理区域。可用区与数据中心相同,是区域内独立的物理位置。如果节点位于不同的可用区,则副本集具有高可用性,因为所有可用区不太可能同时发生故障。

为了在数据中心发生故障时保护您的数据,请在备用数据中心保留至少一个节点。如果可能,使用奇数个数据中心,并选择一种节点分布方式,以最大限度地保证即使丢失一个数据中心,剩余的副本集节点也能形成多数,或至少提供一份您数据的副本。

例如,对于一个三成员副本集,潜在的成员分布模式包括:

  • 两个数据中心:两名成员位于数据中心 1,一名成员位于数据中心 2。

    • 如果数据中心 1 发生故障,副本集将变为只读。

    • 如果数据中心 2 出现故障,副本集仍可进行写入,因为数据中心 1 中的成员可进行选举。

  • 三个数据中心:一名成员位于数据中心 1,一名成员位于数据中心 2,一名成员位于数据中心 3。

    • 如果任一数据中心出现故障,副本集仍可进行写入,因为其余成员可进行选举。

注意

将副本集成员分布在两个数据中心比分布在一个数据中心更有优势。分布在两个数据中心时,

  • 如果其中一个数据中心发生故障,数据仍可供读取,分布在单个数据中心则无法实现此功能。

  • 如果具有少数成员的数据中心出现故障,副本集仍然可以支持写入操作和读取操作。

  • 但是,如果具有大多数成员的数据中心出现故障,副本集将变为只读。

如有可能,请将成员分布在至少三个数据中心。对于配置服务器副本集 (CSRS),最佳实践是分布在三个数据中心(也可根据成员数量来增加数据中心数量)。如果使用第三个数据中心成本过高,一种可行的分布方法是在两个数据中心均匀分配数据承载成员,并将剩余成员存储在云中(如果公司政策允许)。

对于一个 5 成员副本集,潜在的成员分布模式包括:

  • 两个数据中心:三名成员位于数据中心 1,两名成员位于数据中心 2。

    • 如果数据中心 1 发生故障,副本集将变为只读。

    • 如果数据中心 2 出现故障,副本集仍可进行写入,因为数据中心 1 中的成员可创建 majority。

  • 三个数据中心:两名成员位于数据中心 1,两名成员位于数据中心 2,一名成员位于数据中心 3。

    • 如果任一数据中心出现故障,副本集仍可进行写入,因为其余成员可进行选举。

注意

将副本集成员分布在两个数据中心比分布在一个数据中心更有优势。分布在两个数据中心时,

  • 如果其中一个数据中心发生故障,数据仍可供读取,分布在单个数据中心则无法实现此功能。

  • 如果具有少数成员的数据中心出现故障,副本集仍然可以支持写入操作和读取操作。

  • 但是,如果具有大多数成员的数据中心出现故障,副本集将变为只读。

如有可能,请将成员分布在至少三个数据中心。对于配置服务器副本集 (CSRS),最佳实践是分布在三个数据中心(也可根据成员数量来增加数据中心数量)。如果使用第三个数据中心成本过高,一种可行的分布方法是在两个数据中心均匀分配数据承载成员,并将剩余成员存储在云中(如果公司政策允许)。

例如,以下 5 成员副本集将其成员分布在三个数据中心内。

分布在三个数据中心的 5 成员副本集的示意图。

该副本集的某些成员(例如存在网络限制或资源有限的成员)不应在故障转移时成为主节点。将不应成为主节点的成员配置为具有优先级 0

某些情况下,您可能希望一个数据中心内的成员先于其他数据中心内的成员被选为主节点。您可以修改成员的 priority,以使一个数据中心内成员的 priority 高于其他数据中心内的成员。

在以下示例中,数据中心 1 内的副本集成员的优先级高于数据中心 2 和 3 内的成员;数据中心 2 内的成员的优先级高于数据中心 3 内的成员:

分布在三个数据中心的 5 成员副本集的示意图。副本集包括优先级为 0.5 和 0 的成员。

验证您的网络配置是否允许每个成员连接到其他每个成员。

← 三节点副本集