复制

在本页面

MongoDB 中的副本集是一组mongod进程,它们维护相同的数据集。副本 sets 提供冗余和高可用性,并且是所有 production 部署的基础。本节介绍 MongoDB 中的复制以及副本 sets 的组件和 architecture。该部分还提供了与 replica sets 相关的 common 任务的教程。

冗余和数据可用性

复制提供冗余并增加数据可用性。通过在不同数据库服务器上提供多个数据副本,复制可以提供对单个数据库服务器丢失的级别容错。

在某些情况下,复制可以提供增加的读取容量,因为 clients 可以将读取操作发送到不同的服务器。在不同数据中心维护数据副本可以增加分布式应用程序的数据位置和可用性。您还可以为专用目的维护其他副本,例如灾难恢复,报告或备份。

MongoDB 中的复制

副本集是mongod实例的 group,它们维护相同的数据集。副本集包含多个数据承载节点和可选的一个仲裁节点。在承载数据的节点中,一个且仅一个成员被视为主节点,而其他节点被视为次要节点。

主节点接收所有写操作。副本集只能有一个主要能够确认具有\ {w:“多数”}写入关注的写入;虽然在某些情况下,另一个 mongod 实例可能暂时认为自己也是主要的。 [1]主要记录其操作 log,i.e 中对其数据集的所有更改。 OPLOG。有关主节点操作的更多信息,请参见副本集主要

读写主数据库的默认路由图。

次级复制主要的 oplog 并将操作应用于其数据集,使得辅助数据集反映主要数据集。如果主要人员不在,则符合条件的中学将举行选举以选出新的主要人员。有关辅助成员的更多信息,请参阅副本集辅助成员

3 个成员副本集的图表,包括主要和两个辅助副本。

您可以将一个额外的mongod实例添加到副本集中作为仲裁者。仲裁者不维护数据集。仲裁者的目的是通过响应其他副本集成员的心跳和选举请求来维护副本集中的仲裁。因为它们不存储数据集,所以仲裁器可以是提供副本集仲裁功能的好方法,其资源成本比具有数据集的全功能副本集成员更便宜。如果您的副本集具有偶数个成员,请添加仲裁者以获得主要选举中的大多数投票。仲裁者不需要专用硬件。有关仲裁器的更多信息,请参阅副本集仲裁者

由主要副本,辅助副本和仲裁者组成的副本集的图表。

仲裁者将永远是仲裁者,而可以 step 向下并成为次要并且次要可能在选举期间成为主要的。

异步复制

辅助节点异步应用主节点的操作。通过在主要操作之后应用操作,sets 可以继续功能,尽管一个或多个成员失败。有关复制 mechanics 的详细信息,请参阅副本集 Oplog副本集数据同步

对于 MongoDB 3.6 部署,从 version 3.6.11 开始,副本集的辅助成员现在log oplog 条目需要比缓慢操作阈值更长的时间才能应用。将使用文本applied op: <oplog entry> took <num>msREPL component 下的诊断 log中为辅助节点记录这些慢速 oplog 消息。这些缓慢的 oplog 条目仅取决于慢速操作阈值。它们不依赖于 log 级别(在系统或 component level 上),或者分析 level,或者慢操作 sample 率。探查器不捕获慢速 oplog 条目。

自动故障转移

当主节点与集合中的其他成员通信的时间超过配置的electionTimeoutMillis期间(默认为 10 秒)时,符合条件的辅助 calls 用于选举以指定自己作为新主节点。 cluster 尝试完成新主节点的选举并恢复正常操作。

新主要选举的图。在具有两个辅助副本的三个成员副本集中,主要变得无法访问。失去一个主要触发选举,其中一个辅助成为新的主要

在选举成功完成之前,副本集不能处理写操作。如果在主要脱机时将此类查询配置为run on secondaryaries,则副本集可以继续提供读取查询。

假设默认为副本配置设置,cluster 选择新主节点之前的中位 time 通常不应超过 12 秒。这包括将主要标记为不可用并调用并完成选举所需的 time。您可以通过修改settings.electionTimeoutMillis replication configuration 选项来调整此 time 时间段。网络延迟等因素可能会延长副本集选举所需的 time 时间,这反过来会影响 cluster 在没有主节点的情况下运行的 time 的数量。这些因素取决于您特定的 cluster architecture。

从默认10000(10 秒)降低electionTimeoutMillis replication configuration 选项可以更快地检测到主要故障。但是,由于临时网络延迟等因素,集群可能会更频繁地调用选举,即使主要情况健康也是如此。这可能导致w:1写入操作增加回滚

您的 application 连接逻辑应包括自动故障转移和后续选举的容差。

version 3.6 中的新功能:MongoDB 3.6 驱动程序可以检测到主要的丢失并自动重试某些写操作单个 time,提供额外的 built-in 处理自动故障转移和选举。

有关副本集选举的完整文档,请参阅副本集选举

要了解有关 MongoDB 的故障转移 process 的更多信息,请参阅:

阅读操作

默认情况下,clients 从主[1]读取;但是,clients 可以指定阅读偏好来向辅助节点发送读取操作。 异步复制到辅助节点意味着从辅助节点读取可能会返回不反映主节点上数据的 state 的数据。有关从副本_set 读取的信息,请参阅阅读偏好

在 MongoDB 中,clients 可以在写入耐用之前看到写入的结果:

有关 MongoDB 的读取隔离,一致性和新近度的更多信息,请参阅读取隔离,一致性和新近度

附加功能

副本 sets 提供了许多选项来支持 application 需求。例如,您可以使用多个数据中心的成员部署副本集,或通过调整某些成员的成员[n] .priority来控制选举结果。 Replica sets 还支持报告,灾难恢复或备份功能的专用成员。

有关更多信息,请参见优先级 0 副本集成员隐藏的副本集成员延迟副本集成员

[1](12)在某些情况中,副本集中的两个节点可能会暂时认为它们是主节点,但最多其中一个节点将能够完成写入\ {w:“多数”}写入问题。可以完成\ {w:“多数”}写入的节点是当前主节点,而另一节点是尚未识别其降级的前主节点,通常是由于网络分区。发生这种情况时,连接到前一个主服务器的客户端可能会观察过时数据,尽管已请求读取优先级,并且对前一个主服务器的新写入最终将回滚。
Updated at: 9 months ago
改变 EventsTable of content副本集成员