MongoDB 中的副本集是一组提供冗余和高可用性的 mongod 进程。副本集的节点包括:
- 主节点
- 主节点接收所有写入操作。
- 从节点
- 从节点复制主节点的操作以维护相同的数据集。从节点可能有针对特殊使用配置文件的额外配置。例如,从节点可以是 non-voting 或 priority 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 并将操作应用于其数据集。
尽管客户端无法将数据写入从节点,但客户端可以自从节点读取数据。有关客户端如何将读取操作定向到副本集内节点的更多信息,请参阅读取偏好(Read Preference)。
一个从节点可以变成主节点。如果当前主节点变得不可用,副本集将进行选举以选择哪个从节点成为新的主节点。
有关更多详细信息,请参阅副本集选举。
您可以出于特定目的配置从节点。您可以配置一个从节点用于:
防止它在选举中成为主节点,从而允许它驻留在辅助数据中心或充当冷备份。请参阅 Priority 0 副本集节点。
防止应用程序从中读取数据,这样它就可以运行需要与正常流量分离的应用程序。请参阅隐藏的副本集节点。
保留正在运行的“历史”快照,以用于从某些错误(例如意外删除的数据库)中恢复。请参阅延迟的副本集节点。
| [2] | 现在,副本集的从节点会记录应用时间超过慢操作阈值的 oplog 条目。这些慢 oplog 消息:
分析器不会捕获慢 oplog 条目。 |
投票节点
在某些情况下(例如,当您有一个主节点和一个从节点,但受成本限制您无法添加其他从节点时),您可以选择向副本集中添加仲裁节点。仲裁节点将参与主节点的选举,但仲裁节点没有数据集的副本,从而无法成为主节点。
仲裁节点只有1张选举票。默认情况下,仲裁节点优先级为 0。
重要
不要在同时托管副本集主节点或从节点的系统上运行投票节点。
警告
如果承载数据的从节点不可用,则在分片集群中对分片使用主节点-从节点-仲裁节点 (PSA) 架构可能会导致可用性丧失。PSA 集群与典型的副本集不同:在分片集群中,分片执行 w: majority 写关注操作,如果确认操作所需的其余集群成员有仲裁节点,这些操作就无法完成。
要添加仲裁节点,请参阅将仲裁节点添加到自管理副本集。
有关使用投票节点时的注意事项,请参见副本集投票节点。
| [1] | 在某些情况下,副本集中的两个节点可能会暂时认为它们是主节点,但最多只能有其中一个节点能够完成具有 |