Docs 菜单
Docs 主页
/ /

服务器选择算法

MongoDB驱动程序使用服务器选择算法来选择要使用的副本集成员,或者当连接到多个 mongos实例时,选择使用哪个mongos实例。

服务器选择在每次操作中进行一次。

注意

包含读操作的分布式事务必须使用读取偏好 primary。给定事务中的所有操作必须路由至同一节点。

服务器选择在每次操作时都会发生一次,并受读取偏好localThresholdMS 设置的控制,以确定节点的读取资格。对于每个操作,都会重新评估读取偏好。

读取偏好模式
选择进程

primary (默认)

  1. 驱动程序会选择主节点。

  1. 驱动程序会收集符合条件的从节点名单。读取偏好中指定的 maxStalenessSeconds标签集可进一步限制成员的资格。

  2. 如果合格节点的列表不为空,则驱动程序将确定哪个合格节点“最近”(即具有最低平均网络往返时间的节点),并通过添加此“最近”服务器和 localThresholdMS 的平均往返时间来计算延迟窗口。驱动程序使用此延迟窗口将符合条件的节点列表缩减为位于此窗口内的节点。

  3. 在位于延迟窗口内的合格节点的列表中,驱动程序随机选择一个符合条件的节点。

  1. 驱动程序会收集符合条件的成员列表(主节点和从节点)。读取偏好中指定的 maxStalenessSeconds标签集可进一步限制成员的资格。

  2. 如果符合条件的节点列表不为空,则驱动程序将确定哪个合格节点“最近”(即平均网络往返时间最短的节点),并通过添加此“最近”的服务器和 localThresholdMS 的平均往返时间来计算延迟窗口[1]。驱动程序使用此延迟窗口将符合条件的节点列表缩减为位于此窗口内的节点。

  3. 在位于延迟窗口内的合格节点的列表中,驱动程序随机选择一个符合条件的节点。

  1. 如果主节点可用,驱动程序将选择主节点。

  2. 如果主节点不可用,服务器选择将按照读取偏好 secondary 的流程选择符合条件的从节点。

  1. 按照读取偏好 secondary 的服务器选择进程,如果符合条件的从节点列表非空,则驱动程序会选择符合条件的从节点。

  2. 否则,如果列表为空,驱动程序将选择主节点。

如果连接种子列表中存在多个 mongos 实例,则驱动程序将确定哪个 mongos 是“最接近的”(即具有最低平均网络往返时间的节点),并通过添加此“最接近”的 mongos 实例和 localThresholdMS 的平均往返时间来计算延迟窗口。该驱动程序将在延迟窗口内的 mongos 实例之间随机进行负载平衡。

对于具有副本集分片的分片集群,mongos 在读取分片时会应用读取偏好。服务器选择受读取偏好replication.localPingThresholdMs 设置的控制。对于每个操作,都会重新评估读取偏好。

读取偏好模式
选择进程

primary (默认)

  1. mongos 选择主节点。

  1. mongos 会汇总一份合格的从节点。读取偏好中指定的 maxStalenessSeconds标签集 可以进一步限制成员的资格。

  2. 如果符合条件的成员列表不为空,mongos 就会确定哪个符合条件的成员“最近”(即平均网络往返时间最短的成员),并将该“最近”服务器的平均往返时间与 replication.localPingThresholdMs(或 --localThreshold 命令行选项)相加,计算出延迟窗口。mongos 会利用这一延迟窗口,将符合条件的成员缩减至该窗口内的成员。

  3. 从位于延迟窗口内的合格节点的列表中,mongos 随机选择符合条件的节点。

  1. mongos 收集符合条件的成员列表(主节点和从节点)。读取偏好中指定的 maxStalenessSeconds标签集可进一步限制成员的资格。

  2. 如果符合条件的成员列表不为空,mongos 会确定哪个符合条件的成员“最近”(即平均网络往返时间最短的成员),并将该“最近”服务器的平均往返时间与 replication.localPingThresholdMs(或 --localThreshold 命令行选项)相加,计算出延迟窗口 [1]mongos 会利用这一延迟窗口,将符合条件的成员缩减至该窗口范围内的成员。

  3. 从位于延迟窗口内的合格节点的列表中,mongos 随机选择符合条件的节点。

  1. 如果主节点可用,mongos 将选择主节点。

  2. 如果主节点 (primary node in the replica set)不可用,服务器选择遵循读取偏好(read preference)secondary 的进程。

  1. 按照读取偏好 secondary 的服务器选择进程,如果符合条件的从节点列表非空,则 mongos 会选择符合条件的从节点。

  2. 如果符合条件的从从节点(secondary node from replica set)列表为空,mongos 将选择主节点 (primary node in the replica set)。

[1](1, 2) 默认阈值为 15 毫秒。

后退

对冲读 (Hedged Reads)

在此页面上