参考 > 复写 > 复制集读取和写入语义 > 服务器选择算法
在本页面
MongoDB驱动程序使用服务器选择算法选择要使用的副本集成员,或在连接到多个mongos
实例时选择要使用的
mongos
实例。
服务器选择每操作一次。
服务器选择每个操作执行一次,并由
读取首选项和localThresholdMS
设置决定。
将为每个操作重新评估读取的首选项。
3.4版中的新增功能: MongoDB 3.4添加了“ maxStalenessSeconds
读取首选项”选项,maxStalenessSeconds
该选项
指定了辅助副本可能遭受的最大复制延迟或“陈旧性”,并且仍有资格进行读取操作。
重要
在maxStalenessSeconds
读取首选项用于从次级阅读,并希望避免从已经下降过于远远落后于复制一次的写入辅助阅读应用。例如,辅助节点可能由于其自身与主要节点之间的网络中断而停止复制。在这种情况下,客户端应停止从辅助服务器读取数据,直到管理员解决中断并辅助服务器追赶为止。
阅读偏好 | 选择过程 |
---|---|
primary (默认) |
|
secondary |
|
nearest |
|
primaryPreferred |
|
secondaryPreferred |
|
如果mongos
连接种子列表中有多个实例,驱动程序将确定哪个mongos
是“最近”的(即,平均网络往返时间最低的成员),并通过添加平均往返时间来计算延迟窗口。此“最近” mongos
实例和的时间localThresholdMS
。驱动程序将mongos
在等待时间窗口内的所有实例之间随机进行负载均衡。
对于具有副本集分片的分片集群,mongos
从分片读取时应用读取首选项。服务器选择由读取首选项和replication.localPingThresholdMs
设置决定。将为每个操作重新评估读取的首选项。
3.4版中的新增功能: MongoDB 3.4添加了“ maxStalenessSeconds
读取首选项”选项,maxStalenessSeconds
该选项
指定了辅助副本可能遭受的最大复制延迟或“陈旧性”,并且仍有资格进行读取操作。
重要
在maxStalenessSeconds
读取首选项用于从次级阅读,并希望避免从已经下降过于远远落后于复制一次的写入辅助阅读应用。例如,辅助节点可能由于其自身与主要节点之间的网络中断而停止复制。在这种情况下,客户端应停止从辅助服务器读取数据,直到管理员解决中断并辅助服务器追赶为止。
阅读偏好 | 选择过程 |
---|---|
primary (默认) |
|
secondary |
|
nearest |
|
primaryPreferred |
|
secondaryPreferred |
[1] | (1,2)的默认阈值是15毫秒。 |