Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

使用预定义副本集标签进行查询

在此页面上

  • 预定义副本集标签描述
  • 磁盘状态
  • 节点类型
  • 使用案例和示例
  • 使用分析节点隔离工作负载
  • 为按地理位置分布的应用程序确定本地读取目标
  • 减少从节点磁盘升温的影响
  • 检索可用区
  • 内置自定义写关注

注意

此功能不适用于 M0 免费集群、M2M5 集群。要详细了解哪些功能不可用,请参阅 Atlas M0(免费集群)、M2 和 M5 限制

Atlas 集群为集群中的不同成员类型配置了预定义的副本集标签。您可以利用这些预定义的副本集标签将查询从特定应用程序定向到特定节点类型、区域和可用区。这些预定义的副本集标签允许您自定义副本集的读取偏好,从而提高集群性能和可靠性。

注意

这些预定义的副本集标签与您提供和管理的资源标签有所不同。您无法更改 Atlas 提供的这些副本集标签。

如需在连接字符串中使用预定义的副本集标签并将查询指向特定节点,请使用下列连接字符串选项:

  • readPreference

  • readPreferenceTags

  • readConcernLevel

有关示例,请参阅使用案例和示例。这些连接字符串选项不可用于mongosh 。请改用cursor.readPref()Mongo.setReadPref()

下表描述了 Atlas 提供的预定义副本集标签。

预定义标签名称
说明
例子
可用性区域

AWS 可用区 ID、Google Cloud 分区的完全限定名称或 Azure 分区编号。

Azure 仅支持在地区子集中的可用性区域。Atlas 仅为支持可用区域的地区提供 Azure 的预定义可用性区域标签。要了解更多信息,请参阅 Microsoft Azure

有关每个云提供商可能的 availabilityZone 值的详细信息,请参阅云提供商的文档:

  • AWS{"availabilityZone" : "use1-az1"}

  • Google Cloud: {"availabilityZone" : "us-east1-b"}

  • Azure{"availabilityZone" : "1"}

节点类型

节点类型。

可能的值为:

  • ELECTABLE

  • READ_ONLY

  • ANALYTICS

有关详细信息,请参阅节点类型。

{"nodeType" : "ANALYTICS"}
提供商

预配节点的云提供商。

可能的值为:

  • AWS

  • GCP

  • AZURE

{"provider" : "AWS"}
区域

节点所在的云区域。

有关可能的 region 值的完整列表,请参阅云提供商的参考资料页:

{"region" : "US_EAST_2"}
工作负载类型

预定义副本集标签可在非分析(可选或只读)节点之间均匀分配工作负载。

可能的值为:

  • OPERATIONAL

{"workloadType" : "OPERATIONAL"}
磁盘状态

磁盘的状态。

可能的值: READY

有关更多信息,请参阅磁盘状态。

{"diskState" : "READY"}

下表描述了预定义副本集标记中可能的 diskState 值。

磁盘状态
说明
READY

仅针对温节点。

您可以运行查询,而不会遇到增加或不可预测的延迟。

有关此副本集标签的示例,请参阅减少从节点磁盘升温的影响。

下表描述了预定义副本集标记中可能的 nodeType 值。

节点类型
说明
ELECTABLE
从有资格被选举为主节点的节点中读取。ELECTABLE 节点对应于集群创建用户界面中的 Electable nodes for high availability
READ_ONLY
从只读节点读取。READ_ONLY 节点对应于集群创建用户界面中的 Read-only nodes for optimal local reads
ANALYTICS
从只读分析节点读取。ANALYTICS 节点对应于集群创建用户界面中的 Analytics nodes for workload isolation

要了解如何为集群配置可选、只读和分析节点,请参阅配置高可用性和工作负载隔离

提示

另请参阅:

有关这些预定义副本集标签如何与 BI Connector for Atlas 读取偏好相对应的详细信息,请参阅 创建集群页面 的 BI Connector 集群选项部分。

考虑以下场景,其中利用预定义的副本集标签将是有益的,并查看相应的示例连接字符串。

注意

以下每个示例连接字符串均采用readConcernLevel=local连接字符串选项。指定local 读关注可确保分片集群上的从节点读取不会返回孤立文档。连接到非分片副本集时,无需指定此选项。

如果应用程序执行复杂或长期运行的操作,如 ETL 或报告,您可能希望通过专门连接到分析节点,将应用程序的查询与其他运行工作负载隔离开来。

考虑以下连接字符串:

mongodb+srv://<USERNAME>:<PASSWORD>@foo-q8x1v.mycluster.com/test?readPreference=secondary&readPreferenceTags=nodeType:ANALYTICS&readConcernLevel=local

连接字符串选项按以下顺序显示:

  • readPreference=secondary

  • readPreferenceTags=nodeType:ANALYTICS

  • readConcernLevel=local

secondaryreadPreference选项和{ nodeType : ANALYTICS }readPreferenceTag选项将应用程序连接限制为分析节点。

您可能希望将常规应用程序读取与分析节点上的工作负载隔离开来。

考虑以下连接字符串:

mongodb+srv://<USERNAME>:<PASSWORD>@foo-q8x1v.mycluster.com/test?readPreference=secondary&readPreferenceTags=workloadType:OPERATIONAL&readConcernLevel=local

连接字符串选项按以下顺序显示:

  • readPreference=secondary

  • readPreferenceTags=workloadType:OPERATIONAL

  • readConcernLevel=local

指定选项可防止应用程序从分析节点读取数据。应用程序必须从 operational 或非分析节点读取数据。

使用预定义的副本集标签将本地读取定位到全球分布式应用程序的特定区域。在引入这些预定义副本集标签之前,全球分布式应用程序的本地读取依赖于正确计算最近的读取偏好。借助预定义的副本集标签,指定适当的地理标签并结合nearest的读取偏好模式可提供更加一致的行为。

以下连接字符串优先连接到 AWS US_EAST_1 区域,然后是 US_EAST_2 区域:

mongodb+srv://<USERNAME>:<PASSWORD>@foo-q8x1v.mycluster.com/test?readPreference=nearest&readPreferenceTags=provider:AWS,region:US_EAST_1&readPreferenceTags=provider:AWS,region:US_EAST_2&readPreferenceTags=&readConcernLevel=local

连接字符串选项按以下顺序显示:

  • readPreference=nearest

  • readPreferenceTags=provider:AWS,region:US_EAST_1

  • readPreferenceTags=provider:AWS,region:US_EAST_2

  • readPreferenceTags=

  • readConcernLevel=local

Atlas 会按照指定的顺序考虑每个读取偏好标签。Atlas 将节点与标签匹配后,会找到与该标签匹配的所有符合条件的节点。然后,Atlas 会忽略以下任何 readPreferenceTags

在此示例中,应用程序首先尝试连接 AWS 区域 US_EAST_1 中的节点。如果该区域没有可用的节点,则应用程序将尝试连接 AWS 区域 US_EAST_2 中的节点。

最后一个(空)readPreferenceTags= 提供回退选项。使用空的 readPreferenceTags= 选项,应用程序可以连接到任何可用节点,无论提供商或区域如何。

这些选项有助于确保应用程序连接到最近的地理区域,以减少延迟并提高性能。

注意

您可以根据可用区进一步确定读取目标。

提示

另请参阅:

有关各种读取偏好的其他信息和使用案例,请参阅MongoDB 手册中的读取偏好页面。

当 Atlas 添加或替换集群中的节点时,它会执行 磁盘预热 默认情况下。在磁盘预热过程中,新创建的存储卷会经历一段 IOPS 高使用期。这会减慢针对该节点的读取操作。因此,在磁盘预热过程中,Atlas 默认隐藏预热节点,使其无法参与任何读操作。

如果您希望新添加或替换的节点立即变为活动和可见状态,则可以选择禁用快速磁盘预热,并使用连接字符串阻止预热节点上的读取操作,如以下示例所示:

mongodb+srv://<USERNAME>:<PASSWORD>@foo-q8x1v.mycluster.com/test?readPreference=secondary&readPreferenceTags=diskState:READY&readConcernLevel=local

连接字符串选项按以下顺序显示:

  • readPreference=secondary

  • readPreferenceTags=diskState:READY

  • readConcernLevel=local

secondaryreadPreference选项和{ diskState : READY }readPreferenceTag选项告诉 Atlas 仅以温节点为目标。

Atlas 默认为可用区提供预定义的副本集标签。这些标签包括AWS可用区域 ID、区域的 Google Cloud 完全限定名称或Azure区域编号。您可以使用rs.conf() Shell 方法或查看集群节点的最后一次 ping 来检查节点的可用区。

例子

...
"tags": {
"availabilityZone": "use2-az2",
...

Atlas 为多区域集群提供了内置自定义写关注。写关注描述 MongoDB 为针对集群的写入操作所规定的确认级别。

Atlas 内置自定义写关注可确保您的操作传播到一定数量的区域以取得成功,从而帮助提高数据一致性。

要使用自定义写关注,请在操作的写关注文档中指定写关注。

Atlas 为多区域集群提供自定义写关注:

写关注
标记
说明
twoRegions
{ region: 2 }
写入操作必须由集群中至少两个区域确认。
threeRegions
{ region: 3 }
写入操作必须由集群中至少三个区域确认。
twoProviders
{ provider: 2 }
写入操作必须由集群中至少两个具有不同云提供商的区域确认。

例子

考虑跨三个区域的多区域集群:us-east-1us-east-2us-west-1。您希望在 Atlas 接受写入操作之前将其传播到集群中的所有三个区域。

以下操作将插入一个文档,并因 { w: "threeRegions" } 写关注对象而要求将该操作传播到所有三个区域:

db.employees.insertOne(
{ name: "Bob Smith", company: "MongoDB" },
{ writeConcern: { w: "threeRegions" } }
)
← 配置高可用性和工作负载隔离