副本集成员
在MongoDB中,一个副本集是一组提供冗余和高可用性的mongod
进程。副本集的成员包括
副本集的最小推荐配置是包含三个数据承载成员的三成员副本集:一个主节点和两个从节点成员。在某些情况下(例如,您有一个主节点和一个从节点,但成本限制禁止添加另一个从节点),您可以选择包括一个仲裁者。仲裁者参与选举,但不保留数据(即不提供数据冗余)。
副本集可以最多有50个成员,但只有7个投票成员。
主节点
主节点是副本集中唯一接收写操作的成员。MongoDB在主节点上应用写操作,并在主节点的oplog上记录操作。从节点成员复制此日志并将操作应用到它们的数据集中。
在以下三成员副本集中,主节点接受所有写操作。然后从节点复制oplog以应用到它们的数据集中。
副本集的所有成员都可以接受读操作。但是,默认情况下,应用程序将读操作指向主成员。有关更改默认读行为详情,请参阅读偏好。
次级成员
次级成员维护主成员数据集的副本。为了复制数据,次级成员将主成员的oplog中的操作异步地应用到其数据集中。[1] 副本集可以有一个或多个次级成员。
以下具有三个成员的副本集有两个次级成员。次级成员复制主成员的oplog并将操作应用到其数据集中。
尽管客户端不能向次级成员写入数据,但客户端可以从中读取数据。有关客户端如何将读操作指向副本集的更多信息,请参阅读偏好。
次级成员可以成为主成员。如果当前主成员不可用,副本集将进行选举,以选择哪个次级成员成为新的主成员。
有关更多详情,请参阅副本集选举。
您可以为次级成员配置特定用途。您可以将次级成员配置为
防止其在选举中成为主成员,这允许它驻留在次级数据中心或作为冷备用。请参阅优先级0副本集成员。
防止应用程序从中读取,这允许它运行需要与正常流量分离的应用程序。请参阅隐藏副本集成员。
保留用于从某些错误中恢复的“历史”快照,例如意外删除的数据库。请参阅延迟副本集成员。
[1] | 副本集的次级成员现在记录应用时间超过慢操作阈值的oplog条目。这些慢oplog消息
|
仲裁者
在某些情况下(例如,当您有一个主节点和一个辅助节点,但成本限制不允许添加另一个辅助节点时),您可能选择向您的副本集添加一个仲裁者。仲裁者参与 主节点选举,但仲裁者没有数据集的副本,并且不能成为主节点。
仲裁者恰好有 1
票选举权。默认情况下,仲裁者的优先级为 0
。
重要
不要在也托管副本集主节点或辅助节点的系统上运行仲裁者。
警告
在分片集群中为分片使用 主-辅助-仲裁者(PSA) 架构可能会导致可用性丢失,如果数据承载的辅助节点不可用。PSA 集群与典型副本集不同:在分片集群中,分片执行 w: majority
写入关注操作,如果剩余集群成员需要仲裁者来确认操作,则无法完成。
要添加仲裁者,请参阅 将仲裁者添加到自管理的副本集。
有关使用仲裁者的考虑因素,请参阅 副本集仲裁者。
[2] | 在某些情况下,副本集中的两个节点可能 暂时 认为它们是主节点,但最多只有一个节点能够使用 { w: "majority" } 写入关注完成写入。能够完成 { w: "majority" } 写入的节点是当前主节点,另一个节点是尚未承认其降级的先前主节点,通常是由于 网络分区。当这种情况发生时,连接到先前主节点的客户端可能会观察到旧数据,尽管它们请求了 primary 读取偏好,并且最终主节点上的新写入将回滚。 |