阅读偏好maxStalenessSeconds
由于网络拥塞、低磁盘吞吐量、长时间运行的操作等原因,副本集节点可能会落后于主节点maxStalenessSeconds
。读取首选项选项允许您为从副本读取的数据指定最大复制延迟或“过时”。当从节点的估计陈旧度超过 maxStalenessSeconds
时,客户端将停止使用它进行读取操作。
IMPORTANT
maxStalenessSeconds
读取首选项适用于从节点读取并希望避免从在复制主节点写入方面落后太多的从节点读取的应用程序。例如,从节点可能会由于自身与主节点之间的网络中断而停止复制。在这种情况下,客户端应该停止从从节点读取,直到管理员解决中断并且从节点恢复。
要使用maxStalenessSeconds
,部署中的所有 MongoDB 实例都必须使用 MongoDB 3.4 或更高版本。如果任何实例位于早期版本的 MongoDB 上,驱动程序或mongos
将引发错误。
NOTE
从 4.2 版开始,MongoDB 引入了一种流量控制机制来控制主应用其写入的速率,目的是将majority committed
延迟保持在指定的最大值以下。
您可以指定maxStalenessSeconds
以下读取首选项模式:
Max staleness 与模式不兼容,主节点
仅适用于为读取操作选择集合的 从节点时。
当使用 为读取操作选择服务器时maxStalenessSeconds
,客户端通过比较次要的最后一次写入与主要的写入来估计每个次要的陈旧程度。然后,客户端会将读取操作定向到估计滞后小于或等于 的从节点 maxStalenessSeconds
。
如果没有主节点,客户端使用具有最近写入的从节点进行比较。
默认情况下,没有最大陈旧度,客户端在选择将读取操作定向到何处时不会考虑从节点的滞后。
您必须指定maxStalenessSeconds
90 秒或更长的值:指定较小的maxStalenessSeconds
值会引发错误。客户端通过定期检查每个副本集节点的最新写入日期来估计从节点的陈旧性。由于这些检查并不频繁,所以陈旧性估计是粗略的。因此,客户端不能强制执行maxStalenessSeconds
小于 90 秒的值。
原文链接 - https://docs.mongodb.com/manual/core/read-preference-staleness/
译者:陆文龙