Priority Tierが小さいAmazon Aurora Serverless v2インスタンスはWriterのスペックとACUが連動します

2022.05.03

Amazon Aurora クラスターは、インスタンスに設定された Priority Tier によってフェイルオーバー時にどのインスタンスをWriterにプロモートするか決定します。

この値は0〜15の間を取り、小さいほど、プロモート候補となります。

More than one Aurora Replica can share the same priority, resulting in promotion tiers. If two or more Aurora Replicas share the same priority, then Amazon RDS promotes the replica that is largest in size. If two or more Aurora Replicas share the same priority and size, then Amazon RDS promotes an arbitrary replica in the same promotion tier.

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html

Aurora Serverless v2 インスタンスは負荷に応じてスペック(Aurora capacity unit;ACU)がスケールアップ・ダウンします。

フェイルオーバーが発生してWriterにプロモートしたときに、スペック不足とならないよう、Serverless v2 インスタンスの Priority が 0または1に設定されている場合、少なくとも Writer と同じスペックの ACU を確保するよう ACU が追従します。

Aurora Serverless v2 reader DB instances in tier 0 or 1 are kept at a minimum capacity at least as high as the writer DB instance. That way, they are ready to take over from the writer DB instance in case of a failover. If the writer DB instance is a provisioned DB instance, Aurora estimates the equivalent Aurora Serverless v2 capacity. It uses that estimate as the minimum capacity for the Aurora Serverless v2 reader DB instance.

Aurora Serverless v2 reader DB instances in tiers 2–15 don't have the same constraint on their minimum capacity. When they are idle, they can scale down to the minimum Aurora capacity unit (ACU) value specified in the cluster's capacity range.

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2-administration.html#aurora-serverless-v2-choosing-promotion-tier

この動作をいくつかのシナリオで確認してみます。

Provisionedインスタンスに Serverless リーダーを追加

db.r6g.large(メモリー16 GiB)の writer インスタンス1台の Aurora クラスターに対して

  • Failover Tier : 1
  • Failover Tier : 2

の Servlerless 2 Reader インスタンスを追加して、mixed-configuration クラスターを構築します。

負荷0の状態でしばらく放置し、追加した2台のReaderロールのサーバーレスインスタンスがどのACUに落ち着くか確認します。

db.r6g.large はメモリが16GiBあり、Aurora Serverless の 1 ACU あたり 2 GiB のメモリが割り当てられます。

Each ACU is a combination of approximately 2 gibibytes (GiB) of memory, corresponding CPU, and networking. You specify the database capacity range using this unit of measure. The ServerlessDatabaseCapacity and ACUUtilization metrics help you to determine how much capacity your database is actually using and where that capacity falls within the specified range.

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.how-it-works.html

CloudWatch メトリクスの ServerlessDatabaseCapacity を確認すると、Tier 1 の Reader インスタンス(tier-1)は、Writer ロールインスタンス(a0-instance-1)と同じメモリ量を確保する 8 ACUに落ち着き(2 GiB/ACU * 8 ACU = 16 GiB)、Tier 2 のインスタンス(tier-2)は、時間とともに ACU が緩やかに低下し続けることが確認できます。

期待通りです。

Writer に負荷をかける

次に、Serverless v2のみで構成された

  • Tier 1 writer : tier-1-writer
  • Tier 1 reader : tier-1-reader
  • Tier 2 reader : tier-2

の3インスタンス構成のクラスターを用意します。

writer ロールのインスタンス(tier-1-writer)に負荷をかけます

tier 1 の Reader インスタンス(tier-1-reader)のCPU負荷は非常に低い(約10%)にもかかわらず、 Writer ロールのインスタンスの ACU に追従していることがわかります。

※ACUの最大値を6にしているため、ACU=6でキャップ

Tier 1 の Reader に負荷をかける

次に、 Tier = 1 の Reader インスタンス(tier-1-reader)に負荷をかけます。

この場合、 Tier = 1 の Writer インスタンスの ACU は影響を受けず、負荷のかかっている Serverless インスタンスが単体でスケールします。

Tier 2 の Reader に負荷をかける

次に、 Tier 2 の Reader インスタンス(tier-2)に負荷をかけます。

この場合、Tier = 1 のインスタンス群の ACU は影響を受けず、負荷のかかっている Serverless インスタンスが単体でスケールします。

まとめ

Amazon Aurora Serverless v2 の ACU と Priority Tier の関係について動作確認しました。

Priority Tier = 0 または 1 で Serverless v2 インスタンスを作成すると、フェイルオーバー先の候補となりやすいため、Writer と同等のスペックを保つよう ACU が連動します。

Writer の負荷とは独立にReaderロールインスタンスをスケーリングさせたい場合、Tier を 2〜15の間で設定してください。

それでは。

参考