服务器选择算法

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

服务器选择在每个操作中发生一次。

NOTE

包含读取操作的多文档事务primary必须使用读取首选项。给定事务中的所有操作必须路由到同一节点。

副本集的读取首选项

服务器选择每次操作发生一次,并受 读取首选项localThresholdMS 设置的约束,以确定节点是否有资格进行读取。为每个操作重新评估读取首选项。

读偏好模式 选择过程
primary(默认) 驱动程序选择主节点。
secondary 驱动程序收集符合条件的从节点列表。 读取首选项中指定的maxStalenessSeconds标记集可以进一限制节点的资格。如果符合条件的节点列表不为空,则驱动程序确定哪个符合条件的节点是“最接近的”(即具有最低平均网络往返时间的节点)并通过添加平均往返时间来计算延迟窗口这个“最近”的服务器和 localThresholdMS. 驱动程序使用此延迟窗口将符合条件的节点列表缩减为落入此窗口内的节点。从属于延迟窗口内的符合条件的节点列表中,驱动程序随机选择一个符合条件的节点。
nearest 驱动程序收集符合条件的节点(主节点和从节点)的列表。读取首选项中指定的maxStalenessSeconds标记集 可以进一步限制节点的资格。如果符合条件的节点列表不为空,则驱动程序确定哪个符合条件的节点是“最接近的”(即具有最低平均网络往返时间的节点)并通过添加平均往返时间来计算延迟窗口这个“最近”的服务器和 localThresholdMS [ 1 ]。驱动程序使用此延迟窗口将符合条件的节点列表缩减为落入此窗口内的节点。从属于延迟窗口内的符合条件的列表中,驱动程序随机选择一个符合条件的节点。
primaryPreferred 如果主服务器可用,驱动程序会选择主服务器。如果主节点不可用,则服务器选择遵循读取首选项的过程secondary来选择合格的从节点。
secondaryPreferred 在读取首选项的服务器选择过程之后,如果符合条件的从节点列表不为空,则驱动程序会选择一个符合条件的从节点。否则,如果列表为空,则驱动程序选择主节点。

分片集群的读取首选项

负载均衡

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

读取首选项和碎片

对于具有副本集分片的分片集群,mongos 在从分片读取时应用读取首选项。服务器选择由读取首选项replication.localPingThresholdMs 设置决定。为每个操作重新评估读取首选项。

对冲读取

从 4.4 版本开始,mongos 支持非主读偏好模式的对冲读。 也就是说,mongos 可以向另一个节点发送额外的读取(如果可用),以在使用非主读取首选项时对冲读取操作。 为对冲读取操作而发送的附加读取使用 maxTimeMSForHedgedReads 的 maxTimeMS 值。以下操作支持对冲读取:

collStatscountdataSizedbStatsdistinct filemd5findlistCollectionslistIndexesplanCacheListFilters

要使用对冲读取:

读偏好模式 选择过程
primary(默认) mongos选择主节点。
secondary 收集mongos符合条件的从节点列表。 读取首选项中指定的maxStalenessSeconds标记集可以进一步限制节点的资格。如果符合条件的节点列表不为空,则 mongos确定哪个符合条件的节点是“最接近的”(即具有最低平均网络往返时间的节点)并通过添加平均往返时间来计算延迟窗口这个“最近”的服务器和replication.localPingThresholdMs (或--localThreshold 命令行选项)。使用mongos此延迟窗口将符合条件的节点列表缩减为落入此窗口内的那些节点。从落入等待时间窗口内的符合条件的节点列表中,mongos随机选择一个符合条件的节点。如果使用对冲读取mongos则选择第二个符合条件的节点(如果可用)。
nearest 汇集合格节点(主节点和从节点)的mongos列表。读取首选项中指定的maxStalenessSeconds标记集可以进一步限制节点的资格。如果符合条件的节点列表不为空,则 mongos确定哪个符合条件的节点是“最接近的”(即具有最低平均网络往返时间的节点)并通过添加平均往返时间来计算延迟窗口这个“最近”的服务器和replication.localPingThresholdMs (或--localThreshold 命令行选项)[ 1 ]。使用 mongos此延迟窗口将符合条件的节点列表缩减为落入此窗口内的那些节点。从落入等待时间窗口内的符合条件的节点列表中,mongos随机选择一个符合条件的节点。如果使用对冲读取mongos则选择第二个符合条件的节点(如果可用)。
primaryPreferred 如果主节点可用,则mongos选择主节点。如果主节点不可用或者mongos正在使用对冲读取,则服务器选择遵循读取首选项的过程 secondary。对于对冲读取,如果主节点可用,则mongos 选择一个合格的次要(如果可用)。如果主节点不可用,则mongos 选择两个符合条件的从节点(如果可用)。
secondaryPreferred 在读取首选项的从节点服务器选择过程之后,如果符合条件的从节点列表不为空,则mongos选择一个符合条件的从节点。如果使用 hedged readsmongos则选择另一个从节点(如果可用)。如果符合条件的从节点列表为空,或者如果mongos正在使用对冲读取并且只有一个合格的从节点可用,则mongos选择主节点。
[ 1 ] ( 1 , 2 ) 默认阈值为 15 毫秒。

阅读偏好用例副本集部署教程

原文链接 - https://docs.mongodb.com/manual/core/read-preference-mechanics/

译者:陆文龙

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""