MongoDB驱动程序使用服务器选择算法来选择要使用的副本集成员,或者当连接到多个 mongos实例时,选择使用哪个mongos实例。
服务器选择在每次操作中进行一次。
服务器选择在每次操作时都会发生一次,并受读取偏好和 localThresholdMS 设置的控制,以确定节点的读取资格。对于每个操作,都会重新评估读取偏好。
| |
|---|
| |
| 驱动程序会收集符合条件的从节点名单。读取偏好中指定的 maxStalenessSeconds 和标签集可进一步限制成员的资格。 如果合格节点的列表不为空,则驱动程序将确定哪个合格节点“最近”(即具有最低平均网络往返时间的节点),并通过添加此“最近”服务器和 localThresholdMS 的平均往返时间来计算延迟窗口。驱动程序使用此延迟窗口将符合条件的节点列表缩减为位于此窗口内的节点。 在位于延迟窗口内的合格节点的列表中,驱动程序随机选择一个符合条件的节点。
|
| 驱动程序会收集符合条件的成员列表(主节点和从节点)。读取偏好中指定的 maxStalenessSeconds 和标签集可进一步限制成员的资格。 如果符合条件的节点列表不为空,则驱动程序将确定哪个合格节点“最近”(即平均网络往返时间最短的节点),并通过添加此“最近”的服务器和 localThresholdMS 的平均往返时间来计算延迟窗口。驱动程序使用此延迟窗口将符合条件的节点列表缩减为位于此窗口内的节点。 在位于延迟窗口内的合格节点的列表中,驱动程序随机选择一个符合条件的节点。
|
| 如果主节点可用,驱动程序将选择主节点。 如果主节点不可用,服务器选择将按照读取偏好 secondary 的流程选择符合条件的从节点。
|
| 按照读取偏好 secondary 的服务器选择进程,如果符合条件的从节点列表非空,则驱动程序会选择符合条件的从节点。 否则,如果列表为空,驱动程序将选择主节点。
|
如果连接种子列表中存在多个 mongos 实例,则驱动程序将确定哪个 mongos 是“最接近的”(即具有最低平均网络往返时间的节点),并通过添加此“最接近”的 mongos 实例和 localThresholdMS 的平均往返时间来计算延迟窗口。该驱动程序将在延迟窗口内的 mongos 实例之间随机进行负载平衡。
对于具有副本集分片的分片集群,mongos 在读取分片时会应用读取偏好。服务器选择受读取偏好和 replication.localPingThresholdMs 设置的控制。对于每个操作,都会重新评估读取偏好。
| |
|---|
| |
| |
| |
| 如果主节点可用,mongos 将选择主节点。
- # . 如果主节点 (primary node in the replica set)节点不可用,则服务器
- 选择遵循读取偏好(read preference)
secondary的进程。
|
| 按照读取偏好 secondary 的服务器选择进程,如果符合条件的从节点列表非空,则 mongos 会选择符合条件的从节点。 如果符合条件的从从节点(secondary node from replica set)列表为空,mongos 将选择主节点 (primary node in the replica set)。
|