副本集主节点
主节点是副本集中唯一接受写入操作的节点。MongoDB 在主节点 上应用写入操作,然后在主节点的 oplog 上记录这些操作。从节点复制该日志,并将操作应用于其数据集。
在以下三节点副本集中,主节点接受所有写入操作。然后,从节点复制 oplog 以应用于其数据集。
点击放大
副本集的所有节点都可以接受读取操作。但是,默认情况下,应用程序将其读取操作定向到主节点。有关更改默认读取行为的详细信息,请参阅读取偏好(Read Preference)。
副本集最多只能有一个主节点。[1] 如果当前的主节点不可用,则将通过选举决定新的主节点。有关更多详细信息,请参阅副本集选举。
在以下 3 节点组成的副本集中,主节点变得不可用。此情况会触发选举,而该选举会在剩余的从节点中选取一个作为新的主节点。
点击放大
[1] | 在某些情况下,副本集中的两个节点可能会暂时认为自己是主节点,但最多只能有其中一个节点能够完成具有 { w:
"majority" } 写关注的写入操作。可以完成 { w: "majority" } 写入操作的节点是当前主节点,另一个节点是尚未识别其降级(通常是由于网络分区)的前主节点。发生这种情况时,尽管请求了读取偏好 primary ,但连接到前主节点的客户端可能会观察到过时数据,并且对前主节点的新写入操作最终将回滚。 |