本页介绍了Atlas Infinite 集群上的集群层自动伸缩,该集群支持响应式和预测性集群层自动伸缩。要学习;了解每种机制的工作原理,请参阅集群层的响应式自动伸缩和集群层的预测性自动伸缩。
集群层自动伸缩
Atlas对集群层使用响应式和预测式自动伸缩。Atlas会根据集群的类型、层级和工作负载模式选择自动伸缩机制。
响应式自动伸缩。Atlas 使用阈值而非预测,根据当前的资源使用情况触发扩展事件。响应式自动伸缩在持续的高或低资源使用之后发生。要了解更多信息,请参阅集群层的响应式自动伸缩。
预测性自动伸缩。Atlas使用机器学习根据历史使用模式预测未来的扩展需求,并尝试在预测的工作负载峰值到来之前trigger扩展事件。
预测性自动伸缩是集群层自动伸缩的扩展,可以回退到反应式自动伸缩。Atlas继续依靠响应式自动伸缩来管理非周期性或不可预测的意外工作负载峰值。Atlas对符合条件的集群使用预测性自动伸缩。要学习;了解更多信息,请参阅集群层的预测性自动伸缩。
集群层的响应式自动伸缩
您可以配置Atlas使用的集群层范围,以根据集群使用情况自动扩展集群层。
为了优化资源利用率并改善费用状况,Atlas反应式自动伸缩可检测持续较高的需求和短期峰值流量,并根据实时资源使用情况调整集群层。
为了帮助控制成本,您可以指定集群可自动伸缩到的最大和最小集群大小范围。
响应式自动伸缩以滚动方式运行,并且该进程不会导致任何停机。在此进程中, Atlas会维护一个主节点 (primary node in the replica set)节点,但节点会逐个升级,并且在升级时不可用。
要学习;了解可扩展性的建议,包括在使用具有响应式自动伸缩的基础架构即代码工具时避免资源漂移,请参阅Atlas架构中心的Atlas可扩展性建议。
符合条件的响应式自动伸缩集群
Atlas 集群层级响应式自动伸缩适用于 General 和 Low-CPU集群类下的所有专用Atlas Core集群层。响应式自动伸缩也适用于Atlas Infinite 集群。
Atlas 如何扩展集群层
在Atlas Infinite 集群上,扩展集群层还会更改集群可用的存储IOPS 和存储吞吐量。要查看每个层级的存储性能值,请参阅每个集群层的Atlas无限存储 IOP 和吞吐量值。
注意
您无法更新给定层级的存储性能值。要更改存储性能,请更改集群层。
计算节点上的本地存储与集群存储是分开的。要学习;了解每个集群层为查询溢出提供了多少本地存储,请参阅。
Atlas依赖托管网络探测(ping)数据来做出自动扩展决策。无论是否启用了自动伸缩,专用集群数据节点都会持续将此网络探测(ping)数据发送到控制平面。启用自动伸缩后,如果满足扩展条件, Atlas可以立即使用这些历史数据进行扩展。
Atlas 可将您的集群扩展到同一类中的其他层。例如,Atlas 可将 General 集群扩展到其他 General 集群类型,但不会将 General 集群扩展到 Low-CPU 集群类型。
如果新的集群层超出指定的 Minimum 和 Maximum Cluster Size 范围,Atlas 不会扩展您的集群层。
如果您部署只读节点并希望集群更快地扩展,请考虑调整副本集扩展模式。
为了确保适当的集群资源利用率,确切的响应式自动伸缩标准可能会发生变化。
重要
对于专用的Atlas Core 集群,如果恢复的快照大小大于目标集群的存储容量,则集群不会自动扩展。
Atlas使用以下资源利用率和操作准入控制概念来确定何时扩展或缩减集群:
相对系统 CPU 利用率: Atlas在
M10和M20集群上用于自动伸缩决策的值。计算公式为:Relative System CPU Utilization = Normalized System CPU / Baseline CPU Utilization 其中:
Atlas将 Relative System CPU Utilization 的上限限制为 100%,即使计算量超过了该值。如果在 Normalized System CPU 显得较低时发生扩展,联系MongoDB支持部门。
系统内存利用率:节点上所有进程的总内存使用量,以占节点可用总内存的百分比表示。计算公式为:
System Memory Utilization = Memory Used / Total Memory * 100 其中:
总内存:操作系统报告的节点使用的总物理内存。 Atlas不会将此值显示为单独的指标。在Atlas指标中不可见。
注意
Atlas用于自动扩展决策的 System Memory Utilization 值可能与Atlas指标面板中显示的值略有不同。如果当 System Memory Utilization 显示较低时没有发生缩减,联系MongoDB支持部门。
排队或拒绝的操作:作为智能工作负载管理 (IWM) 的一部分, Atlas排队或拒绝以防止集群过载的操作的总速率。 Atlas 的计算公式为:
Queued or Rejected Operations = Queued Operations + Rejected Operations 其中:
排队操作: Atlas添加到入口请求速率限制器队列以等待进入集群的传入操作的平均每分钟速率。每秒速率显示为 操作速率限制: Atlas指标中的排队操作。
要学习;了解IWM 如何对操作进行排队或拒绝操作以响应集群过载,请参阅智能工作负载管理。
组合值大于零意味着您的集群过载。
以下部分介绍Atlas如何使用这些指标来确定何时扩展或缩减集群。
扩大规模的条件
为了管理应用程序的动态工作负载,Atlas会在本节描述的条件下扩展集群中的节点。
为实现最佳资源利用率和成本配置,Atlas 会在以下情况下避免将集群扩展到下一个层级:
M10或M20集群在过去 20 分钟或 1 小时内已进行扩展,具体取决于阈值。M30+集群在过去 10 分钟或 1 小时内已进行扩展,具体取决于阈值。针对 Queued or Rejected Operations 标准,集群在过去 10 分钟内已进行扩展。
例如,如果自 12:00 以来集群层没有发生变化,则当集群的当前标准化系统 CPU 利用率大于 90% 时,Atlas 将在 12:10 扩展 M30+ 集群。
如果下一集群层级处于您的 范围内,则当以下至少Maximum Cluster Size 一个 条件对 任一 此类集群节点为真时,Atlas 便会将集群中的 操作节点 扩展到下一个层级。
注意
本节中的条件描述了操作节点。对于云提供商上的分析节点,如果平均 Normalized System CPU 或 System Memory Utilization 在过去一小时内超过任何集群节点可用资源的 75%,Atlas会将其扩展到下层级。 Atlas不会应用Queued or Rejected Operations 标准应用于分析节点。
以下列表按集群层对条件进行分组。在每层级中,与 CPU 相关的条件最先出现,然后是与内存相关的条件。在这两组中,首先出现特定于云提供商的条件。其余条件按从最严格到最宽松的顺序显示。过载标准适用于每个专用层级,并出现在最后。
M10和M20个集群:AWS。在过去 20 分钟内,平均标准化 Relative System CPU Utilization 已超过 90%,在过去 3 分钟内,CPU 窃取的平均非标准化 Absolute System CPU Utilization 已超过 30%。
Azure。在过去 20 分钟内,平均标准化 Relative System CPU Utilization 已超过 90%,在过去 3 分钟内,softIRQ 的平均非标准化 Absolute System CPU Utilization 已超过 10%。
在过去 20 分钟内,平均规范化 Absolute System CPU Utilization 已超过集群可用资源的 90%。
在过去一小时内,平均规范化 Relative System CPU Utilization 已超过集群可用资源的 75%。
过去 10 分钟内,平均System Memory Utilization已超过集群可用资源的 90%。
过去一小时内,平均 System Memory Utilization 已超过集群可用资源的 75%。
注意
如果在Normalized System CPU 显得较低时发生扩展,联系MongoDB支持部门。
M30+集群:过去 10 分钟内,平均Normalized System CPU已超过集群可用资源的 90%。
过去一小时内,平均 Normalized System CPU 已超过集群可用资源的 75%。
过去 10 分钟内,平均System Memory Utilization已超过集群可用资源的 90%。
过去一小时内,平均 System Memory Utilization 已超过集群可用资源的 75%。
所有专用集群,
M10+:Queued or Rejected Operations 过去 10 分钟内每个示例的值均大于零。
Atlas要求速率在整个 10 分钟的窗口内保持在零以上,而不是取平均值,因此在短暂的流量高峰期间短暂的排队或拒绝操作不会扩展集群。持续减载表明您的工作负载超过了当前层级可以承受的范围,因此Atlas会扩展以缓解过载。
注意
该标准衡量的是Atlas是否卸载了负载,而不是卸载了多少。任何持续高于零的利率都符合阈值。
这些阈值可确保您的集群快速扩展以响应高负载,同时保持其性能和可靠性。
注意
在模拟区域服务中断期间, Atlas不会trigger集群层自动伸缩。如果集群没有足够的健康节点来支持扩展操作,则在实际区域服务中断期间也可能会出现此行为。
重要
工作负载突然激增
扩展至更大的集群层需要足够的时间来准备后备资源。当集群接收到大量活动(如批量插入)时,可能不会进行自动伸缩。为了降低资源耗尽的风险,请计划在批量插入和其他工作负载高峰之前扩展集群。
例子
考虑具有以下值的示例场景,看看Atlas如何评估扩展条件。基准 CPU 利用率在Atlas指标面板中不可见,对于可突发实例类型,范围可以从 20%-50% 不等。您可以使用该范围内的任何值来估计上限和下限,此示例使用 20% 作为该范围的下限。
Normalized System CPU: 60%
基准 CPU 使用率:20%
CPU 窃取:10 %
评估条件:
条件1 (AWS):要求平均相对系统 CPU 利用率 >90 %(持续20 分钟)并且平均 CPU 抢占 30> %,持续3 分钟。
相对 CPU:60% ÷ 20% = 300%,上限为 100%。已达到第一个阈值。
CPU 窃取为 10%,但不超过 30%。未达到第二个阈值。
结果:不满足条件 1。两个阈值都必须为 true。
条件 2:要求平均值 Normalized System CPU > 90%,持续 20 分钟。
标准化系统 CPU 为 60%,不超过 90%。
结果:不满足条件 2。
条件3 :要求平均相对系统 CPU 利用率 >75 %,持续1 小时。
相对 CPU:60% ÷ 20% = 300%,上限为 100%。
结果:满足 3 条件。 Atlas会触发自动伸缩。
缩减的条件
为了优化费用,Atlas会在本节描述的条件下以被动方式缩减集群中的节点。
Atlas从启用缩减的那一刻起就开始检查这些条件,而不是追溯检查。即使您的集群在启用缩减之前满足这些条件, Atlas不会扩展,直到启用该功能后经过了所需的时间窗口。
如果下一个最低集群层在 Minimum Cluster Size范围内,并且集群中的所有节点都满足以下所有条件,则Atlas会将集群中的节点缩减到下一个层级:
所有节点:
Atlas 在过去的 24 小时内没有缩小集群(无论是手动还是自动)。
在过去 24 小时内,Atlas 没有预配或恢复集群的运行。
Atlas在过去 12 小时内未停止和重新启动任何集群节点。
至少在过去 10 分钟 和 过去 4 小时内,平均 Normalized System CPU 低于集群可用资源的 45%。Atlas使用“4 小时平均值”检查点来指示 CPU 负载已稳定在观察到的水平上。Atlas使用“10 分钟平均”检查点作为指标,表明最近没有发生任何 CPU 峰值,而Atlas未使用“4 小时平均”检查点捕获。
注意
对于 和 层, Atlas应用相对于实例基准
M10M2045CPU 利用率的 % CPU 阈值,而不是标准的100 % 基准。使用20 % 作为下限估计值,缩减的有效绝对 CPU 阈值约为9 %( 4520% 的 %)。在 当前 的集群层大小水平上,平均 WiredTiger 缓存 使用量在至少过去90 10分钟 和 过去 小时内低于最大 WiredTiger 缓存大小的 %。4这向 Atlas 表明当前集群没有过载。
至少在最后 10 分钟和最后 4 小时内,新的较低集群层的Projected Memory Utilization 低于 60%。
为了计算 Projected Memory Utilization, Atlas从当前内存使用量开始,在Atlas指标中显示为“系统内存:已使用的内存(字节)”。 Atlas减去当前WiredTiger缓存使用量,加上新的较低层级上最大WiredTiger缓存大小的 80% ,然后将结果除以该层的总RAM。
此值与 System Memory Utilization 不同,后者会根据当前层级上的RAM来衡量正在使用的所有内存。
注意
Atlas在此计算中包含WiredTiger缓存,以使缓存已满但流量较低的集群更有可能扩展。缩减需要同时通过以下两个阈值:
90%:当前层的WiredTiger缓存使用量必须低于其最大大小的 90%。
60%:新的较低层级上的 Projected Memory Utilization 必须低于 60%。
这些条件可确保 Atlas 缩减集群中的操作节点,防止出现高利用率状态。
注意
Atlas使用预计的内存利用率评估基于内存的扩展,这与Atlas用户界面中显示的 System Memory Utilization 不同。如果当 System Memory Utilization 显示较低时没有发生缩减,联系MongoDB支持部门。
- 过去 24 小时的平均 Normalized System CPU 和 System Memory Utilization 低于集群可用资源的 50%。
注意
M10和M20集群使用较低的阈值来考虑云提供商在突发周期后设置的 CPU 使用上限。这些阈值因您的云提供商和集群层而异。
集群层的预测性自动伸缩
预测性自动伸缩是自动伸缩的扩展。
Atlas使用需求预测来预测托管资源利用率,并先发制人地扩展集群计算,以确保实现最佳资源利用率。通过预测性自动伸缩,Atlas尝试在周期性工作负载峰值之前主动扩展集群。
预测性自动伸缩由...提供支持基于历史模式的机器学习模型提供支持。Atlas分析主节点 (primary node in the replica set)节点上的资源利用率以做出扩展决策。该模型根据历史使用模式预测资源利用率何时较高,如果模型预测资源利用率较高,则Atlas会扩展集群。MongoDB不断更新模型及其标准,以优化Atlas性能。
该模型分析滚动的 4 周输入窗口,以确定周期性模式。可以捕获在此窗口内可观察到的任何模式,示例每小时、每天、每周或每两周一次的周期。周期较长的模式(例如月度或季度周期)位于 4 周窗口之外,因此无法检测到。
注意
对于接近窗口上限的模式,精度可能会降低,因为窗口内出现的完整周期较少。
预测性自动伸缩对于具有预测性、周期性工作负载的集群具有以下好处:
在 4 周的输入窗口内针对周期性工作负载模式自动扩展集群。
在可预测的高需求期间保持一致的性能和可用性。
让Atlas托管容量增加,从而减少手动扩展任务或计划脚本。
当集群工作负载的变更超出可预测模式且非周期性或不可预测时,无缝回退到响应式自动伸缩。
要触发预测性自动伸缩,您的集群必须连续维护活动日志两周。一旦满足此标准,系统就会启用预测性自动伸缩。
注意
如果暂停集群,则预测性自动伸缩需要连续两周的活动才能恢复。
预测性自动伸缩的行为
以下声明描述了预测性自动伸缩的工作原理:
Atlas会尝试在预测负载到达之前扩展集群实例大小。
当Atlas根据预测指标对集群进行预测性扩展时,它一次最多可以扩展两个层级。
预测性自动伸缩仅应用于计算,不应用于存储。
预测性自动伸缩遵循现有自动伸缩的最小和最大实例大小。
当Atlas无法使用预测性自动伸缩来扩展集群时,它会转而使用响应式自动伸缩。
预测性自动伸缩仅支持升级。不存在预测性扩展缩减。Atlas使用响应式自动伸缩,在工作负载减少时自动扩展集群规模。
如果预测性扩展计划在下一个 1 小时内进行,Atlas会跳过被动式下行扩展。
符合预测性自动伸缩条件的集群
Atlas对符合条件的集群使用预测性自动伸缩。符合预测性自动伸缩的集群必须满足以下所有条件:
属于 General 和 Low-CPU集群类。
具有
M30或更高的层级。启用自动伸缩。如果启用缩减,自动伸缩最小实例大小必须等于或大于
M30。已活跃至少两周。
M30层级及更大层级的Atlas无限集群在 AWS Gen2硬件上运行。预测性自动伸缩支持这些集群。
此外,以下条件会影响Atlas是否对符合条件的集群使用预测性自动伸缩:
预测性自动伸缩仅应用于可选节点和只读节点。Atlas 不会对搜索或分析节点使用预测性自动伸缩。
预测性自动伸缩可能无法预测任何符合条件的集群中的非周期性和高度动态的工作负载峰值。在这些情况下,Atlas依赖于响应式自动伸缩。
集群层扩展缩减的注意事项
您可以在“编辑集群”页面中手动减少集群层。手动扩展集群层时,应用以下事项:
估算部署的工作负载范围,然后将 Minimum Cluster Size 的值设置为具有足够容量来处理部署工作负载的集群层。请考虑集群活动中任何可能的峰值或低谷。
您无法扩展到小于
M10的集群层。
配置自动伸缩选项
您可以在创建或修改集群时配置自动伸缩选项。 Atlas建议对Atlas Infinite 集群进行计算自动伸缩。您可以选择在创建或修改集群时是否使用它。
您可以执行下列操作之一:
查看并调整 Atlas 在自动扩展集群时应使用的集群层上限和下限,或者
选择退出,不使用自动缩放。
Atlas 会在集群构建器的 Auto-scale 部分显示 General 和 Low-CPU 层集群的自动伸缩选项。
使用 Atlas CLI 和 Atlas 管理 API 启用自动伸缩。
您可以在使用Atlas CLI或Atlas Administration API创建或更新集群时启用计算自动伸缩。以下示例展示了如何为可选举节点和分析节点启用计算自动伸缩。将集群层和提供商程序设置替换为您需要的内容。
要使用 Atlas CLI 配置自动伸缩,请创建包含自动伸缩配置的 JSON 文件,然后根据 atlas api clusters updateCluster 命令的说明指定该配置。
使用 atlas api clusters updateCluster 命令直接调用 API 并在现有集群上启用自动伸缩设置。要在创建新集群时启用自动伸缩,请使用 atlas api clusters createCluster 命令。
创建有效载荷文件。
创建一个包含以下内容的 payload.json 文件。将占位符值替换为您的特定集群配置:
{ "replicationSpecs": [ { "regionConfigs": [ { "providerName": "{CLOUD-PROVIDER}", "regionName": "{REGION-NAME}", "priority": 7, "electableSpecs": { "instanceSize": "{INSTANCE-SIZE}", "nodeCount": 2 }, "analyticsSpecs": { "instanceSize": "{ANALYTICS-INSTANCE-SIZE}", "nodeCount": 1 }, "autoScaling": { "compute": { "enabled": true, "scaleDownEnabled": true, "minInstanceSize": "{MIN-INSTANCE-SIZE}", "maxInstanceSize": "{MAX-INSTANCE-SIZE}" } }, "analyticsAutoScaling": { "compute": { "enabled": true, "scaleDownEnabled": true, "minInstanceSize": "{MIN-ANALYTICS-INSTANCE-SIZE}", "maxInstanceSize": "{MAX-ANALYTICS-INSTANCE-SIZE}" } } } ] } ] }
您可以使用 Atlas 管理 API,通过在请求正文中指定自动伸缩配置来启用自动伸缩。
使用在一个项目中更新一个集群终结点,通过包含 autoScaling 对象启用自动伸缩。
注意
此curl 命令使用服务帐户访问权限令牌 ( OAuth.2 0) 而不是API密钥进行身份验证。要学习;了解更多信息,请参阅Atlas Administration API入门。
curl --header "Authorization: Bearer {ACCESS-TOKEN}" \ --header "Accept: application/vnd.atlas.2025-03-12+json" \ --header "Content-Type: application/json" \ --include \ --request PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/{GROUP-ID}/clusters/{CLUSTER-NAME}" \ --data '{ "replicationSpecs": [ { "regionConfigs": [ { "providerName": "{CLOUD-PROVIDER}", "regionName": "{REGION-NAME}", "priority": 7, "electableSpecs": { "instanceSize": "{INSTANCE-SIZE}", "nodeCount": 2 }, "autoScaling": { "compute": { "enabled": true, "scaleDownEnabled": true, "minInstanceSize": "{MIN-INSTANCE-SIZE}", "maxInstanceSize": "{MAX-INSTANCE-SIZE}" } }, "analyticsSpecs": { "instanceSize": "{ANALYTICS-INSTANCE-SIZE}", "nodeCount": 1 }, "analyticsAutoScaling": { "compute": { "enabled": true, "scaleDownEnabled": true, "minInstanceSize": "{MIN-ANALYTICS-INSTANCE-SIZE}", "maxInstanceSize": "{MAX-ANALYTICS-INSTANCE-SIZE}" } } } ] } ]'
查看集群层自动伸缩选项
要查看集群层已启用的自动伸缩选项,请执行以下操作:
选择退出集群层自动伸缩
要选择退出集群自动伸缩(增加集群层),请在创建新集群时导航到 Cluster Tier(集群层)菜单,然后取消选中 Auto-scale(自动伸缩)部分中的 Compute Auto-Scale(集群层伸缩)复选框。
要选择禁用集群自动缩放(降低集群层),请在创建新集群时导航至 Cluster Tier(集群层)菜单,然后取消选中 Auto-scale(自动伸缩)部分的 Allow cluster to be scaled down(允许集群缩减)复选框。