MongoDB 中的副本集是一组提供冗余和高可用性的 mongod 进程。副本集的节点包括:
- 主节点
- 主节点接收所有写入操作。
- 从节点
- 从节点复制主节点的操作以维护相同的数据集。从节点可能有针对特殊使用配置文件的额外配置。例如,从节点可以是 non-voting 或 priority 0。
The minimum recommended configuration for a replica set is a three member replica set with three data-bearing members: one primary and two secondary members. In some circumstances (such as you have a primary and a secondary but cost constraints prohibit adding another secondary), you may choose to include an arbiter. An arbiter participates in elections but does not hold data (i.e. does not provide data redundancy).
一个副本集最多可以有 50 个节点,但只能有 7 个具有投票权的节点。
主节点
The primary is the only member in the replica set that receives write operations. MongoDB applies write operations on the primary and then records the operations on the primary's oplog. Secondary members replicate this log and apply the operations to their data sets.
在以下三节点副本集中,主节点接受所有写入操作。然后,从节点复制 oplog 以应用于其数据集。
副本集的所有节点都可以接受读取操作。但是,默认情况下,应用程序将其读取操作定向到主节点。有关更改默认读取行为的详细信息,请参阅读取偏好(Read Preference)。
副本集最多只能有一个主节点。[1] 如果当前的主节点不可用,则将通过选举决定新的主节点。有关更多详细信息,请参阅副本集选举。
从节点
从节点(secondary node from replica set)维护主节点数据集的副本。要复制数据,从从节点(secondary node from replica set)会在异步进程中将主节点oplog中的操作应用于自己的数据集。 []副本集可以有一个或多个从节点。2
以下三节点副本集有两个从节点。从节点复制主节点的 oplog 并将操作应用于其数据集。
尽管客户端无法将数据写入从节点,但客户端可以自从节点读取数据。有关客户端如何将读取操作定向到副本集内节点的更多信息,请参阅读取偏好(Read Preference)。
一个从节点可以变成主节点。如果当前主节点变得不可用,副本集将进行选举以选择哪个从节点成为新的主节点。
有关更多详细信息,请参阅副本集选举。
您可以出于特定目的配置从节点。您可以配置一个从节点用于:
防止它在选举中成为主节点,从而允许它驻留在辅助数据中心或充当冷备份。请参阅 Priority 0 副本集节点。
防止应用程序从中读取数据,这样它就可以运行需要与正常流量分离的应用程序。请参阅隐藏的副本集节点。
保留正在运行的“历史”快照,以用于从某些错误(例如意外删除的数据库)中恢复。请参阅延迟的副本集节点。
| [2] | 现在,副本集的从节点会记录应用时间超过慢操作阈值的 oplog 条目。这些慢 oplog 消息:
分析器不会捕获慢 oplog 条目。 |
投票节点
在某些情况下(例如,当您有一个主节点和一个从节点,但受成本限制您无法添加其他从节点时),您可以选择向副本集中添加仲裁节点。仲裁节点将参与主节点的选举,但仲裁节点没有数据集的副本,从而无法成为主节点。
仲裁节点只有1张选举票。默认情况下,仲裁节点优先级为 0。
重要
不要在同时托管副本集主节点或从节点的系统上运行投票节点。
警告
如果承载数据的从节点不可用,则在分片集群中对分片使用主节点-从节点-仲裁节点 (PSA) 架构可能会导致可用性丧失。PSA 集群与典型的副本集不同:在分片集群中,分片执行 w: majority 写关注操作,如果确认操作所需的其余集群成员有仲裁节点,这些操作就无法完成。
要添加仲裁节点,请参阅将仲裁节点添加到自管理副本集。
有关使用投票节点时的注意事项,请参见副本集投票节点。
| [1] | 在某些情况下,副本集中的两个节点可能会暂时认为它们是主节点,但最多只能有其中一个节点能够完成具有 |