我在 aws 上有一个 mongodb 集群。为了减少网络延迟,我希望在不同区域有多个分片。每个区域中都会有连接到本地主机 mongos 的应用程序节点。如何确保 mongos 始终将查询发送到最近的分片以减少延迟。我找到了一个使用标签感知分片的解决方案,该解决方案包括根据区域标记每个副本集,并在所有查询上附加一个字段,该字段指定查询来自哪个区域。但我想知道是否还有其他解决方案可以配置 mongos 以在地理上感知分片。谢谢!
答案1
有一个读取首选项值“最近”,它实际上使用 MongoS 和 MongoD 之间的延迟来确定哪个是查询的最佳/最快集合成员。您可以在此处找到有关它的文档:https://docs.mongodb.org/manual/reference/read-preference/#nearest
选择基于“成员选择”。对于像您这样的分片集群,您可以在此处找到 MongoS 选择节点的方式:https://docs.mongodb.org/manual/core/read-preference-mechanics/#read-preference-in-sharded-clusters
这里需要注意的最重要的一点是,“最近”并不关心节点的类型。因此,即使您执行读取查询,MongoS 也可能会选择主节点(有时这不是您期望的方式)。要解决这个问题,唯一的方法是使用您已经提到的标签。
希望有帮助!