我的MongoDB集群在3个DC中运行。
DC1-3个节点 DC2-3个节点 DC3-3个节点
还要在每个节点上运行我的应用程序。
我正在浏览MongoDB文档,并混淆了最近的黑白和标签集。
https://docs.mongodb.com/manual/reference/read-preference/
从地理分布的成员中查询,如果 副本集按地理位置分布,您可以创建副本 基于标签反映实例的位置,然后 配置您的应用程序以查询附近的成员。
例如,如果标记了“东”和“西”数据中心的成员 {'dc':'east'}和{'dc':'west'},您的应用程序服务器位于 东数据中心可以从附近的成员中读取以下内容 偏好:
db.collection.find()。readPref('nearest',[{'dc':'east'}]) 尽管“最近”已经偏爱网络延迟较低的会员, 包括标记可使选择更加可预测。
基于我的理解。如果使用最近,则驱动程序将跟踪延迟(也{maxStalenessSeconds
)来决定将流量发送到哪里。如果DC1过载或DC1的延迟不佳,驱动程序会将流量路由到其他DC。但是,如果使用标签集,则我们将强制使用本地DC,并且如果本地节点关闭,则本地应用程序将被视为关闭。为什么我们仍然建议标记集比最近的?
那么,驱动程序如何找到延迟和maxStalenessSecods?如何计算延迟?它会继续对集群中的每个节点执行ping操作吗?是否可以在根据延迟确定节点之前配置ping间隔和重试次数?
答案 0 :(得分:0)
使用readPreference
中的nearest
时,可以指定maxStalenessSecods
,例如100
。最小值应为90,否则会引发错误
延迟是在选择要查询的节点时计算的,因此它不会根据间隔进行ping操作。
有主要对象时:
客户可以通过比较 次要对象的最后一次写入
没有主服务器时:
通过比较辅助节点上次写入到辅助节点上最多的写入 最近写