我让我的MongoDB集群运行在3个DC中.
DC1 - 3节点DC2 - 3节点DC3 - 3节点
此外,在每个节点中运行我的应用程序.
我正在阅读MongoDB文档并混淆了b/w nearest和tag set.
https://docs.mongodb.com/manual/reference/read-preference/
从地理位置分散的成员进行查询如果副本集的成员在地理位置上分布,则可以创建基于反映实例位置的副本标记,然后将应用程序配置为查询附近的成员.
例如,如果"东"和"西"数据中心的成员标记为{'dc':'east'}和{'dc':'west'},则东部数据中心的应用程序服务器可以从附近的成员中读取具有以下读取首选项:
db.collection.find().readPref('nearest',[{'dc':'east'}])虽然最近已经偏爱网络延迟较低的成员,但包括标签使得选择更具可预测性.
根据我的理解.如果我们使用最近的,Driver会跟踪延迟(maxStalenessSeconds也)以决定在哪里发送流量.如果DC1过载或DC1延迟不良,则Driver会将流量路由到其他DC.但是,如果我们使用标记集,那么我们强制使用本地DC,如果本地节点关闭,本地应用程序将被视为关闭.为什么我们仍然推荐标签集比最近?
那么,驱动程序如何找到延迟和maxStalenessSecods?它如何计算延迟?它会继续ping集群中的每个节点吗?我们可以在根据延迟确定节点之前配置ping间隔和重试次数吗?
当您使用readPreferenceof时nearest,您可以指定maxStalenessSecods例如 100\n。最小值应该是 90 否则会抛出错误
延迟是在选择要查询的节点时计算的,因此它不会根据时间间隔进行 ping 操作。
\n\n当有主节点时:
\n\n\n\n\n客户端通过将辅助\xe2\x80\x99s 的最后写入与主的最后一次写入进行比较来估计每个辅助的陈旧程度
\n
当没有主节点时:
\n\n\n\n通过将辅助设备的最后一次写入与最近的\n 写入进行比较
\n