读取偏好 maxStalenessSeconds
由于网络拥塞、磁盘吞吐量低、长时间运行的操作等,副本集节点可能会滞后于主节点。读取偏好maxStalenessSeconds
选项允许您指定最大复制延迟或“过时时间”,以便从从节点。当从节点的估计过时时间超过maxStalenessSeconds
时,客户端会停止使用它进行读取操作。
重要
maxStalenessSeconds
读取偏好选项适用于从从节点读取数据、并希望避免从在复制主节点写入上远远落后的从节点读取数据的应用程序。例如,从节点可能会由于其自身与主节点之间的网络中断而停止复制。在这种情况下,客户端应停止从从节点读取数据,直到管理员解决中断问题并且从节点已经跟上。
注意
从 4.2 版开始,MongoDB 引入流量控制机制,用于控制主节点适用其写入的速度,目的是将 majority
committed
延迟保持在指定的最大值以下。
您可以使用以下读取偏好模式指定 maxStalenessSeconds
:
最大陈旧度与模式 primary
不兼容,并且仅在为读操作选择副本集的从节点时适用。
使用 maxStalenessSeconds
选择用于读取操作的服务器时,客户端通过将从节点的上次写入与主节点的上次写入进行比较来估计每个从节点的过时程度。然后,客户端会将读取操作定向到其估计延迟小于或等于 maxStalenessSeconds
的从节点。
如果没有主节点,客户端将使用最近写入的从节点进行比较。
默认情况下,没有最大过期时限,客户端在选择将读取操作定向到的节点时,也不会考虑从节点的滞后。
您必须指定 90 秒或更长时间的 maxStalenessSeconds
值:指定较小的 maxStalenessSeconds
值将引发错误。客户端通过定期检查每个副本集成员的最新写入日期来估计从节点的陈旧度。由于这些检查并不频繁,陈旧度估计是粗略的。因此,客户端无法执行小于 90 秒的 maxStalenessSeconds
值。