Amazon Redshift クラスターでエラスティックリサイズを実行したいです。エラスティックリサイズの仕組みと、実施すべきベストプラクティスを知りたいです。
簡単な説明
エラスティックリサイズでは、テーブルがソートされたり、ディスク領域が再利用されたりすることはありません。VACUUM を実行してテーブルをソートし、ディスク容量を再利用します。エラスティックリサイズは、EC2-VPC プラットフォームを使用する Amazon Redshift クラスターでのみ使用できます。
エラスティックリサイズでは多くの場合、従来のサイズ変更よりも完了までの時間が短くなります。従来のサイズ変更操作では、Amazon Redshift がソースクラスターからデータをコピーしている間に、新しいクラスターがプロビジョニングされます。従来のサイズ変更操作では、まず分散スタイルに従ってデータが新しいノードに分散されます。次に、ANALYZE コマンドを実行してテーブル統計を更新します。
単一ノードクラスターのサイズを変更するには、従来のサイズ変更の方が適している場合があります。エラスティックリサイズでは、クラスターにノードを追加または削除できます。ただし、パフォーマンスにばらつきが生じる場合があります。ノードスライスをターゲットノードタイプのスライスの数と一致させるには、従来のサイズ変更を使用します。
次の構成は、単一ノードのエラスティックリサイズをサポートしています。
- 1 ノードの dc2.large ↔ 1 ノードの ra3.xlplus、2 ノードの ra3.xlplus、2 ノードの ra3.4xlarge
- 1 ノードの ra3.xlplus ↔ 2 ノードの ra3.xlplus、2 ノードの ra3.4xlarge
解決策
エラスティックリサイズの仕組み
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
エラスティックリサイズは、ターゲットノードタイプによって動作が左右される場合があります。ターゲットのノードタイプがソースのノードタイプと同じかどうかを確認します。
ノードタイプを確認するには、Amazon Redshift コンソールを開きます。ナビゲーションペインで [クラスター] を選択します。[クラスター] ページの各クラスター名の下にノードタイプが表示されます。
AWS CLI コマンドを describe-clusters を実行すると、Amazon Redshift クラスターに関する詳細情報を取得することもできます。
aws redshift describe-clusters --region cluster_region
注: cluster_region は、該当するクラスターの AWS リージョンに置き換えます。
ターゲットのノードタイプが既存のノードタイプと同じ場合
Amazon Redshift は、エラスティックリサイズを使用してクラスターのサイズを変更する際に、自動的にデータを新しいノードに再分散します。
エラスティックリサイズは通常、数分で操作を完了します。エラスティックリサイズがバックグラウンドでデータの再分散を完了するときに、クエリの実行時間が少し増加することが想定されます。
注: Amazon Redshift クラスターは、メタデータの移行中に数分間、一時的に使用できなくなります。
ターゲットノードタイプが既存のノードタイプと異なる場合
ノードタイプが変更された場合、Amazon Redshift は最初にスナップショットを作成します。次に、スナップショットの最新データを使用して新しいターゲットクラスターがプロビジョニングされ、データはバックグラウンドで新しいクラスターに転送されます。データの転送中、Amazon Redshift クラスターは読み取り専用モードで動作するため、すべての書き込みはブロックされます。サイズ変更がほぼ完了すると、Amazon Redshift は新しいクラスターのエンドポイントを自動的に更新し、既存のクラスターのエンドポイントと一致させます。その後、元のクラスターへのすべての接続が閉じられます。
DC2 および DS2 でのノード数の制限
ノードタイプ DC2 および DS2 には、次の制限があることに注意してください。
- ノードタイプ dc2.large または ds2.xlarge の場合は、現在のノード数の半分または 2 倍を使用します。たとえば、6 ノードのクラスターのサイズは、12 ノードまたは 3 ノードに変更します。
- ノードタイプ dc2.8xlarge、ds2.8xlarge、ra3.xlplus では、ノード数は半分または最大 2 倍に変更します。たとえば、6 ノードのクラスターのサイズは、ノード数 3、4、5、7、8、9、10、11、12 に変更できます。
- ra3.16xlarge または ra3.4xlarge ノードタイプでは、現在のノード数の 4 分の 1 または最大 4 倍に変更します。たとえば、8 ノードの ra3 クラスターのサイズは、2、3、4、5、6、7 および、9 から 32 ノードに変更できます。
エラスティックリサイズのベストプラクティス
クラスターのサイズにエラスティックリサイズを行う場合は、次のベストプラクティスを実施してください。
- クラスターのサイズを変更する前に、自動スナップショットをアクティブにするか、手動スナップショットを作成します。
注: デフォルトでは、手動スナップショットはクラスターを削除した後も無期限に保持されます。ただし Amazon Redshift は、保持期間の終了時に自動スナップショットを削除します。
- AWS CLI コマンド describe-node-configuration-options を実行し、サイズ変更オペレーション操作のノード設定オプションを取得します。
aws redshift describe-node-configuration-options --action-type resize-cluster --cluster-identifier cluster_name --region cluster_region
注: お使いのものでそれぞれ、cluster_name をクラスター名に、cluster_region をクラスターのリージョンに置き換えます。
- サイズを変更する前に、クラスターに VACUUM を実行します。エラスティックリサイズでは、削除対象としてマークされた行は自動的に削除されません。
- resize-cluster コマンドを実行し、すべてのノード構成の変更を指定します。
aws redshift resize-cluster --cluster-identifier cluster_name --cluster-type multi-node --node-type target_node_type --number-of-nodes number_of_target_nodes --no-classic --region cluster_region
注: お使いのものでそれぞれ、cluster_name をクラスター名に、target_node_type をターゲットのノードタイプに、number_of_target_nodes をターゲットノードの数に、cluster_region をクラスターのリージョンに置き換えます。
追加のアクション
Amazon Redshift クラスターでエラスティックリサイズを実行する場合は、次の手順を実行します。
- クラスターのスナップショットを作成する必要があります。
- Amazon Redshift でエラスティックリサイズ操作を開始した後に、その操作をキャンセルすることはできません。サイズ変更操作が完了するまで待ってから、別のサイズ変更操作またはクラスターの再起動を実行してください。
- 新しいノード構成に、既存のデータ用の十分なストレージがあることを確認してください。ノードを追加しても、データの再分散方法が原因で、新しい構成には十分なストレージがない場合があります。ストレージ容量の詳細については、「Amazon Redshift でプロビジョニングされたクラスターのテーブルが消費するストレージ容量が、想定より多くなったり少なくなったりする理由を知りたいです」を参照してください。
- エラスティックリサイズの操作では、データスライスの分散が不均一であることが原因で、ノード間でデータの偏りが発生する可能性があります。クラスターでデータに偏りが生じた場合は、従来のサイズ変更を実行してください。
- エラスティックリサイズが失敗した場合は、スナップショットが完了しているかどうかを確認してください。スナップショットが数分以内に完了しない場合、サイズ変更操作が失敗することがあります。
- サイズ変更の実行時には、RA3 リザーブドノードにアップグレードします。
関連情報
Amazon Redshift クラスターのサイズを変更する方法を教えてください
Amazon Redshift クラスターを数分間スケールアップ/スケールダウンすることで、必要なときに必要なパフォーマンスを得る