DB シャードグループ内のシャードの分割 - Amazon Aurora

DB シャードグループ内のシャードの分割

DB シャードグループのシャードは、手動で 2 つの小さなシャードに分割できます。これは、ユーザー開始のシャード分割と呼ばれます。

Aurora PostgreSQL Limitless Database は、データ量が非常に多いか、使用量が非常に多い場合にシャードを分割することもできます。これは、システム開始のシャード分割と呼ばれます。

前提条件

ユーザー開始のシャード分割には、次の前提条件があります。

  • DB シャードグループが必要です。

  • DB シャードグループは空にすることはできません。少なくとも 1 つのシャードテーブルが含まれている必要があります。

  • ユーザーには rds_aurora_limitless_cluster_admin 権限が必要です。rds_superuser にはこの権限があるため、マスターユーザーにも権限があります。rds_superuser は、他のユーザーに権限を付与できます。

    /* Logged in as the master user or a user with rds_superuser privileges */ CREATE USER username; GRANT rds_aurora_limitless_cluster_admin to username;
  • 分割するシャードのサブクラスター (ノード) ID を知っている必要があります。次のクエリを使用して、ID を取得できます。

    SELECT * FROM rds_aurora.limitless_subclusters; subcluster_id | subcluster_type ---------------+----------------- 1 | router 2 | router 3 | shard 4 | shard 5 | shard 6 | shard

システム開始のシャード分割を有効にするには、DB クラスターに関連付けられたカスタム DB クラスターパラメータグループに次の DB クラスターパラメータを設定します。

パラメータ

rds_aurora.limitless_enable_auto_scale

on

rds_aurora.limitless_auto_scale_options

split_shard または add_router,split_shard

rds_aurora.limitless_finalize_split_shard_mode

このパラメータは、システム開始のシャード分割を確定する方法を決定します。値は次のいずれかになります:

  • user_initiated – シャード分割を確定するタイミングをユーザーが決定します。これは、デフォルト値です。

  • immediate – シャード分割はすぐに確定されます。

詳細については、「シャード分割の確定」を参照してください。

注記

このパラメータは、システム開始のシャード分割にのみ適用されます。

詳細については、「Amazon Aurora DB クラスターの DB クラスターパラメータグループ」を参照してください。

シャードの分割

DB シャードグループ内のシャードを分割するには、rds_aurora.limitless_split_shard 関数を使用します。この関数は、非同期的に実行されるシャード分割ジョブを開始します。

SELECT rds_aurora.limitless_split_shard('subcluster_id');

ジョブが正常に送信されたら、ジョブ ID が返されるまで待ちます。次に例を示します。

SELECT rds_aurora.limitless_split_shard('3'); job_id --------------- 1691300000000 (1 row)
注記

同時シャード分割オペレーションはサポートされていません。各オペレーションを順番に実行し、各オペレーションを完了してから別の追加オペレーションを開始します。

シャード分割の追跡

ジョブ ID を使用して、シャード分割ジョブを追跡できます。特定のジョブを記述して詳細を取得するには、次のクエリを実行します。

SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(job_id);

例:

SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(1691300000000); job_id | action | job_details | status | submission_time | message ---------------+-------------+-----------------------+---------+------------------------+------------------------------------------- 1691300000000 | SPLIT_SHARD | Split Shard 3 by User | SUCCESS | 2023-08-06 05:33:20+00 | Scaling job succeeded. + | | | | | New shard instance with ID 7 was created. (1 row)

存在しないジョブを入力として渡すと、クエリはエラーを返します。

SELECT * from rds_aurora.limitless_list_shard_scale_jobs(1691300000001); ERROR: no job found with the job ID provided

ジョブ ID なしで同じクエリを使用して、すべてのシャード分割ジョブのステータスを追跡できます。次に例を示します。

SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(); job_id | action | job_details | status | submission_time | message ---------------+-------------+-----------------------+-------------+------------------------+-------------------------------------------------------------- 1691200000000 | SPLIT_SHARD | Split Shard 3 by User | IN_PROGRESS | 2023-08-05 01:46:40+00 | 1691300000000 | SPLIT_SHARD | Split Shard 4 by User | SUCCESS | 2023-08-06 05:33:20+00 | Scaling job succeeded. + | | | | | New shard instance with ID 7 was created. 1691400000000 | SPLIT_SHARD | Split Shard 5 by User | FAILED | 2023-08-07 09:20:00+00 | Error occurred for the add shard job 1691400000000. | | | | | Retry the command. If the issue persists, contact AWS Support. 1691500000000 | SPLIT_SHARD | Split Shard 5 by User | CANCELED | 2023-08-07 09:20:00+00 | Scaling job was cancelled. (4 rows)

ジョブステータスは以下のいずれかになります。

  • IN_PROGRESS – シャード分割ジョブが送信され、進行中です。一度に進行中のジョブは 1 つだけです。

  • PENDING – シャード分割ジョブは確定を待っています。詳細については、「シャード分割の確定」を参照してください。

  • CANCELLATION_IN_PROGRESS – シャード分割ジョブはユーザーによってキャンセルされています。

  • CANCELED – シャード分割ジョブは、ユーザーまたはシステムによって正常にキャンセルされました。

  • SUCCESS – シャード分割ジョブが正常に完了しました。message フィールドには、新しいシャードのインスタンス ID が含まれます。

  • FAILED – シャード分割ジョブが失敗しました。message フィールドには、失敗の詳細と、失敗したジョブのフォローアップとして実行できるアクションが含まれます。

シャード分割の確定

確定はシャード分割プロセスの最後のステップです。これにより、ダウンタイムが発生します。シャード分割ジョブを開始すると、ジョブが正常に完了した直後に確定が行われます。

rds_aurora.limitless_enable_auto_scale パラメータを使用してシステム開始のシャード分割を有効にした場合、システムはワークロードに基づいてシャードを分割することがあります。

この場合、確定をすぐに行うか、選択した時間に行うかを選択できます。rds_aurora.limitless_finalize_split_shard_mode DB クラスターパラメータを使用して、タイミングを選択します。

  • 値を immediate に設定した場合、すぐに確定されます。

  • 値を user_initiated に設定した場合、シャード分割ジョブを手動で確定する必要があります。

    RDS イベントがユーザーに送信され、シャード分割ジョブのステータスが PENDING に設定されます。

user_initiated に設定した場合、rds_aurora.limitless_finalize_split_shard 関数を使用してシャード分割ジョブを確定します。

SELECT * FROM rds_aurora.limitless_finalize_split_shard(job_id);
注記

この関数は、ユーザーではなく、システムによって開始されたシャード分割にのみ適用されます。

シャード分割のキャンセル

IN_PROGRESS または PENDING のユーザー開始またはシステム開始のシャード分割をキャンセルできます。キャンセルするにはジョブ ID が必要です。

SELECT * from rds_aurora.limitless_cancel_shard_scale_jobs(job_id);

エラーがない限り、出力は返されません。ジョブ追跡クエリを使用してキャンセルを追跡できます。