DTS は、ApsaraDB RDS for PostgreSQL や自主管理 PostgreSQL データベースなど、2 つの PostgreSQL データベース間でリアルタイムの双方向データ同期をサポートします。この機能は、アクティブ地理的冗長性(セルベースアーキテクチャ)やジオディザスタリカバリなどのユースケースに対応しています。本トピックでは、ApsaraDB RDS for PostgreSQL インスタンス間の双方向同期を例に、設定手順を説明します。他のデータソースの設定プロセスも同様です。
前提条件
-
ソースおよびターゲットの ApsaraDB RDS for PostgreSQL インスタンスが作成済みである必要があります。手順については、「ApsaraDB RDS for PostgreSQL インスタンスの作成」をご参照ください。
説明ソースおよびターゲットデータベースでサポートされているバージョンについては、「同期ソリューションの概要」をご参照ください。
-
ソースおよびターゲットの ApsaraDB RDS for PostgreSQL インスタンスについて、
wal_levelパラメーターをlogicalに設定する必要があります。手順については、「インスタンスパラメーターの設定」をご参照ください。
制限事項
タイプ | 説明 |
ソースおよびターゲットデータベースの制限 |
|
その他の制限 |
|
特殊なケース |
|
課金
同期タイプ | 料金 |
スキーマ同期および完全データ同期 | 無料です。 |
増分データ同期 | 課金対象です。詳細については、「課金概要」をご参照ください。 |
双方向同期トポロジ
DTS は、2 つの PostgreSQL データベース間の双方向データ同期のみをサポートします。
サポートされる競合検出
データ整合性を確保するため、双方向同期のデータベースインスタンスのいずれか一方でのみ、同じプライマリキー、ビジネスプライマリキー、または一意キーを持つデータレコードを更新するようにしてください。両方のデータベースインスタンスでデータレコードが更新された場合、DTS システムはタスクで設定された競合解決ポリシーを適用します。
DTS は競合をチェックおよび修正し、双方向同期タスクの安定性を最大化します。DTS は以下のタイプの競合を検出できます:
-
INSERT 操作による一意性競合
双方向同期において、同じプライマリキーを持つレコードが両方のデータベースインスタンスに同時に(またはほぼ同時に)挿入されると、一意制約競合が発生します。INSERT ステートメントがピアインスタンスに同期されると、同じプライマリキー値を持つレコードがすでに存在するため失敗します。
-
UPDATE 操作における不一致レコード
-
更新対象のレコードが宛先インスタンスに存在しない場合、DTS は UPDATE 操作を INSERT 操作に変換します。ただし、一意性競合が発生する可能性があります。
-
UPDATE 操作で更新されるレコードがプライマリキーまたは一意キー競合を引き起こす場合。
-
-
削除対象の存在しないレコード
削除対象のレコードが宛先インスタンスに存在しない場合、DTS は指定された競合解決ポリシーに関係なく DELETE 操作を無視します。
-
時差および遅延により、DTS は競合を 100% 防止できるとは限りません。整合性を確保するため、同じプライマリキーまたは一意キーを持つレコードは、一度に 1 つのデータベースインスタンスでのみ更新してください。
-
DTS は上記のデータ競合に対してさまざまな競合解決戦略を提供しており、双方向データ同期の設定時に選択できます。
サポートされるオブジェクト
-
スキーマおよびテーブル
説明これには、プライマリキー、一意キー、外部キー、DATATYPE(組み込みデータ型)、およびデフォルト制約が含まれます。
-
ビュー、プロシージャ(PostgreSQL 11 以降)、関数、ルール、シーケンス、拡張、トリガー、集約、インデックス、演算子、およびドメイン
サポートされる SQL 操作
|
操作タイプ |
SQL ステートメント |
|
DML |
|
|
DDL |
|
DDL 同期をサポートするのはフォワードタスク(ソースデータベースから宛先データベースへの同期)のみです。リバースタスク(宛先データベースからソースデータベースへの同期)は DDL 同期をサポートしておらず、DDL 操作を自動的にフィルターで除外します。
操作手順
-
双方向データ同期インスタンスを購入します。詳細については、「データ同期タスクの購入」をご参照ください。
重要購入ページで、PostgreSQL および PostgreSQL に PostgreSQL を選択し、双方向同期 に 双方向同期 を選択してください。
ログインして、新しい DTS 同期タスクページ。
説明Data Management (DMS) にログインすることもできます。上部のメニューバーで Data + AI を選択し、左側のナビゲーションウィンドウで を選択してください。
-
ページの左上隅で、宛先インスタンスが配置されているリージョンを選択します。
-
購入したデータ同期インスタンスを見つけ、その最初の同期タスクに対して タスクの設定 をクリックします。
-
ソースおよびターゲットデータベースを設定します。
警告ソースおよびターゲットインスタンスを選択した後、ページ上部に表示される制限事項をよくお読みください。制限事項に従わないと、タスクが失敗したり、データの不整合が発生したりする可能性があります。
カテゴリ
パラメーター
説明
該当なし
タスク名
DTS が自動的にタスク名を生成します。識別しやすいように、わかりやすい名前を指定することを推奨します。名前は一意である必要はありません。
移行元データベース
データベースタイプ
PostgreSQL を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスリージョン
購入時に選択したソースインスタンスのリージョンです。このパラメーターは変更できません。
インスタンス ID
ソース ApsaraDB RDS for PostgreSQL インスタンスの ID を選択します。
データベース名
ソース ApsaraDB RDS for PostgreSQL インスタンスで、同期対象オブジェクトを含むデータベースの名前を入力します。
データベースアカウント
ソース ApsaraDB RDS for PostgreSQL インスタンスの高権限アカウントを入力します。このアカウントは選択したデータベースの所有者である必要があります。アカウントの作成および権限付与の方法については、「アカウントの作成」および「データベースの作成」をご参照ください。
データベースパスワード
データベースアカウントに対応するパスワードを入力します。
暗号化
接続方法を選択します。この例では、非暗号化 を選択します。
SSL 暗号化を使用してデータベースに接続する必要がある場合は、SSL 暗号化 を選択し、必要に応じて CA 証明書、クライアント証明書、および クライアント証明書の秘密鍵 をアップロードします。その後、クライアント証明書の秘密鍵のパスワード を入力します。
説明-
自主管理 PostgreSQL データベースで SSL 暗号化 を選択する場合、CA 証明書 をアップロードする必要があります。
-
クライアント証明書を使用する必要がある場合は、クライアント証明書 および クライアント証明書の秘密鍵 の両方をアップロードし、クライアント証明書の秘密鍵のパスワード を入力する必要があります。
-
RDS for PostgreSQL インスタンスの SSL 暗号化機能については、「SSL 接続暗号化」をご参照ください。
移行先データベース
データベースタイプ
PostgreSQL を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスリージョン
購入時に選択した宛先インスタンスのリージョンです。このパラメーターは変更できません。
インスタンス ID
宛先 ApsaraDB RDS for PostgreSQL インスタンスの ID を選択します。
データベース名
宛先 ApsaraDB RDS for PostgreSQL インスタンスで、同期対象オブジェクトを含むデータベースの名前を入力します。
データベースアカウント
宛先 ApsaraDB RDS for PostgreSQL インスタンスの高権限アカウントを入力します。このアカウントは選択したデータベースの所有者である必要があります。アカウントの作成および権限付与の方法については、「アカウントの作成」および「データベースの作成」をご参照ください。
データベースパスワード
データベースアカウントに対応するパスワードを入力します。
暗号化
接続方法を選択します。この例では、非暗号化 を選択します。
SSL 暗号化を使用してデータベースに接続する必要がある場合は、SSL 暗号化 を選択し、必要に応じて CA 証明書、クライアント証明書、および クライアント証明書の秘密鍵 をアップロードします。その後、クライアント証明書の秘密鍵のパスワード を入力します。
説明-
自主管理 PostgreSQL データベースで SSL 暗号化 を選択する場合、CA 証明書 をアップロードする必要があります。
-
クライアント証明書を使用する必要がある場合は、クライアント証明書 および クライアント証明書の秘密鍵 の両方をアップロードし、クライアント証明書の秘密鍵のパスワード を入力する必要があります。
-
RDS for PostgreSQL インスタンスの SSL 暗号化機能については、「SSL 接続暗号化」をご参照ください。
-
設定が完了したら、ページ下部の 接続をテストして続行 をクリックします。
説明DTS サーバーからのアクセスを許可するために、ソースおよびターゲットデータベースのセキュリティ設定に DTS サーバーの IP アドレス CIDR ブロックが追加されていることを確認してください。これは自動的または手動で行えます。詳細については、「DTS サーバーの IP アドレス CIDR ブロックをホワイトリストに追加」をご参照ください。
ソースまたはターゲットデータベースが自己管理データベース(アクセス方法 が Alibaba Cloud インスタンス ではない)の場合、DTS サーバーの CIDR ブロック ダイアログボックスで 接続テスト をクリックする必要もあります。
-
タスクオブジェクトを設定します。
-
オブジェクト設定 ページで、同期するオブジェクトを設定します。
パラメーター
説明
同期タイプ
増分データ同期 が選択されています。デフォルトでは、スキーマ同期 および 完全データ同期 も選択する必要があります。事前チェック完了後、DTS は選択したオブジェクトの完全データ同期をソースインスタンスから宛先クラスターに実行します。これは、その後の増分データ同期のベースラインデータとなります。
説明スキーマ同期 を選択すると、DTS は外部キーを含む同期対象テーブルのスキーマをソースデータベースから宛先データベースに同期します。
競合するテーブルの処理モード
エラーの事前チェックと報告:宛先データベースに同じ名前のテーブルが存在するかどうかをチェックします。同じ名前のテーブルが存在しない場合、事前チェックは合格します。同じ名前のテーブルが存在する場合、事前チェックは失敗し、データ同期タスクは開始されません。
説明宛先データベースで同じ名前のテーブルを削除または名前変更できない場合は、別のテーブル名にマッピングできます。詳細については、「テーブル名およびカラム名のマッピング」をご参照ください。
エラーを無視して続行:宛先データベースでの重複テーブル名のチェックをスキップします。
警告エラーを無視して続行 を選択すると、データの不整合が発生し、ビジネスにリスクが及ぶ可能性があります。例:
テーブルスキーマが同じで、宛先データベースのレコードがソースデータベースのレコードと同じプライマリキーまたは一意キー値を持つ場合:
完全同期中、DTS は宛先クラスターのレコードを保持します。ソースデータベースの対応するレコードは同期されません。
増分同期中、ソースデータベースのレコードが宛先データベースのレコードを上書きします。
テーブルスキーマが異なる場合、初期データ同期が失敗する可能性があります。これにより、一部のカラムデータのみが同期されるか、完全に同期が失敗する可能性があります。慎重に進めてください。
同期トポロジ
双方向同期 を選択します。
DDL 操作を除外
-
○:DDL 操作は同期されません。
-
いいえ:DDL 操作は同期されます。
重要双方向同期リンクの安定性を確保するため、フォワード同期タスク(ソースデータベースから宛先データベースへの同期)でのみ DDL 操作の同期を選択できます。リバース同期タスク(宛先データベースからソースデータベースへの同期)では、DDL 操作は自動的にフィルターで除外されます。
競合解決ポリシー
前述の 競合タイプ が発生した場合、ビジネス要件に基づいて競合解決ポリシーを選択します。
Taskfailed (競合が発生した場合、エラーが報告されタスクは終了します。)
同期中にデータ競合が発生すると、タスクはエラーを報告して停止します。タスクは失敗状態になり、手動での介入が必要です。
Ignore (競合が発生した場合、移行先インスタンスの競合レコードが使用されます。)
同期中にデータ競合が発生すると、現在の同期ステートメントはスキップされ、プロセスは継続します。宛先データベースの競合レコードが保持されます。
Overwrite (競合が発生した場合、移行先インスタンスの競合レコードは上書きされます。)
同期中にデータ競合が発生すると、宛先データベースの競合レコードが上書きされます。
説明同期タスクが一時停止または再起動された後に遅延が発生した場合、これらのポリシーは遅延期間中は適用されません。宛先データベースのデータはデフォルトで上書きされます。
移行先インスタンスでのオブジェクト名の大文字化
宛先インスタンスに同期されるデータベース、テーブル、カラムオブジェクト名の大文字小文字の扱いポリシーを設定できます。デフォルトでは、DTS のデフォルトポリシー が選択されています。ソースおよび宛先データベースのデフォルトポリシーを使用することもできます。詳細については、「宛先オブジェクト名の大文字小文字の扱いポリシー」をご参照ください。
ソースオブジェクト
ソースオブジェクト ボックスで、同期するオブジェクトをクリックし、
をクリックして 選択中のオブジェクト ボックスに移動させます。説明-
スキーマレベルまたはテーブルレベルで同期するオブジェクトを選択できます。テーブルを同期オブジェクトとして選択した場合、ビュー、トリガー、ストアドプロシージャなどの他のオブジェクトはターゲットデータベースに同期されません。
-
同期対象のテーブルに SERIAL 型のフィールドが含まれ、同期タイプ で スキーマ同期 を選択する場合、シーケンス またはスキーマ全体を同期することを推奨します。
選択中のオブジェクト
宛先インスタンスで単一の同期オブジェクトの名前を変更するには、選択中のオブジェクト ボックスでオブジェクトを右クリックします。オブジェクトの名前変更の詳細については、「単一のデータベース、テーブル、またはカラムのマッピング」をご参照ください。
宛先インスタンスで複数の同期オブジェクトの名前を一括で変更するには、選択中のオブジェクト ボックスの右上隅にある 一括編集 をクリックします。詳細については、「データベース、テーブル、およびカラムの一括マッピング」をご参照ください。
説明-
特定のスキーマまたはテーブルに対して同期する SQL 操作を選択するには、選択中のオブジェクト ボックスでオブジェクトを右クリックします。表示されるダイアログボックスで、必要な SQL 操作を選択します。
-
データをフィルターする WHERE 条件を指定するには、選択中のオブジェクト ボックスでテーブルを右クリックします。表示されるダイアログボックスで、フィルター条件を指定します。詳細については、「SQL 条件を使用したデータのフィルター」をご参照ください。
-
オブジェクト名マッピング機能を使用してオブジェクトの名前を変更した場合、名前変更されたオブジェクトに依存する他のオブジェクトの同期が失敗する可能性があります。
-
詳細設定へ をクリックして、詳細パラメーターを設定します。
パラメーター
説明
タスクのスケジュールに使用する専用クラスターの選択
デフォルトでは、DTS は共有クラスター上でタスクをスケジューリングするため、クラスターを選択する必要はありません。より安定したパフォーマンスを求める場合は、DTS 同期タスクを実行するための専用クラスターを購入できます。詳細については、「DTS 専用クラスターとは」をご参照ください。
失敗した接続の再試行時間
同期タスク開始後、ソースまたはターゲットデータベースへの接続が失敗した場合、DTS はエラーを報告し、直ちに接続の再試行を開始します。デフォルトの再試行時間は 720 分です。10 分から 1,440 分の範囲でカスタム再試行時間を指定することもできます。30 分以上に設定することを推奨します。指定された時間内に DTS がデータベースへの再接続に成功した場合、同期タスクは自動的に再開されます。そうでない場合、タスクは失敗します。
説明同じソースまたは宛先を共有する複数の DTS インスタンス(例:インスタンス A とインスタンス B)があり、インスタンス A のネットワーク再試行時間を 30 分、インスタンス B を 60 分に設定した場合、両方に 30 分という短い時間が適用されます。
DTS は接続再試行期間中もタスクランタイムに対して課金するため、ビジネスニーズに基づいて再試行時間をカスタマイズするか、ソースおよびターゲットデータベースインスタンスをリリースした後は速やかに DTS インスタンスをリリースすることを推奨します。
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。
同期タスク開始後、ソースまたはターゲットデータベースで接続以外の問題(DDL または DML 実行例外など)が発生した場合、DTS はエラーを報告し、直ちに継続的な再試行操作を開始します。デフォルトの再試行時間は 10 分です。1 分から 1,440 分の範囲で再試行時間をカスタマイズすることもできます。10 分以上に設定することを推奨します。設定された再試行時間内に関連操作が成功した場合、同期タスクは自動的に再開されます。そうでない場合、タスクは失敗します。
重要移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。 の値は、失敗した接続の再試行時間 の値よりも小さくする必要があります。
完全同期レートを制限するかどうか
完全同期ステージ中、DTS はソースおよびターゲットデータベースの読み取り・書き込みリソースを消費し、データベース負荷が増加する可能性があります。ソースおよびターゲットデータベースの負荷を軽減するため、1 秒あたりのソースデータベースのクエリ率 QPS、1 秒あたりの完全移行の行数 RPS、および 1 秒あたりの完全移行データ量 (MB) BPS パラメーターを設定して、完全同期タスクのレート制限を設定できます。
説明この設定項目は、同期タイプ が 完全データ同期 に設定されている場合にのみ利用可能です。
同期インスタンス実行後も、完全同期レートを調整 できます。
増分同期率を制限するかどうか
増分同期タスクのレート制限を設定することもできます。宛先データベースの負荷を軽減するため、1 秒あたりの増分同期の行数 RPS および 1 秒あたりの増分同期データ量 (MB) BPS を設定します。
環境タグ
ビジネス要件に基づいてインスタンスを識別するための環境タグを選択できます。この例では、タグを選択する必要はありません。
ETL 機能の設定
抽出・変換・書き出し (ETL) 機能を有効にするかどうかを選択します。詳細については、「ETL とは」をご参照ください。有効値:
-
○:ETL 機能を有効にします。コードエディタにデータ処理ステートメントを入力します。詳細については、「データ移行またはデータ同期タスクでの ETL の設定」をご参照ください。
-
×:ETL 機能を無効にします。
監視アラート
アラートを設定するかどうかを指定します。同期が失敗した場合や、遅延が指定されたしきい値を超えた場合、アラート連絡先に通知が送信されます。
×:アラートは設定されません。
○:アラートのしきい値を設定し、アラート通知を指定してアラートを設定します。詳細については、「タスク設定時のモニタリングとアラートの設定」をご参照ください。
次へ:データ検証 をクリックして、データ検証タスクを設定します。
データ検証機能を使用する場合は、「データ検証の設定」の設定手順をご参照ください。
-
タスクを保存して事前チェックを実行します。
このインスタンスを設定するための API パラメーターを表示するには、次:タスク設定の保存と事前チェック ボタンにカーソルを合わせ、表示されるバルーンで OpenAPI パラメーターのプレビュー をクリックします。
API パラメーターの確認が完了したら、ページ下部の 次:タスク設定の保存と事前チェック をクリックします。
説明同期ジョブ開始前に、DTS は事前チェックを実行します。すべての事前チェック項目が合格した場合にのみ、ジョブを開始できます。
事前チェックが失敗した場合、失敗した項目の横にある 詳細を表示 をクリックします。表示された指示に従って問題を修正し、再度事前チェックを実行します。
事前チェックで警告が返された場合:
チェック項目が失敗し、無視できない場合は、項目の横にある 詳細を表示 をクリックします。指示に従って問題を修正し、再度事前チェックを実行します。
無視可能なチェック項目の場合は、アラートの詳細を確認、無視、OK、および 再度事前チェックを実行 を順にクリックして、警告をスキップして事前チェックを再実行します。警告項目をマスクすると、データの不整合などの問題が発生し、ビジネスにリスクが及ぶ可能性があります。
-
成功率 が 100% になったら、戻る をクリックします。
-
リバース同期タスクを設定します。
-
ステータス が 実行中 に変わるまで待ちます。
-
リバース同期タスクを見つけ、タスクの設定 をクリックします。
-
ステップ 5 から ステップ 9 に従って、リバース同期タスクを設定します。
重要-
リバース同期タスクを設定する際は、ソースおよび宛先インスタンスを入れ替える必要があります。つまり、フォワードタスクの宛先がリバースタスクのソースとなり、その逆も同様です。また、データベース名、アカウント、パスワードなど、他のすべてのインスタンス情報が正確かつ一貫していることを確認してください。
-
リバース同期タスクのソースおよびターゲットデータベースの インスタンスのリージョン は変更できません。フォワード同期タスクよりも必要なパラメーターが少なくなります。コンソールに表示されるパラメーターを設定してください。
-
リバース同期タスクの 競合するテーブルの処理モード 設定は、フォワード同期タスクによって宛先インスタンスに同期されたテーブルをチェックしません。
-
リバース同期タスクは、フォワード同期タスクの 選択中のオブジェクト リストで指定されたオブジェクトの同期をサポートしていません。
-
リバース同期タスクを設定する際は、オブジェクト名マッピング機能を使用しないことを推奨します。使用すると、データの不整合が発生する可能性があります。
-
-
-
リバース同期タスクの設定後、両方のタスクの ステータス が 実行中 に変わるのを待ちます。これで双方向データ同期の設定が完了します。
