使用 Amazon Neptune 无服务器 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Neptune 无服务器

您可以将新的 Neptune 数据库集群创建为无服务器集群,或者在某些情况下,可以将现有数据库集群转换为使用无服务器。也可以将无服务器数据库集群中的数据库实例与无服务器实例相互转换。你只能在支持 Neptune Serverless Amazon Web Services 区域 的地方使用 Neptune Serverless,还有其他一些限制(参见)。Amazon Neptune 无服务器约束

也可以使用 Neptune Amazon CloudFormation 堆栈创建 Neptune 无服务器数据库集群。

创建使用无服务器的新数据库集群

要创建使用无服务器的 Neptune 数据库集群,您可以通过 Amazon Web Services Management Console,使用与创建预调配集群相同的方法来创建。不同之处在于,在数据库实例大小下,您需要将数据库实例类设置为无服务器。当您这样做时,您需要为集群设置无服务器容量范围

您也可以使用如下所 Amazon CLI 示的 with 命令创建无服务器数据库集群(在 Windows 上,将 '\' 替换为 '^'):

aws neptune create-db-cluster \ --region (an Amazon Web Services 区域 region that supports serverless) \ --db-cluster-identifier (ID for the new serverless DB cluster) \ --engine neptune \ --engine-version (optional: 1.2.0.1 or above) \ --serverless-v2-scaling-configuration "MinCapacity=1.0, MaxCapacity=128.0"

也可以指定 serverless-v2-scaling-configuration 参数,如下所示:

--serverless-v2-scaling-configuration '{"MinCapacity":1.0, "MaxCapacity":128.0}'

然后,您可以对 ServerlessV2ScalingConfiguration 属性运行 describe-db-clusters 命令,该命令应返回您指定的容量范围设置:

"ServerlessV2ScalingConfiguration": { "MinCapacity": (the specified minimum number of NCUs), "MaxCapacity": (the specified maximum number of NCUs) }

将现有数据库集群或实例转换为无服务器

如果您的 Neptune 数据库集群使用引擎版本 1.2.0.1 或更高版本,则可以将其转换为无服务器。此过程确实会导致一些停机时间。

第一步是向现有集群添加容量范围。你可以使用或使用这样的 Amazon CLI 命令来做到这一点(在 Windows 上,用 '^' 替换 '\'): Amazon Web Services Management Console

aws neptune modify-db-cluster \ --db-cluster-identifier (your DB cluster ID) \ --serverless-v2-scaling-configuration \ MinCapacity=(minimum number of NCUs, such as 2.0), \ MaxCapacity=(maximum number of NCUs, such as 24.0)

下一步是创建一个新的无服务器数据库实例,以替换集群中现有的主实例(写入器)。同样,您可以使用 Amazon Web Services Management Console 或来执行此操作以及所有后续步骤 Amazon CLI。在任一种情况下,将数据库实例类指定为无服务器。 Amazon CLI 命令看起来像这样(在 Windows 上,将 '\' 替换为 '^'):

aws neptune create-db-instance \ --db-instance-identifier (an instance ID for the new writer instance) \ --db-cluster-identifier (ID of the DB cluster) \ --db-instance-class db.serverless --engine neptune

当新的写入器实例变为可用时,执行失效转移以使其成为集群的写入器实例:

aws neptune failover-db-cluster \ --db-cluster-identifier (ID of the DB cluster) \ --target-db-instance-identifier (instance ID of the new serverless instance)

接下来,删除旧的写入器实例:

aws neptune delete-db-instance \ --db-instance-identifier (instance ID of the old writer instance) \ --skip-final-snapshot

最后,执行同样的操作,创建一个新的无服务器实例,以取代您想要变为无服务器实例的每个现有预调配读取器实例,然后删除现有的预调配实例(读取器实例不需要失效转移)。

修改现有无服务器数据库集群的容量范围

您可以像这样使用 Amazon CLI 来更改 Neptune 无服务器数据库集群的容量范围(在 Windows 上,将 '\' 替换为 '^'):

aws neptune modify-db-cluster \ --region (an Amazon region that supports serverless) \ --db-cluster-identifier (ID of the serverless DB cluster) \ --apply-immediately \ --serverless-v2-scaling-configuration MinCapacity=4.0, MaxCapacity=32

更改容量范围会导致某些配置参数的默认值发生更改。Neptune 可以立即应用其中一些新的默认值,但是某些动态参数更改只有在重启后才会生效。pending-reboot 状态表示需要重启才能应用一些参数更改。

将无服务器数据库实例更改为预调配

要将 Neptune 无服务器实例转换为预调配实例,您只需将其实例类更改为预调配的实例类之一。请参阅 修改 Neptune 数据库实例(并立即应用)

使用 Amazon 监控无服务器容量 CloudWatch

您可以使用 CloudWatch 来监控数据库集群中 Neptune 无服务器实例的容量和利用率。有两个 CloudWatch 指标可以让您跟踪集群级别和实例级别的当前无服务器容量:

  • ServerlessDatabaseCapacity – 作为实例级指标,ServerlessDatabaseCapacity 报告当前实例容量(以 NCU 为单位)。作为集群级指标,它报告集群中所有数据库实例的所有 ServerlessDatabaseCapacity 值的平均值。

  • NCUUtilization – 此指标报告可能使用的容量百分比。计算方法为:当前容量 ServerlessDatabaseCapacity(实例级或集群级)除以数据库集群的最大容量设置。

    如果该指标在集群级接近 100%,这意味着集群已尽可能高地扩展,则可以考虑增加最大容量设置。

    如果读取器实例的容量接近 100%,而写入器实例的容量未接近最大容量,则可以考虑添加更多读取器实例来分配读取工作负载。

请注意,对于无服务器实例,CPUUtilizationFreeableMemory 指标的含义与对于预调配实例的含义略有不同。在无服务器环境中,CPUUtilization 是一个百分比,其计算方法是当前使用的 CPU 量除以在最大容量基础上提供的 CPU 量。同样,FreeableMemory 报告实例达到最大容量时可用的可释放内存量。

以下示例说明如何 Amazon CLI 在 Linux 上使用来检索给定数据库实例的最小、最大和平均容量值,这些值在一小时内每 10 分钟测量一次。Linux date 命令指定相对于当前日期和时间的开始时间和结束时间。--query 参数中的 sort_by 函数根据 Timestamp 字段按时间顺序对结果进行排序:

aws cloudwatch get-metric-statistics \ --metric-name "ServerlessDatabaseCapacity" \ --start-time "$(date -d '1 hour ago')" \ --end-time "$(date -d 'now')" \ --period 600 \ --namespace "AWS/Neptune" --statistics Minimum Maximum Average \ --dimensions Name=DBInstanceIdentifier,Value=(instance ID) \ --query 'sort_by(Datapoints[*].{min:Minimum,max:Maximum,avg:Average,ts:Timestamp},&ts)' \ --output table