Data Transmission Service (DTS) は、2 つの ApsaraDB RDS for PostgreSQL データベース間の双方向データ同期をサポートしています。この機能は、アクティブ ジオレプリケーション(ユニットベース)や ジオディザスタリカバリなどのシナリオに適用されます。
前提条件
ソースとターゲットの ApsaraDB RDS for PostgreSQL インスタンスが作成されていること。詳細については、「ApsaraDB RDS for PostgreSQL インスタンスを作成する」をご参照ください。
説明ソースデータベースとターゲットデータベースのサポートされているバージョンの詳細については、「データ同期シナリオの概要」をご参照ください。
wal_level パラメータが、ソースとターゲットの ApsaraDB RDS for PostgreSQL インスタンスで logical に設定されていること。詳細については、「ApsaraDB RDS for PostgreSQL インスタンスのパラメータを変更する」をご参照ください。
制限事項
カテゴリ | 説明 |
ソースデータベースとターゲットデータベースの制限 |
DTS は、ソースデータベースの一時テーブル、内部トリガー、または C プログラミング言語で記述された一部の内部プロシージャと関数を同期できません。DTS は、COMPOSITE、ENUM、および RANGE タイプのカスタムパラメータを同期できます。同期するテーブルには、PRIMARY KEY、FOREIGN KEY、UNIQUE、または CHECK 制約が必要です。 |
その他の制限 |
|
特別なケース |
|
課金
| 同期タイプ | タスク構成料金 |
| スキーマ同期と完全データ同期 | 無料。 |
| 増分データ同期 | 有料。詳細については、「課金概要」をご参照ください。 |
サポートされている同期トポロジ
DTS は、2 つの PostgreSQL データベース間の双方向データ同期のみをサポートしています。DTS は、複数の PostgreSQL データベース間の双方向データ同期をサポートしていません。
競合の検出
データの整合性を確保するために、同じプライマリキー、ビジネスプライマリキー、または一意キーを持つデータレコードは、同期ノードのいずれか 1 つでのみ更新されるようにしてください。両方のノードでデータレコードが更新された場合、DTS はデータ同期タスクに指定した競合解決ポリシーに基づいて競合に対応します。
DTS は、双方向同期インスタンスの安定性を最大限に高めるために、競合をチェックして修正します。DTS は、次のタイプの競合を検出できます。
INSERT 操作によって発生する一意性競合
一意性制約に準拠していない INSERT 操作は同期できません。たとえば、同じプライマリキー値を持つレコードがほぼ同時に 2 つの同期ノードに挿入された場合、挿入されたレコードのいずれかが同期に失敗します。同期が失敗するのは、同じプライマリキー値を持つレコードが他のノードに既に存在するためです。
UPDATE 操作によって発生する不整合なレコード
更新するレコードがターゲットインスタンスに存在しない場合、DTS は UPDATE 操作を INSERT 操作に変換します。ただし、一意性競合が発生する可能性があります。
挿入するレコードのプライマリキーまたは一意キーが、ターゲットインスタンスの既存のレコードと競合する可能性があります。
削除するレコードが存在しない
削除するレコードがターゲットインスタンスに存在しません。この場合、DTS は、指定した競合解決ポリシーに関係なく、DELETE 操作を無視します。
双方向同期中、ソースインスタンスとターゲットインスタンスのシステム時間が異なる場合があります。同期レイテンシが発生する可能性があります。これらの理由により、DTS は競合検出メカニズムがすべてのデータ競合を防ぐことを保証しません。双方向同期を実行するには、同じプライマリキー、ビジネスプライマリキー、または一意キーを持つレコードが同期ノードのいずれか 1 つでのみ更新されるようにしてください。
DTS は、データ同期中に発生する可能性のある競合を防ぐための競合解決ポリシーを提供します。双方向データ同期を構成するときに、競合解決ポリシーを選択できます。
同期可能なオブジェクト
SCHEMA および TABLE。
説明PRIMARY KEY、UNIQUE KEY、FOREIGN KEY、DATATYPE (組み込みデータ型)、および DEFAULT CONSTRAINT を含みます。
VIEW、PROCEDURE (PostgreSQL V11 以降)、FUNCTION、RULE、SEQUENCE、EXTENSION、TRIGGER、AGGREGATE、INDEX、OPERATOR、および DOMAIN。
同期可能な SQL 操作
操作タイプ | SQL 文 |
DML | INSERT、UPDATE、および DELETE |
DDL |
|
DDL 操作は、ソースデータベースからターゲットデータベースへの順方向にのみ同期できます。DDL 操作は逆方向では無視されるため、ターゲットデータベースからソースデータベースに同期することはできません。
手順
双方向データ同期用のインスタンスを購入します。詳細については、「DTS インスタンスを購入する」をご参照ください。
重要購入ページで、ソースインスタンスとデスティネーションインスタンスの両方のパラメーターを [postgresql] に設定し、同期トポロジパラメーターを [双方向同期] に設定します。
新しい DTS コンソールのデータ同期ページ に移動します。
説明Data Management (DMS) コンソール にログインすることもできます。上部のナビゲーションバーで、[データ開発] にポインタを移動し、 を選択します。
ページの左上隅で、購入したデータ同期インスタンスが存在するリージョンを選択します。
データ同期インスタンスを見つけ、最初のデータ同期タスクの [アクション] 列にある [タスクの構成] をクリックします。
ソースデータベースとターゲットデータベースを構成します。次の表にパラメータを示します。
警告ソースデータベースとターゲットデータベースを構成した後、ページに表示される [制限事項] を読むことをお勧めします。そうしないと、タスクが失敗したり、データの不整合が発生したりする可能性があります。
セクション
パラメータ
説明
該当なし
タスク名
DTS タスクの名前。DTS はタスク名を自動的に生成します。タスクを簡単に識別できる説明的な名前を指定することをお勧めします。一意のタスク名を指定する必要はありません。
[ソースデータベース]
データベースタイプ
ソースデータベースのタイプ。[postgresql] を選択します。
アクセス方法
ソースデータベースのアクセス方法。[alibaba Cloud インスタンス] を選択します。
インスタンスリージョン
購入ページで選択したソースリージョン。このパラメータは変更できません。
インスタンス ID
ソース ApsaraDB RDS for PostgreSQL インスタンスの ID。
データベース名
ソース ApsaraDB RDS for PostgreSQL インスタンスのソースデータベースの名前。
データベースアカウント
ソース ApsaraDB RDS for PostgreSQL インスタンスの特権アカウント。アカウントはソースデータベースの所有者である必要があります。 ApsaraDB RDS for PostgreSQL インスタンスのアカウントを作成し、このアカウントに権限を付与する方法の詳細については、「アカウントを作成する」および「データベースを作成する」をご参照ください。
データベースパスワード
データベースへのアクセスに使用するパスワード。
暗号化
ソースデータベースへの接続を暗号化するかどうかを指定します。ビジネス要件に基づいてこのパラメータを構成できます。この例では、非暗号化 が選択されています。
ソースデータベースへの SSL 暗号化接続を確立する場合は、次の手順を実行します。 SSL 暗号化 を選択し、必要に応じて CA 証明書、クライアント証明書、および クライアント証明書の秘密鍵 をアップロードし、クライアント証明書の秘密鍵のパスワード を指定します。
説明自主管理 PostgreSQL データベースの [暗号化] を SSL 暗号化 に設定する場合は、CA 証明書 をアップロードする必要があります。
クライアント証明書を使用する場合は、クライアント証明書 と クライアント証明書の秘密鍵 をアップロードし、クライアント証明書の秘密鍵のパスワード を指定する必要があります。
ApsaraDB RDS for PostgreSQL インスタンスの SSL 暗号化を構成する方法については、「SSL 暗号化」をご参照ください。
[ターゲットデータベース]
データベースタイプ
ターゲットデータベースのタイプ。[postgresql] を選択します。
アクセス方法
ターゲットデータベースのアクセス方法。[alibaba Cloud インスタンス] を選択します。
インスタンスリージョン
購入ページで選択したターゲットリージョン。このパラメータは変更できません。
インスタンス ID
ターゲット ApsaraDB RDS for PostgreSQL インスタンスの ID。
[データベース名]
ターゲット ApsaraDB RDS for PostgreSQL インスタンスのターゲットデータベースの名前。
データベースアカウント
ターゲット ApsaraDB RDS for PostgreSQL インスタンスの特権アカウント。アカウントはターゲットデータベースの所有者である必要があります。 ApsaraDB RDS for PostgreSQL インスタンスのアカウントを作成し、このアカウントに権限を付与する方法の詳細については、「アカウントを作成する」および「データベースを作成する」をご参照ください。
データベースパスワード
データベースへのアクセスに使用するパスワード。
暗号化
ソースデータベースへの接続を暗号化するかどうかを指定します。ビジネス要件に基づいてこのパラメータを構成できます。この例では、非暗号化 が選択されています。
ソースデータベースへの SSL 暗号化接続を確立する場合は、次の手順を実行します。 SSL 暗号化 を選択し、必要に応じて CA 証明書、クライアント証明書、および クライアント証明書の秘密鍵 をアップロードし、クライアント証明書の秘密鍵のパスワード を指定します。
説明自主管理 PostgreSQL データベースの [暗号化] を SSL 暗号化 に設定する場合は、CA 証明書 をアップロードする必要があります。
クライアント証明書を使用する場合は、クライアント証明書 と クライアント証明書の秘密鍵 をアップロードし、クライアント証明書の秘密鍵のパスワード を指定する必要があります。
ApsaraDB RDS for PostgreSQL インスタンスの SSL 暗号化を構成する方法については、「SSL 暗号化」をご参照ください。
ページの下部にある 接続をテストして続行 をクリックします。
説明DTS サーバーの CIDR ブロックをソースデータベースとターゲットデータベースのセキュリティ設定に自動または手動で追加して、DTS サーバーからのアクセスを許可できることを確認してください。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
ソースデータベースまたはターゲットデータベースが自主管理データベースであり、その アクセス方法 が Alibaba Cloud インスタンス に設定されていない場合は、DTS サーバーの CIDR ブロック ダイアログボックスの 接続テスト をクリックします。
同期するオブジェクトを構成します。
オブジェクト設定 ステップで、同期するオブジェクトを構成します。
パラメータ
説明
同期タイプ
同期タイプ。デフォルトでは、[増分データ同期] が選択されています。[スキーマ同期] と [完全データ同期] も選択する必要があります。事前チェックが完了すると、DTS は選択したオブジェクトの既存データをソースデータベースからターゲットクラスタに同期します。既存データは、後続の増分同期の基礎となります。
説明[スキーマ同期] を選択すると、DTS は同期するテーブルのスキーマをソースデータベースからターゲットデータベースに同期します。スキーマには外部キーが含まれます。
競合するテーブルの処理モード
エラーの事前チェックと報告: ターゲットデータベースにソースデータベースのテーブルと同じ名前のテーブルが含まれているかどうかをチェックします。ソースデータベースとターゲットデータベースに同じテーブル名のテーブルが含まれていない場合、事前チェックは合格です。それ以外の場合、事前チェック中にエラーが返され、データ同期タスクを開始できません。
説明ソースデータベースとターゲットデータベースに同じ名前のテーブルが含まれており、ターゲットデータベースのテーブルを削除または名前変更できない場合は、オブジェクト名マッピング機能を使用して、ターゲットデータベースに同期されるテーブルの名前を変更できます。詳細については、「オブジェクト名をマッピングする」をご参照ください。
エラーを無視して続行: ソースデータベースとターゲットデータベースの同じテーブル名の事前チェックをスキップします。
警告エラーを無視して続行 を選択すると、データの不整合が発生し、ビジネスが潜在的なリスクにさらされる可能性があります。
ソースデータベースとターゲットデータベースのスキーマが同じで、ターゲットデータベースのデータレコードのプライマリキー値または一意キー値がソースデータベースのデータレコードと同じである場合:
完全データ同期中、DTS はデータレコードをターゲットデータベースに同期しません。ターゲットデータベースの既存のデータレコードは保持されます。
増分データ同期中、DTS はデータレコードをターゲットデータベースに同期します。ターゲットデータベースの既存のデータレコードは上書きされます。
ソースデータベースとターゲットデータベースのスキーマが異なる場合、データの初期化に失敗する可能性があります。この場合、一部の列のみが同期されるか、データ同期タスクが失敗します。注意して進めてください。
同期トポロジ
データ同期タスクの同期トポロジ。双方向同期 を選択します。
[厳密な1回書き込みを有効にする]
Exactly-Once 書き込み機能を有効にするかどうかを指定します。同期するオブジェクトにプライマリキーと UNIQUE 制約のないテーブルが含まれている場合は、○ を選択します。詳細については、「プライマリキーまたは UNIQUE 制約のないテーブルを同期する」をご参照ください。
DDL 操作を除外
[はい]: DDL 操作を除外します。
[いいえ]: DDL 操作を同期します。
重要DDL 操作は、ソースデータベースからターゲットデータベースへの順方向にのみ同期できます。DDL 操作は、ターゲットデータベースからソースデータベースへの逆方向では無視されます。したがって、このパラメータは、順方向にタスクを構成する場合にのみ表示されます。
競合解決ポリシー
このトピックの「競合の検出」セクションで説明されている競合が発生した場合は、ビジネス要件に基づいて競合解決ポリシーを選択してください。
[taskfailed]
データ同期中に競合が発生した場合、データ同期タスクはエラーを報告してプロセスを終了します。タスクは失敗状態になり、競合を手動で解決する必要があります。
[無視]
データ同期中に競合が発生した場合、データ同期タスクは現在の文を無視してプロセスを続行します。ターゲットデータベースの競合するレコードが使用されます。
[上書き]
データ同期中に競合が発生した場合、ターゲットデータベースの競合するレコードは上書きされます。
説明データ同期タスクを一時停止または再起動したときにレイテンシが発生した場合、選択した競合解決ポリシーはレイテンシ中には有効になりません。デフォルトでは、ターゲットデータベースのデータは、レイテンシ中に同期されたデータによって上書きされます。
移行先インスタンスでのオブジェクト名の大文字化
ターゲットインスタンスのデータベース名、テーブル名、および列名の大文字小文字。デフォルトでは、[DTS デフォルトポリシー] が選択されています。他のオプションを選択して、オブジェクト名の大文字小文字がソースデータベースまたはターゲットデータベースと一致するようにすることができます。詳細については、「ターゲットインスタンスのオブジェクト名の大文字小文字を指定する」をご参照ください。
ソースオブジェクト
ソースオブジェクト セクションから 1 つ以上のオブジェクトを選択し、
アイコンをクリックして、選択中のオブジェクト セクションにオブジェクトを追加します。説明列、テーブル、またはスキーマを同期するオブジェクトとして選択できます。
選択中のオブジェクト
ターゲットインスタンスに同期するオブジェクトの名前を変更するには、選択中のオブジェクト セクションでオブジェクトを右クリックします。詳細については、「オブジェクト名をマッピングする」トピックの「単一オブジェクトの名前をマッピングする」セクションをご参照ください。
複数のオブジェクトの名前を一度に変更するには、選択中のオブジェクト セクションの右上隅にある 一括編集 をクリックします。詳細については、「オブジェクト名をマッピングする」トピックの「一度に複数のオブジェクト名をマッピングする」セクションをご参照ください。
説明特定のデータベースまたはテーブルで実行される SQL 操作を選択するには、[選択したオブジェクト] セクションでオブジェクトを右クリックします。表示されるダイアログボックスで、同期する SQL 操作を選択します。
データをフィルタリングするための WHERE 条件を指定するには、[選択したオブジェクト] セクションのテーブルを右クリックします。表示されるダイアログボックスで、条件を指定します。詳細については、「SQL 条件を使用してデータをフィルタリングする」をご参照ください。
オブジェクト名マッピング機能を使用してオブジェクトの名前を変更すると、そのオブジェクトに依存する他のオブジェクトが同期に失敗する可能性があります。
次へ:詳細設定 をクリックして詳細設定を構成します。
パラメータ
説明
タスクのスケジュールに使用する専用クラスターの選択
デフォルトでは、専用クラスタを指定しない場合、DTS は共有クラスタにタスクをスケジュールします。データ同期タスクの安定性を向上させるには、専用クラスタを購入します。詳細については、「DTS 専用クラスタとは」をご参照ください。
失敗した接続の再試行時間
接続失敗時の再試行時間の範囲。データ同期タスクの開始後にソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTS は指定された時間範囲内で直ちに接続を再試行します。有効な値: 10 ~ 1440。単位: 分。デフォルト値: 720。このパラメータは 30 より大きい値に設定することをお勧めします。指定された時間範囲内に DTS がソースデータベースとターゲットデータベースに再接続すると、DTS はデータ同期タスクを再開します。それ以外の場合、データ同期タスクは失敗します。
説明同じソースデータベースまたはターゲットデータベースを持つ複数のデータ同期タスクに異なる再試行時間の範囲を指定した場合、最も短い再試行時間の範囲が優先されます。
DTS が接続を再試行すると、DTS インスタンスの料金が発生します。ビジネス要件に基づいて再試行時間の範囲を指定することをお勧めします。また、ソースインスタンスとターゲットインスタンスが解放された後、できるだけ早く DTS インスタンスを解放することもできます。
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。
その他の問題の再試行時間の範囲。たとえば、データ同期タスクの開始後に DDL または DML 操作の実行に失敗した場合、DTS は指定された時間範囲内で直ちに操作を再試行します。有効な値: 1 ~ 1440。単位: 分。デフォルト値: 10。このパラメータは 10 より大きい値に設定することをお勧めします。指定された時間範囲内に失敗した操作が正常に実行されると、DTS はデータ同期タスクを再開します。それ以外の場合、データ同期タスクは失敗します。
重要移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。 パラメータの値は、失敗した接続の再試行時間 パラメータの値よりも小さくなければなりません。
完全移行率を制限するかどうか
完全データ同期中、DTS はソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを使用します。これにより、データベースサーバーの負荷が増加する可能性があります。完全データ同期タスクの 1 秒あたりのソースデータベースのクエリ率 QPS、1 秒あたりの完全移行の行数 RPS、および 1 秒あたりの完全移行データ量 (MB) BPS パラメータを構成して、ターゲットデータベースサーバーの負荷を軽減できます。
説明このパラメータは、同期タイプ パラメータで 完全データ同期 が選択されている場合にのみ表示されます。
増分同期率を制限するかどうか
増分データ同期のスロットリングを有効にするかどうかを指定します。ビジネス要件に基づいて増分データ同期のスロットリングを有効にすることができます。スロットリングを構成するには、1 秒あたりの増分同期の行数 RPS パラメータと 1 秒あたりの増分同期データ量 (MB) BPS パラメータを構成する必要があります。これは、ターゲットデータベースサーバーの負荷を軽減します。
環境タグ
DTS インスタンスを識別するために使用される環境タグ。ビジネス要件に基づいて環境タグを選択できます。この例では、環境タグは選択されていません。
監視とアラート
データ同期タスクのアラートを構成するかどうかを指定します。タスクが失敗した場合、または同期レイテンシが指定されたしきい値を超えた場合、アラート連絡先に通知が送信されます。有効な値:
[いいえ]: アラートを有効にしません。
[はい]: アラートを構成します。この場合、アラートしきい値と アラート通知設定 も構成する必要があります。詳細については、「監視とアラートを構成する」トピックの「DTS タスクの作成時に監視とアラートを構成する」セクションをご参照ください。
[次のステップ: データ検証] をクリックしてデータ検証を構成します。
データ検証機能の使用方法の詳細については、「データ検証タスクを構成する」をご参照ください。
タスク設定を保存し、事前チェックを実行します。
関連する API 操作を呼び出して DTS タスクを構成するときに指定するパラメータを表示するには、次:タスク設定の保存と事前チェック にポインタを移動し、OpenAPI パラメーターのプレビュー をクリックします。
パラメータを表示する必要がない場合、または既に表示している場合は、ページの下部にある 次:タスク設定の保存と事前チェック をクリックします。
説明データ同期タスクを開始する前に、DTS は事前チェックを実行します。タスクが事前チェックに合格した後でのみ、データ同期タスクを開始できます。
データ同期タスクが事前チェックに失敗した場合は、失敗した各項目の横にある [詳細の表示] をクリックします。チェック結果に基づいて原因を分析した後、問題をトラブルシューティングします。次に、事前チェックを再実行します。
事前チェック中に項目のアラートがトリガーされた場合:
アラート項目を無視できない場合は、失敗した項目の横にある [詳細の表示] をクリックして問題をトラブルシューティングします。次に、事前チェックを再実行します。
アラート項目を無視できる場合は、[アラート詳細の確認] をクリックします。 [詳細の表示] ダイアログボックスで、[無視] をクリックします。表示されるメッセージで、[OK] をクリックします。次に、[再事前チェック] をクリックして事前チェックを再実行します。アラート項目を無視すると、データの不整合が発生し、ビジネスが潜在的なリスクにさらされる可能性があります。
[成功率] が [100%] になるまで待ちます。次に、[戻る] をクリックします。
逆方向のデータ同期タスクを構成します。
初期同期が完了し、順方向のデータ同期タスクが 実行中 状態になるまで待ちます。
逆方向のデータ同期タスクを見つけ、[タスクの構成] をクリックします。
手順 5 から 手順 9 で説明されている操作を実行して、逆方向のデータ同期タスクを構成します。
重要逆方向のデータ同期タスクを構成する場合は、正しいソースインスタンスとターゲットインスタンスを選択する必要があります。逆方向のソースインスタンスは、順方向のターゲットインスタンスです。逆方向のターゲットインスタンスは、順方向のソースインスタンスです。また、データベース名、アカウント、パスワードなどのパラメータ設定が一致していることを確認する必要があります。
逆方向のデータ同期タスクのソースデータベースとターゲットデータベースを構成する場合、インスタンスのリージョン パラメータは変更できません。逆方向のデータ同期タスクに必要なパラメータの数は、順方向のデータ同期タスクに必要なパラメータの数よりも少なくなります。コンソールに表示されるパラメータを構成します。
DTS が逆方向の競合するテーブルをチェックする場合、順方向でターゲットインスタンスに同期されたテーブルは、競合するテーブルの処理モード で無視されます。
逆方向のデータ同期タスクには、順方向のデータ同期タスクの 選択中のオブジェクト を選択できません。
逆方向のデータ同期タスクを構成する場合は、オブジェクト名マッピング機能を使用しないことをお勧めします。そうしないと、データの不整合が発生する可能性があります。
逆方向のデータ同期タスクが構成された後、両方のタスクが 実行中 状態になるまで待ちます。双方向データ同期が構成されます。
