对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

副本集节点

MongoDB 中的副本集是一组提供冗余和高可用性的 mongod 进程。副本集的节点包括:

主节点
主节点接收所有写入操作。
从节点
从节点复制主节点的操作以维护相同的数据集。从节点可能有针对特殊使用配置文件的额外配置。例如,从节点可以是 non-votingpriority 0。

副本集的最低推荐配置是三成员副本集,其中包含三个承载数据的成员:一个主节点 (primary node in the replica set)和两个从节点(secondary node from replica set)。在某些情况下(例如您有一个主节点 (primary node in the replica set)和一个从节点(secondary node from replica set),但费用限制禁止添加另一个从节点(secondary node from replica set)),您可以选择包含一个仲裁节点。仲裁节点参与选举,但不保存数据(即不提供数据冗余)。

一个副本集最多可以有 50 个节点,但只能有 7 个具有投票权的节点。

主节点 (primary node in the replica set)是副本集唯一接收写入操作的成员。 MongoDB在主节点 (primary node in the replica set)上应用写入操作,然后在主节点的oplog上记录这些操作。从节点成员复制此日志并将操作应用其数据集。

在以下三节点副本集中,主节点接受所有写入操作。然后,从节点复制 oplog 以应用于其数据集。

读取和写入主节点的默认路由示意图。
点击放大

副本集的所有节点都可以接受读取操作。但是,默认情况下,应用程序将其读取操作定向到主节点。有关更改默认读取行为的详细信息,请参阅读取偏好(Read Preference)

副本集最多只能有一个主节点。[1] 如果当前的主节点不可用,则将通过选举决定新的主节点。有关更多详细信息,请参阅副本集选举

从节点(secondary node from replica set)维护主节点数据集的副本。要复制数据,从从节点(secondary node from replica set)会在异步进程中将主节点oplog中的操作应用于自己的数据集。 []副本集可以有一个或多个从节点。2

以下三节点副本集有两个从节点。从节点复制主节点的 oplog 并将操作应用于其数据集。

由一个主节点和两个从节点组成的 3 节点副本集的示意图。

尽管客户端无法将数据写入从节点,但客户端可以自从节点读取数据。有关客户端如何将读取操作定向到副本集内节点的更多信息,请参阅读取偏好(Read Preference)

一个从节点可以变成主节点。如果当前主节点变得不可用,副本集将进行选举以选择哪个从节点成为新的主节点。

有关更多详细信息,请参阅副本集选举

您可以出于特定目的配置从节点。您可以配置一个从节点用于:

  • 防止它在选举中成为主节点,从而允许它驻留在辅助数据中心或充当冷备份。请参阅 Priority 0 副本集节点。

  • 防止应用程序从中读取数据,这样它就可以运行需要与正常流量分离的应用程序。请参阅隐藏的副本集节点。

  • 保留正在运行的“历史”快照,以用于从某些错误(例如意外删除的数据库)中恢复。请参阅延迟的副本集节点。

[2]

现在,副本集的从节点会记录应用时间超过慢操作阈值的 oplog 条目。这些慢 oplog 消息:

  • diagnostic log中针对从节点记录。

  • 记录在 REPL 组件下,该组件将含有文本 applied op: <oplog entry> took <num>ms

  • 不依赖日志级别(系统级别或组件级别)

  • 不依赖于分析级别。

  • slowOpSampleRate 影响。

分析器不会捕获慢 oplog 条目。

在某些情况下(例如,当您有一个主节点和一个从节点,但受成本限制您无法添加其他从节点时),您可以选择向副本集中添加仲裁节点。仲裁节点将参与主节点的选举,但仲裁节点没有数据集的副本,从而无法成为主节点。

仲裁节点只有1张选举票。默认情况下,仲裁节点优先级为 0

重要

不要在同时托管副本集主节点或从节点的系统上运行投票节点。

警告

如果承载数据的从节点不可用,则在分片集群中对分片使用主节点-从节点-仲裁节点 (PSA) 架构可能会导致可用性丧失。PSA 集群与典型的副本集不同:在分片集群中,分片执行 w: majority 写关注操作,如果确认操作所需的其余集群成员有仲裁节点,这些操作就无法完成。

要添加仲裁节点,请参阅将仲裁节点添加到自管理副本集。

有关使用投票节点时的注意事项,请参见副本集投票节点。

[1]

某些情况下,副本集中的两个节点可能会暂时认为它们是主节点,但最多只能有其中一个节点能够完成具有{ w: "majority" }写入关注的写入操作。可以完成{ w: "majority" }写入操作的节点是当前主节点,另一个节点是尚未识别其降级(通常是由于网络分区)的前主节点。发生这种情况时,尽管已请求读取偏好primary,但连接到前主节点的客户端可能会观察到过时数据,并且对前主节点的新写入操作最终将回滚。

给本页内容打分