AnalyticDB for PostgreSQL は、Alibaba Cloud が Greenplum を基に最適化したサービスです。AnalyticDB for PostgreSQL は、マルチコーディネーター構成でベクター演算およびトランザクション処理をサポートします。また、Greenplum Community Edition と同じ API オペレーションを採用しているため、移行が容易です。本トピックでは、移行方法の選定から結果検証まで、一連の移行プロセスを順に説明します。
移行前の確認事項
移行を開始する前に、以下の制約事項をご確認ください。
単方向移行のみ対応。 データ移行は継続的な同期をサポートしていません。移行中に書き込み操作が継続される場合、移行完了後に新規データをバックフィルしてください。パフォーマンス低下やデータ欠損を防ぐため、移行中は書き込み操作を一時停止してください。
移行後の統計情報収集。 移行後、AnalyticDB for PostgreSQL はクエリプランニングのため、
ANALYZEを実行して統計情報を収集します。この際、コーディネーターノードの CPU 負荷がデータ量に応じて一時的に上昇します。ノード数。 ソースとなる Greenplum クラスターと同等以上のコンピュートノード数を持つ AnalyticDB for PostgreSQL インスタンスを作成してください。gpcopy を使用する場合は、ノード数を一致させることで、最も高い移行スループットが得られます。
拡張機能。 自己管理型 Greenplum クラスターで使用している拡張機能が、AnalyticDB for PostgreSQL でサポートされているかを確認してください。サポート拡張機能の一覧については、「拡張機能の管理」をご参照ください。
構文互換性。 AnalyticDB for PostgreSQL は Greenplum 4X の構文と一部互換性がありません。移行前に影響を受ける SQL を確認・修正してください。
パーティションテーブルおよび継承テーブル。 親テーブルではなく、子テーブル単位で移行してください。
移行の概要
移行は以下の 4 段階で実施します。
移行リスクの評価および移行方法の選定。
テスト用 AnalyticDB for PostgreSQL インスタンスの購入および移行手法の検証。
本番用 AnalyticDB for PostgreSQL インスタンスの購入および本番データの移行。
アプリケーションを本番インスタンスに接続し、移行結果の検証。
移行方法の選択
| 方法 | 使用タイミング |
|---|---|
| gpcopy | 自己管理型 Greenplum クラスターから AnalyticDB for PostgreSQL インスタンスへネットワーク接続が可能である場合 |
| gptransfer | AnalyticDB for PostgreSQL インスタンスは、セルフマネージド Greenplum クラスターに直接接続できます。 |
| OSS 外部テーブル | 自己管理型 Greenplum クラスターと AnalyticDB for PostgreSQL インスタンスが相互にネットワーク接続できない場合 |
gpcopy は、弾力的ストレージモード (V7.0) またはサーバーレスモードのインスタンスをサポートしていません。これらのインスタンスタイプには、gptransfer または OSS 外部テーブル方式をご利用ください。
移行には、 Alibaba Cloud DataWorks (データ統合) も使用できます。詳細については、「データ統合を使用してデータを移行およびバッチ同期する」をご参照ください。
gpcopy を使用したデータ移行
前提条件
開始する前に、以下を確認してください。
自己管理型 Greenplum クラスターから AnalyticDB for PostgreSQL インスタンスへネットワーク経由で到達可能であること。
Greenplum クラスターにスーパーユーザーアカウントが存在すること。
AnalyticDB for PostgreSQL インスタンスが弾力的ストレージモード (V7.0) またはサーバーレスモードでないこと。gpcopy はこれらのインスタンスタイプをサポートしていません。
ステップ 1:Alibaba Cloud テクニカルサポートへのお問い合わせ
チケットを起票チケットを起票し、以下の情報を提供してください。
AnalyticDB for PostgreSQL インスタンスのインスタンス ID
自己管理型 Greenplum クラスターの IP アドレスおよびポート番号
Greenplum クラスターのスーパーユーザーアカウント
Greenplum クラスターが配置されているサーバーの IP アドレス
Alibaba Cloud テクニカルサポートが、ご利用の AnalyticDB for PostgreSQL インスタンスに gpcopy をダウンロード・インストールします。チケットを起票
ステップ 2:IP アドレスホワイトリストの更新
外部アクセスを許可するため、AnalyticDB for PostgreSQL インスタンスの IP アドレスホワイトリストに 0.0.0.0/0 を追加してください。
0.0.0.0/0 はすべての IP アドレスからのアクセスを許可します。移行完了直後に、このエントリを削除し、必要な特定の IP アドレスのみを許可するホワイトリストに復元してください。
ステップ 3:Greenplum サーバーへの gpcopy のインストール
自己管理型 Greenplum クラスターが配置されているサーバーで、gpcopy をダウンロードしてください。
本トピックでは 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"
ステップ 4:移行の実行
以下のコマンドを実行してデータを移行します。
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プレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 備考 |
|---|---|---|
<SOURCEHOST> | Greenplum サーバーの IP アドレス | Greenplum サーバー上でコマンドを実行する場合は localhost を使用してください |
<SOURCEPORT> | Greenplum クラスターのポート番号 | デフォルト値:5432。gpstate -s を実行して実際のポートを確認してください |
<SOURCEUSER> | Greenplum スーパーユーザーアカウント | — |
<DESTHOST> | AnalyticDB for PostgreSQL コーディネーターノードの IP アドレス | Alibaba Cloud テクニカルサポートにお問い合わせください |
<DESTPORT> | コーディネーターノードのポート番号 | Alibaba Cloud テクニカルサポートにお問い合わせください |
<DESTUSER> | AnalyticDB for PostgreSQL スーパーユーザーアカウント | Alibaba Cloud テクニカルサポートにお問い合わせください |
主なオプション:
| オプション | 説明 |
|---|---|
--full | すべてのユーザーデータベースを移行します。単一データベースのみを移行する場合は、-d <database name> に置き換えてください |
--jobs | 並列で移行するテーブル数です。デフォルト値:4。ビジネス要件に応じて設定してください。推奨値は「2 × 接続数 + 1」の数式で算出してください |
--validate count | ソーステーブルと送信先テーブルの行数を比較することで、移行の妥当性を検証します |
ステップ 5:アクセス制御の復元
移行完了後:
IP アドレスホワイトリストを
0.0.0.0/0から、ビジネス運用に必要な IP アドレスに更新してください。Alibaba Cloud テクニカルサポートに連絡し、スーパーユーザーアカウントの構成、セキュリティグループ、および pg_hba によるパスワード不要ログイン設定を復元してください。
gptransfer を使用したデータ移行
前提条件
移行を開始する前に、以下の点をご確認ください。
AnalyticDB for PostgreSQL インスタンスは、自己管理型 Greenplum クラスターにネットワークを介して接続できます。
AnalyticDB for PostgreSQL インスタンスに特権アカウントが存在すること。存在しない場合は、「データベースアカウントの作成」をご参照のうえ、作成してください。
手順
必要に応じて、AnalyticDB for PostgreSQL インスタンス用の特権アカウントを作成してください。
外部アクセスを許可するため、AnalyticDB for PostgreSQL インスタンスの IP アドレスホワイトリストに
0.0.0.0/0を追加してください。警告0.0.0.0/0はすべての IP アドレスからのアクセスを許可します。移行完了直後に、このエントリを削除してください。AnalyticDB for PostgreSQL インスタンスを最新のマイナーエンジンバージョンに更新してください。「マイナーエンジンバージョンの確認」および「マイナーエンジンバージョンの更新」をご参照ください。
チケットを起票チケットを起票し、インスタンス ID、自己管理型 Greenplum クラスターの IP アドレスおよびポート番号、データ移行権限を持つ Greenplum クラスターのアカウント、およびサーバーの IP アドレスを提供してください。
移行が完了するまでお待ちください。
IP アドレスホワイトリストを
0.0.0.0/0から、ビジネス運用に必要な IP アドレスに更新してください。データを検証した後、アプリケーションをインスタンスに接続してください。
OSS 外部テーブルを使用したデータ移行
Greenplum クラスターと AnalyticDB for PostgreSQL インスタンスが直接接続できない場合に、この方法をご利用ください。プロセスは、スキーマ移行、テーブルデータ移行、データ検証の 3 段階で構成されます。
スキーマ移行
自己管理型 Greenplum クラスターのマスターノードで、
pg_dumpallを使用して DDL スキーマをエクスポートします。export PGHOST=<自己管理型 Greenplum クラスターの IP アドレス> export PGPORT=<自己管理型 Greenplum クラスターのポート番号> export PGUSER=<自己管理型 Greenplum クラスターのスーパーユーザーアカウント> export PGPASSWORD=<スーパーユーザーアカウントのパスワード> # Greenplum 4X の場合 pg_dumpall -s -q --gp-syntax > full_schema.sql # Greenplum 5X または 6X の場合 pg_dumpall -s --gp-syntax > full_schema.sqlカスタムライブラリの有無を確認します。psql を使用して Greenplum クラスターに接続し、以下のコマンドを実行してください。
SELECT * FROM pg_catalog.pg_library;カスタムライブラリが存在する場合、AnalyticDB for PostgreSQL インスタンス上で対応するスキーマを手動で作成したうえで、次のステップに進んでください。
DDL スキーマを AnalyticDB for PostgreSQL インスタンスに適用します。
export PGHOST=<AnalyticDB for PostgreSQL インスタンスの IP アドレス> export PGPORT=<AnalyticDB for PostgreSQL インスタンスのポート番号> export PGUSER=<AnalyticDB for PostgreSQL インスタンスの特権アカウント> export PGPASSWORD=<特権アカウントのパスワード> psql postgres -f full_schema.sql > psql.log 2>&1 &「
psql.log」を確認してエラーを調べます。ほとんどのエラーは、SQL 構文の違い、特に Greenplum 4X に関連しています。互換性に関する詳細については、「AnalyticDB for PostgreSQL V4.3 と V6.0 の互換性比較」および「AnalyticDB for PostgreSQL V4.3 と V6.0 の非互換性の確認」をご参照ください。
テーブルデータ移行
ステップ 1:Greenplum クラスターからのデータエクスポート
以下のいずれかのエクスポート方法を選択してください。
オプション A:COPY TO
psql クライアントで COPY TO 文を実行します。
-- Works with Greenplum 4X, 5X, and 6X
COPY public.t1 TO '/data/gpload/public_t1.csv' FORMAT CSV ENCODING 'UTF8';Greenplum 5X または 6X の場合、ON SEGMENT を使用して並列エクスポートが可能です。
COPY public.t1 TO '<SEG_DATA_DIR>/public_t1_<SEGID>.csv' FORMAT CSV ENCODING 'UTF8' ON SEGMENT;<SEGID>プレースホルダーは変更しないでください — システムがエクスポート時に自動的に置き換えます。<SEG_DATA_DIR>はそのまま使用するか、絶対パスに置き換えてください。
オプション B:gpfdist 外部テーブル
gpfdist サービスを起動します。
mkdir -p /data/gpload gpfdist -d /data/gpload -p 8000 &psql を使用して Greenplum クラスターに接続し、データをエクスポートします。
-- Create a writable external table for public.t1 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 the external table INSERT INTO ext_w_t1 SELECT * FROM public.t1;
ステップ 2:Object Storage Service (OSS) へのデータアップロード
エクスポートされたファイルを OSS バケットにアップロードします。このバケットは、AnalyticDB for PostgreSQL インスタンスと同じリージョン内にある必要があります。詳細については、「オブジェクトのアップロード」をご参照ください。
ステップ 3:AnalyticDB for PostgreSQL へのデータインポート
OSS 外部テーブルを使用して、OSS から AnalyticDB for PostgreSQL インスタンスにデータを読み込みます。詳細については、「OSS データを AnalyticDB for PostgreSQL テーブルにインポート」をご参照ください。
移行結果の検証
以下の両方のチェックを実行し、移行が完了したことを確認してください。
データ整合性チェック。 ソースと送信先のテーブル間で行数および数値フィールドの集計値を比較します。大規模なテーブルの場合、サンプリングによる比較でも構いません。
業務整合性チェック。 アプリケーションを AnalyticDB for PostgreSQL インスタンスに接続し、業務クエリが正しく実行され、期待通りの結果が返されることを確認してください。