对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

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

注意

This feature is available for M10 clusters or higher. To learn more about which features are available for Free clusters, see Atlas Free Cluster Limits, and for Flex clusters, see Atlas Flex Limitations.

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

注意

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

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

  • readPreference

  • readPreferenceTags

  • readConcernLevel

有关示例,请参阅使用案例和示例。

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

预定义标签名称
说明
例子

可用性区域

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

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

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

  • AWS: {"availabilityZone" : "us-east-1a"}

  • 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

从有资格当选主节点(primary ELECTABLEnodeElectable nodes for high availability in the replica set)的节点中读取。 节点对应于集群创建用户界面中的 。

READ_ONLY

从只读节点读取。READ_ONLY 节点对应于集群创建用户界面中的 Read-only nodes for optimal local reads

ANALYTICS

从只读分析节点读取。ANALYTICS Analytics nodes for workload isolation节点对应于集群创建用户界面中的 。

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

提示

For details on how these pre-defined replica set tags correspond to BI Connector for Atlas read preferences, refer to the BI Connector cluster options section of the Create a Cluster Page.

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

重要

分析节点查询的高可用性

对于以附带 readPreferenceTags=nodeType:ANALYTICS 等标签的分析节点为目标的读取操作,当节点可用性出现波动时,韧性至关重要。如果没有回退标签,查询则可能会在以下过程中失败:

  • 数据压实期间的初始同步

  • 磁盘缩减事件

  • 任意 NVMe 集群层更改

为降低这些风险,请确保您的连接字符串包含多个读取偏好标签以提供回退选项,以便 Atlas 能在出现此类事件时将分析读取操作路由到可用节点。例如:

db+srv://<db_username>:<db_password>@foo-q8x1v.mycluster.com/test?readPreference=secondary&readPreferenceTags=nodeType:ANALYTICS,priority:1&readPreferenceTags=&readConcernLevel=local

在本例中:

  1. 此应用程序会首先尝试连接到标签为 nodeType:ANALYTICS 的节点。

  2. 如果没有可用的此类节点,最终的空 readPreferenceTags= 则允许应该用程序连接到任意可用的从节点。

注意

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

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

考虑以下连接字符串:

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

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

  • readPreference=secondary

  • readPreferenceTags=nodeType:ANALYTICS

  • readConcernLevel=local

The readPreference option of secondary and readPreferenceTag option of { nodeType : ANALYTICS } limit the application connections to analytic nodes.

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

考虑以下连接字符串:

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

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

  • readPreference=secondary

  • readPreferenceTags=workloadType:OPERATIONAL

  • readConcernLevel=local

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

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

The following connection string prioritizes connections to the AWS US_EAST_1 region, followed by the US_EAST_2 region:

mongodb+srv://<db_username>:<db_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

In this example, the application first tries to connect to a node in AWS region US_EAST_1. If there no nodes in that region are available, the application tries to connect to a node in AWS region US_EAST_2.

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

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

注意

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

提示

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

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

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

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

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

  • readPreference=secondary

  • readPreferenceTags=diskState:READY

  • readConcernLevel=local

readPreference secondary选项和 的 readPreferenceTag { diskState : READY }选项指示Atlas仅以温节点为目标。

Atlas provides pre-defined replica set tags for availability zones by default. These tags include the AWS availability zone ID, Google Cloud fully-qualified name for a zone, or Azure zone number. You can check the availability zone of a node by using the rs.conf() shell method or by viewing the last ping of the cluster node.

例子

...
"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", j: true } }
)