AnalyticDB for PostgreSQLは、Greenplumに基づいてAlibaba Cloudによって最適化されています。 AnalyticDB for PostgreSQLは、マルチコーディネーターアーキテクチャでのベクトルコンピューティングとトランザクション処理をサポートしています。 AnalyticDB for PostgreSQLは、Greenplum Community Editionと同じAPI操作を使用します。 このトピックでは、自己管理型GreenplumクラスターからAnalyticDB for PostgreSQLインスタンスにデータを移行する方法について説明します。
移行プロセス
移行リスクを評価し、移行ソリューションを選択します。
AnalyticDB for PostgreSQLテストインスタンスを購入し、移行ソリューションを使用してアプリケーションとデータを移行できるかどうかを確認します。
AnalyticDB for PostgreSQL運用インスタンスを購入し、自己管理型GreenplumクラスターからAnalyticDB for PostgreSQLインスタンスに運用ライブラリを移行します。
アプリケーションをAnalyticDB for PostgreSQL本番インスタンスに接続し、アプリケーションとデータがインスタンスに移行されているかどうかを確認します。
使用上の注意
データは移行できますが、同期できません。 データ移行中に新しいデータが書き込まれた場合は、データ移行後にデータをバックフィルする必要があります。
書き込み操作が一時停止されている場合は、データを移行することを推奨します。 そうしないと、サービスのパフォーマンスが低下し、データ移行が遅くなります。
データ移行後、AnalyticDB for PostgreSQLインスタンスはANALYZEステートメントを実行して統計を収集し、最適な実行計画を生成します。 ANALYZEステートメントが実行されると、データ量に基づいてコーディネータノードのCPUワークロードが一時的に増加します。
計算ノードの数が自己管理型Greenplumクラスター内のノードの数以上であるAnalyticDB for PostgreSQLインスタンスを作成することを推奨します。 gpcopyを使用してデータを移行する場合、同じ数のノードが最適な移行速度を提供します。
自己管理型GreenplumクラスターとAnalyticDB for PostgreSQLインスタンスでサポートされている拡張機能の違いを確認します。 AnalyticDB For PostgreSQLでサポートされている拡張機能については、「拡張機能の管理」をご参照ください。
AnalyticDB for PostgreSQLの構文は、Greenplum 4Xの構文と部分的に互換性がありません。 構文に合わせて変更する必要があります。
自己管理型Greenplumクラスターにパーティションテーブルまたは継承テーブルが含まれている場合は、子テーブルに基づいてデータを移行することを推奨します。
移行方法の選択
移行方法 | シナリオ |
自己管理型Greenplumクラスターは、AnalyticDB for PostgreSQLインスタンスに接続できます。 重要 gpcopyユーティリティは、elastic storageモード (V7.0) またはServerlessモードのAnalyticDB for PostgreSQLインスタンスのデータを移行するためにサポートされていません。 | |
AnalyticDB for PostgreSQLインスタンスは、自己管理型Greenplumクラスターに接続できます。 | |
自己管理型GreenplumクラスターとAnalyticDB for PostgreSQLインスタンスは相互に接続できません。 |
gpcopyを使用したデータの移行
チケットを起票 AnalyticDB for PostgreSQLインスタンスのID、自己管理型GreenplumクラスターのIPアドレスとポート番号、データを移行するためのスーパーユーザー権限を持つGreenplumクラスターのアカウント、およびGreenplumクラスターが存在するサーバーのIPアドレス。
AnalyticDB for PostgreSQLインスタンスのIPアドレスホワイトリストに0.0.0.0/0を追加して、外部アクセスを許可します。
警告0.0.0.0/0では、すべてのIPアドレスがAnalyticDB for PostgreSQLインスタンスにアクセスできるように指定されています。 データ移行後、IPアドレスホワイトリストをタイムリーに変更します。
自己管理型Greenplumクラスターが存在するサーバーにgpcopyをダウンロードします。 AnalyticDB for PostgreSQLインスタンスにgpcopyをダウンロードしてインストールするには、Alibaba Cloudテクニカルサポートにお問い合わせください。
説明このトピックでは、gpcopy 2.3.2が使用されます。 gpcopy 2.3.xを使用してデータを移行することを推奨します。 gpcopy 2.4.xを使用してデータを移行する場合は、SSL暗号化を有効にする必要があります。 詳細については、「SSL暗号化の設定」をご参照ください。
gpcopyパッケージがあるディレクトリで、次のコードを実行してgpcopyをインストールします。
#!/bin/bash tar xzvf gpcopy-2.3.2.tar.gz cd gpcopy-2.3.2/ cp gpcopy $GPHOME/bin cp gpcopy_helper $GPHOME/bin chmod 755 $GPHOME/bin/gpcopy chmod 755 $GPHOME/bin/gpcopy_helper host_sql=`psql -A -t -c "select address from gp_segment_configuration where role = 'p' and content >= 0 group by address"` host=(${host_sql}) host_len=${#host[@]} host_str="" for ((i=0; i<$host_len; ++i)); do host_str=$host_str" -h "${host[$i]} done gpscp $host_str gpcopy_helper =:$GPHOME/bin gpssh $host_str -e "chmod 755 $GPHOME/bin/gpcopy_helper"
次のコマンドを実行して、データを移行します。
gpcopy --full --source-host <SOURCEHOST> --source-port <SOURCEPORT> --source-user <SOURCEUSER> --dest-host <DESTHOST> --dest-port <DESTPORT> --dest-user <DESTUSER> --jobs 4 --drop --validate count
下表に、各パラメーターを説明します。
パラメーター
説明
-- フル
自己管理型Greenplumクラスターの全データを移行します。
自己管理されたGreenplumクラスターの1つのデータベースのみを移行する場合は、このパラメーターを
-d <database name>
に置き換えることができます。-仕事
同時に移行できるテーブルの数。 デフォルト値: 4。
このパラメーターは、ビジネス要件に基づいて設定できます。 このパラメーターの値は、次の式を使用して計算することを推奨します。2 × 接続数 + 1。
<ソースホスト>
自己管理型Greenplumクラスターが存在するサーバーのIPアドレス。
自己管理型Greenplumクラスターが存在するサーバーで移行コマンドを実行する場合、このパラメーターを
localhost
に置き換えることができます。<ソース>
自己管理型Greenplumクラスターのポート番号。 デフォルト値: 5432
自己管理型Greenplumクラスターが存在するサーバーで
gpstate -s
コマンドを実行して、実際のポート番号を照会できます。<ソースユーザー>
スーパーユーザー権限を持つ自己管理されたGreenplumクラスターのアカウント。
<DESTHOST>
AnalyticDB for PostgreSQLインスタンスのコーディネーターノードのIPアドレス。 詳細については、Alibaba Cloudテクニカルサポートにお問い合わせください。
<DESTPORT>
AnalyticDB for PostgreSQLインスタンスのコーディネーターノードのポート番号。 ポート番号を取得するには、Alibaba Cloudテクニカルサポートにお問い合わせください。
<DESTUSER>
スーパーユーザー権限を持つAnalyticDB for PostgreSQLインスタンスのアカウント。 アカウントを取得するには、Alibaba Cloudテクニカルサポートにお問い合わせください。
データの移行後、AnalyticDB for PostgreSQLインスタンスのIPアドレスホワイトリストを0.0.0.0/0からビジネスに必要なIPアドレスに変更します。 スーパーユーザーアカウント、セキュリティグループ、pg_hbaパスワードなしログインの設定を復元するには、Alibaba Cloudテクニカルサポートにお問い合わせください。
gptransferを使用したデータの移行
AnalyticDB for PostgreSQLインスタンスの特権アカウントを作成します。 詳細については、「データベースアカウントの作成」トピックの「特権アカウントの作成」セクションをご参照ください。
AnalyticDB for PostgreSQLインスタンスのIPアドレスホワイトリストに0.0.0.0/0を追加して、外部アクセスを許可します。
警告0.0.0.0/0では、すべてのIPアドレスがAnalyticDB for PostgreSQLインスタンスにアクセスできるように指定されています。 データ移行後、IPアドレスホワイトリストをタイムリーに変更します。
AnalyticDB for PostgreSQLインスタンスを最新のマイナーバージョンに更新します。 マイナーバージョンの表示と更新方法については、「マイナーエンジンバージョンの表示」および「マイナーエンジンバージョンの更新」をご参照ください。
チケットを起票してAlibaba Cloudテクニカルサポートに連絡し、AnalyticDB for PostgreSQLインスタンスのID、自己管理型GreenplumクラスターのIPアドレスとポート番号、データを移行する権限を持つGreenplumクラスターのアカウント、Greenplumクラスターが存在するサーバーのIPアドレスを提供します。
データの移行が完了するまで待ちます。
AnalyticDB for PostgreSQLインスタンスのIPアドレスホワイトリストを0.0.0.0/0からビジネスに必要なIPアドレスに変更し、データがインスタンスに移行されているかどうかを確認します。 データが移行されたことを確認したら、アプリケーションをAnalyticDB for PostgreSQLインスタンスに接続します。
OSS外部テーブルを使用したデータの移行
スキーマの移行
自己管理型Greenplumクラスターのマスターノードで、pg_dumpallまたはpg_dumpを使用してDDLスキーマをエクスポートします。 次の例では、Bashコマンドを使用します。
export PGHOST=<IP address of the self-managed Greenplum cluster> export PGPORT=<Port number of the self-managed Greenplum cluster> export PGUSER=<Superuser account of the self-managed Greenplum cluster> export PGPASSWORD=<Password of the superuser account> #-- Export the full schema for a Greenplum 4X cluster. pg_dumpall -s -q --gp-syntax > full_schema.sql #-- Export the full schema for a Greenplum 5X or 6X cluster. pg_dumpall -s --gp-syntax > full_schema.sql
psqlを使用して、自己管理型Greenplumクラスターにログインします。 次のステートメントを実行して、カスタムライブラリが存在するかどうかを確認します。 カスタムライブラリが存在する場合は、AnalyticDB for PostgreSQLインスタンスにスキーマを手動で作成する必要があります。
SELECT * FROM pg_catalog.pg_library;
AnalyticDB for PostgreSQLインスタンスにログインし、DDLスキーマを実行します。 次の例では、Bashコマンドを使用します。
export PGHOST=<IP address of the AnalyticDB for PostgreSQL instance> export PGPORT=<Port number of the AnalyticDB for PostgreSQL instance> export PGUSER=<Privileged account of the AnalyticDB for PostgreSQL instance> export PGPASSWORD=<Password of the privileged account> psql postgres -f full_schema.sql > psql.log 2>&1 &
bashコマンドの実行中に、psql.logでエラーメッセージを確認します。 エラーメッセージが存在する場合は、エラーの原因を分析し、問題のトラブルシューティングを行います。 ほとんどのエラーメッセージは、特にGreenplum 4XのSQL構文に関連しています。 互換性のない項目については、「AnalyticDB For PostgreSQL V4.3とV6.0の互換性の比較」および「AnalyticDB for PostgreSQL V4.3とV6.0の互換性の確認」をご参照ください。
テーブルデータ移行
COPY TOステートメントまたはgpfdist外部テーブルを使用して、セルフマネージドGreenplumクラスターからテーブルデータをエクスポートします。
コピー先
psqlクライアントでCOPY TOステートメントを実行して、テーブルデータをエクスポートします。 サンプル文:
Greenplum 4X、5X、または6Xからテーブルデータをエクスポートします。
COPY public.t1 TO '/data/gpload/public_t1.csv' FORMAT CSV ENCODING 'UTF8';
ON SEGMENTを使用して、Greenplum 5Xまたは6Xからテーブルデータをエクスポートします。
COPY public.t1 TO '<SEG_DATA_DIR>/public_t1_<SEGID>.csv' FORMAT CSV ENCODING 'UTF8' ON SEGMENT;
説明<SEGID>
文字列は変更しないでください。 システムは、エクスポート中に対応する<SEGID>
を自動的に生成します。<SEG_DATA_DIR>
文字列は変更しないか、絶対パスをカスタマイズできます。
gpfdist外部テーブル
Greenplumスタートアッププログラムのbinディレクトリに格納されているgpfdistサービスを起動します。 次の例では、Bashコマンドを使用します。
mkdir -p /data/gpload gpfdist -d /data/gpload -p 8000 &
psqlを使用して自己管理型Greenplumクラスターに接続し、クラスターからテーブルデータをエクスポートします。 サンプル文:
-- public.t1 specifies the table to be migrated. CREATE WRITABLE EXTERNAL TABLE ext_w_t1 (LIKE public.t1) LOCATION ('gpfdist://<IP address of the self-managed Greenplum cluster>:8000/public_t1.csv') FORMAT 'CSV' ENCODING 'UTF8'; -- Write the table data to an external table. INSERT INTO ext_w_t1 SELECT * FROM public.t1;
エクスポートしたデータをObject Storage Service (OSS) バケットにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。
説明関連するOSSバケットは、AnalyticDB for PostgreSQLインスタンスと同じリージョンに存在する必要があります。
OSS外部テーブルを使用して、OSSバケットからAnalyticDB for PostgreSQLインスタンスにデータをインポートします。 詳細については、「データレイク分析にOSS外部テーブルを使用する」トピックの「OSSデータをAnalyticDB For PostgreSQLテーブルにインポートする」セクションをご参照ください。
データチェック
AnalyticDB for PostgreSQLインスタンスと自己管理型Greenplumクラスター間でデータとビジネスが一貫しているかどうかを確認します。 データチェックには、データ整合性チェックとビジネス整合性チェックがあります。
データ整合性チェック: 完全データまたはサンプルデータを比較してデータ整合性を確認できます。 サンプル比較を使用する場合は、表のデータ量と数値フィールドの集計結果を調べて、データが一貫しているかどうかを確認します。
ビジネス整合性チェック: アプリケーションをAnalyticDB for PostgreSQLインスタンスに接続し、ビジネスクエリが正常に実行され、期待される応答が返されるかどうかを確認します。
その他の移行方法
Alibaba Cloud DataWorksを使用してデータを移行することもできます。 詳細については、「Data Integrationを使用したデータの移行とバッチ同期」をご参照ください。