Docs 菜单
Docs 主页
/
MongoDB Manual
/

副本集节点

在此页面上

  • 主节点
  • 从节点
  • 投票节点

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

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

副本集的最低推荐配置是具有三个数据承载节点的三节点副本集:一个 主节点和两个从节点。在某些情况下(例如您有一个主节点和一个从节点,但成本限制禁止添加另一个从节点),您可以选择包括仲裁节点。仲裁节点参与选举 ,但不持有数据(即不提供数据冗余)。

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

提示

另请参阅:

主节点是副本集中唯一接受写入操作的节点。MongoDB 在主节点上应用写入操作,然后在主节点的 oplog 上记录这些操作。从节点复制该日志,并将操作应用于其数据集。

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

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

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

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

从节点维护主节点的数据集副本。为了复制数据,从节点在异步过程中将来自主节点 oplog 的操作应用到自己的数据集。[1] 一个副本集可以有一个或多个从节点。

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

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

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

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

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

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

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

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

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

[1] 现在,副本集的从节点会记录应用时间超过慢操作阈值的 oplog 条目。这些慢 oplog 消息:
  • diagnostic log中针对从节点记录。
  • 记录在 REPL 组件下,该组件将含有文本 applied op: <oplog entry> took <num>ms
  • 不依赖日志级别(系统级别或组件级别)
  • 不依赖于分析级别。
  • slowOpSampleRate 影响。
分析器不会捕获慢 oplog 条目。

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

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

重要

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

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

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

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

后退

数据同步