使用 Amazon Neptune Serverless - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Neptune Serverless

您可以將新的 Neptune 資料庫叢集建立為無伺服器資料庫叢集,或在某些情況下,您可以轉換現有的資料庫叢集以使用無伺服器。您也可以在無伺服器資料庫叢集中的資料庫執行個體與無伺服器執行個體之間進行來回轉換。您只能在支援 Neptune 無伺服器的其中一個 AWS 區域 位置使用,但有一些其他限制 (請參閱Amazon Neptune Serverless 限制條件)。

您也可以使用 Neptune AWS CloudFormation 堆疊來建立 Neptune Serverless 資料庫叢集。

建立一個使用無伺服器的新資料庫叢集

若要建立一個使用無伺服器的 Neptune 資料庫叢集,您可以透過您建立一個佈建叢集所用的同一方式使用 AWS Management Console來執行此操作。不同之處在於,您需要在資料庫執行個體大小下將資料庫執行個體類別設定為無伺服器。當您這麼做時,需要針對叢集設定無伺服器容量範圍

您也可以使用像這樣的命令來創建無服務器數據庫集群(在 Windows 上,用 '^' 替換 '\'): AWS CLI

aws neptune create-db-cluster \ --region (an AWS 區域 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) }

將現有的資料庫叢集或執行個體轉換為無伺服器

如果您具有正在使用引擎 1.2.0.1 版或更新版本的 Neptune 資料庫叢集,則可以將其轉換為無伺服器。此過程確實會產生一些停機時間。

第一步是將容量範圍新增至現有叢集。您可以使用 AWS Management Console,或者使用這樣的 AWS CLI 命令來執行此操作(在 Windows 上,將 '\' 替換為 '^'):

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)

下一步是建立新的無伺服器資料庫執行個體,以取代叢集中現有的主要執行個體 (寫入器)。同樣地,您可以使用 AWS Management Console 或執行此操作以及所有後續步驟 AWS CLI。在任一情況下,請將資料庫執行個體類別指定為無伺服器。該 AWS 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

最後,執行相同的操作來建立新的無伺服器執行個體,以取代您想要轉換為無伺服器執行個體的每個現有的佈建讀取器執行個體,並刪除現有的佈建執行個體 (讀取器執行個體不需要容錯移轉)。

修改現有無伺服器資料庫叢集的容量範圍

您可以使用類似這樣的 AWS CLI 變更 Neptune Serverless 資料庫叢集的容量範圍 (在 Windows 上,將「\」取代為「^」):

aws neptune modify-db-cluster \ --region (an AWS 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 Serverless 執行個體轉換為佈建的執行個體,您只需將其執行個體類別變更為其中一個佈建的執行個體類別即可。請參閱修改 Neptune 資料庫執行個體 (並立即套用)

使用 Amazon 監控無伺服器容量 CloudWatch

您可以用 CloudWatch 來監視資料庫叢集中 Neptune 無伺服器執行個體的容量和使用率。有兩個 CloudWatch 指標可讓您在叢集層級和執行個體層級追蹤目前的無伺服器容量:

  • ServerlessDatabaseCapacity – 作為執行個體層級指標,ServerlessDatabaseCapacity 會報告目前的執行個體容量,以 NCU 為單位。作為叢集層級指標,其會報告叢集中所有資料庫執行個體的所有 ServerlessDatabaseCapacity 值的平均值。

  • NCUUtilization – 此指標報告可能使用的容量百分比。其計算方式為將目前的 ServerlessDatabaseCapacity (在執行個體層級或叢集層級) 除以資料庫叢集的最大容量設定。

    如果此指標在叢集層級接近 100%,表示叢集已盡可能高地擴展,請考慮增加最大容量設定。

    如果對於讀取器執行個體,它接近 100%,而寫入器執行個體未接近最大容量,請考慮新增更多的讀取器執行個體來分散讀取工作負載。

請注意,CPUUtilizationFreeableMemory 指標對無伺服器執行個體的意義與對佈建執行個體的意義略有不同。在無伺服器內容中,CPUUtilization 是百分比,其計算方法為目前使用的 CPU 數量除以最大容量可用的 CPU 數量。同樣地,FreeableMemory 會報告執行個體達到最大容量時將可用的可用記憶體數量。

下列範例顯示如何使用 Linux AWS CLI 上的擷取指定資料庫執行個體的最小、最大和平均容量值 (在一小時內每 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