Data Transmission Service (DTS) は、ApsaraDB RDS for PostgreSQLインスタンスのデータベースや自己管理型PostgreSQLデータベースなど、2つのPostgreSQLデータベース間の双方向データ同期をサポートします。 この機能は、アクティブなgeo冗長性 (ユニットベース) やgeoディザスタリカバリなどのシナリオに適用されます。 このトピックでは、ApsaraDB RDS for PostgreSQLインスタンス間の双方向データ同期を設定する方法について説明します。
前提条件
ソースインスタンスとターゲットApsaraDB RDS for PostgreSQLインスタンスが作成されます。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスの作成」をご参照ください。
wal_levelパラメーターは、ソースインスタンスとターゲットApsaraDB RDS for PostgreSQLインスタンスに対してlogicalに設定されています。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。
制限事項
カテゴリ | 説明 |
ソースデータベースとターゲットデータベースの制限 |
|
その他の制限 |
|
特別なケース |
|
課金
同期タイプ | タスク設定料金 |
スキーマ同期と完全データ同期 | 無料です。 |
増分データ同期 | 有料。 詳細については、「課金の概要」をご参照ください。 |
サポートしている同期トポロジ
DTSは、2つのPostgreSQLデータベース間でのみ双方向データ同期をサポートします。 DTSは、複数のPostgreSQLデータベース間の双方向データ同期をサポートしていません。
競合の検出
データの一貫性を確保するために、同じプライマリキー、ビジネスプライマリキー、または一意のキーを持つデータレコードが、同期ノードの1つでのみ更新されるようにしてください。 両方のノードでデータレコードが更新された場合、DTSはデータ同期タスクに指定した競合解決ポリシーに基づいて競合に応答します。
DTS は競合をチェックして修正し、双方向同期インスタンスの安定性を最大化します。 DTS は以下のタイプの競合を検出できます。
INSERT 操作による一意性の競合
一意性の制約に従わないINSERT操作は同期できません。 たとえば、同じプライマリキー値を持つレコードがほぼ同時に2つの同期ノードに挿入された場合、挿入されたレコードのうちの1つは同期されません。 同じプライマリキー値を持つレコードが他のノードに既に存在するため、同期は失敗します。
UPDATE 操作が原因の整合性のないレコード
更新するレコードが同期先インスタンスに存在しない場合、DTS はUPDATE 操作を INSERT 操作に変換します。 ただし、一意性の競合が発生する可能性があります。
挿入するレコードの主キーまたは一意キーは、宛先インスタンス内の既存のレコードの主キーまたは一意キーと競合する場合があります。
存在しないレコードの削除
削除対象のレコードが同期先インスタンスに存在しない場合があります。 この場合、指定した競合解決ポリシーに関係なく、DTSはDELETE操作を無視します。
双方向同期時に、同期元インスタンスと同期先インスタンスのシステム時刻が異なる場合があります。 同期レイテンシが発生する可能性があります。 これらの理由により、DTSは、競合検出メカニズムがすべてのデータ競合を防ぐことができることを保証しません。 双方向同期を実行するには、同じプライマリキー、ビジネスプライマリキー、または一意のキーを持つレコードが、いずれかの同期ノードでのみ更新されるようにします。
DTS は、データの同期中に発生する可能性のある競合を防止するための競合解決ポリシーが用意されています。 双方向データ同期を設定するときに、競合解決ポリシーを選択できます。
同期可能なSQL操作
操作タイプ | SQL文 |
DML | 挿入、更新、および削除 |
DDL |
|
DDL操作は、ソースデータベースからターゲットデータベースへの順方向でのみ同期できます。 DDL操作は逆方向では無視されるため、DDL操作をターゲットデータベースからソースデータベースに同期することはできません。
手順
双方向データ同期用のインスタンスを購入します。 詳細については、「DTSインスタンスの購入」をご参照ください。
重要購入ページで、ソースインスタンスと宛先インスタンスの両方のパラメーターをPostgreSQLに設定し、同期トポロジパラメーターを双方向同期に設定します。
新しいDTSコンソールのデータ同期ページに移動します。
説明データ管理 (DMS) コンソール にログインすることもできます。 上部のナビゲーションバーで、[DTS] をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
ページの左上隅で、購入したデータ同期インスタンスが存在するリージョンを選択します。
データ同期インスタンスを見つけ、最初のデータ同期タスクの [操作] 列で [タスクの設定] をクリックします。
[タスク設定の編集] ウィザードで、ソースデータベースとターゲットデータベースを構成します。
警告ソースデータベースとターゲットデータベースを設定した後、ページの上部に表示される制限を読むことをお勧めします。 そうしないと、タスクが失敗したり、データの不一致が発生します。
セクション
パラメーター
説明
N/A
タスク名
タスクの名前。 DTSはタスクに名前を自動的に割り当てます。 タスクを簡単に識別できるように、わかりやすい名前を指定することをお勧めします。 一意のタスク名を指定する必要はありません。
ソースデータベース
データベースタイプ
移行元ディスクのタイプを設定します。 [PostgreSQL] を選択します。
アクセス方法
ソースデータベースのアクセス方法。 [Alibaba Cloudインスタンス] を選択します。
インスタンスリージョン
購入ページで選択したソースリージョン。 このパラメーターは変更できません。
インスタンスID
ソースApsaraDB RDS for PostgreSQLインスタンスのID。
データベース名
ソースApsaraDB RDS for PostgreSQLインスタンスのソースデータベースの名前。
データベースアカウント
ソースApsaraDB RDS for PostgreSQLインスタンスの特権アカウント。 アカウントは、ソースデータベースの所有者である必要があります。 ApsaraDB RDS For PostgreSQLインスタンスのアカウントを作成し、このアカウントに権限を付与する方法の詳細については、「アカウントの作成」および「データベースの作成」をご参照ください。
データベースパスワード
データベースアカウントのパスワードを設定します。
宛先データベース
データベースタイプ
ターゲットデータベースのタイプ。 [PostgreSQL] を選択します。
アクセス方法
ターゲットデータベースのアクセス方法。 [Alibaba Cloudインスタンス] を選択します。
インスタンスリージョン
購入ページで選択したターゲットリージョン。 このパラメーターは変更できません。
インスタンスID
移行先のApsaraDB RDS for PostgreSQLインスタンスのID。
データベース名
移行先ApsaraDB RDS for PostgreSQLインスタンスの移行先データベースの名前。
データベースアカウント
移行先ApsaraDB RDS for PostgreSQLインスタンスの特権アカウント。 アカウントは、ターゲットデータベースの所有者である必要があります。 ApsaraDB RDS For PostgreSQLインスタンスのアカウントを作成し、このアカウントに権限を付与する方法の詳細については、「アカウントの作成」および「データベースの作成」をご参照ください。
データベースパスワード
データベースアカウントのパスワードを設定します。
ページの下部で、[接続をテストして続行] をクリックします。
ソースまたはターゲットデータベースがAlibaba Cloudデータベースインスタンス (ApsaraDB RDS for MySQLインスタンスやApsaraDB for MongoDBインスタンスなど) の場合、DTSは自動的にDTSサーバーのCIDRブロックをインスタンスのホワイトリストに追加します。 ソースデータベースまたはターゲットデータベースがElastic Compute Service (ECS) インスタンスでホストされている自己管理データベースの場合、DTSサーバーのCIDRブロックがECSインスタンスのセキュリティグループルールに自動的に追加されます。ECSインスタンスがデータベースにアクセスできるようにする必要があります。 ソースデータベースまたはターゲットデータベースが、データセンターにデプロイされているか、サードパーティのクラウドサービスプロバイダーによって提供される自己管理データベースである場合、DTSサーバーのCIDRブロックをデータベースのホワイトリストに手動で追加して、DTSがデータベースにアクセスできるようにする必要があります。 詳細については、「DTSサーバーのCIDRブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
警告DTSサーバーのCIDRブロックがデータベースまたはインスタンスのホワイトリスト、またはECSセキュリティグループルールに自動的または手動で追加されると、セキュリティリスクが発生する可能性があります。 したがって、DTSを使用してデータを同期する前に、潜在的なリスクを理解して認識し、次の対策を含む予防策を講じる必要があります。VPNゲートウェイ、またはSmart Access Gateway。
同期するオブジェクトと詳細設定を設定します。
パラメーター
説明
同期タイプ
デフォルトでは、増分データ同期が選択されています。 [スキーマ同期] および [完全データ同期] も選択する必要があります。 事前チェックが完了すると、DTSは選択したオブジェクトの履歴データをソースインスタンスからターゲットインスタンスに同期します。 履歴データは、その後の増分同期の基礎となる。
説明[スキーマ同期] を選択した場合、DTSは同期するテーブルのスキーマをソースデータベースからターゲットデータベースに同期します。 スキーマは外部キーを含む。
競合するテーブルの処理モード
事前チェックエラーとレポートエラー: ターゲットデータベースに、ソースデータベースのテーブルと同じ名前のテーブルが含まれているかどうかを確認します。 ソースデータベースとターゲットデータベースに同じテーブル名のテーブルが含まれていない場合は、事前チェックに合格します。 それ以外の場合、事前チェック中にエラーが返され、データ同期タスクを開始できません。
説明オブジェクト名マッピング機能を使用して、ターゲットデータベースに同期されるテーブルの名前を変更できます。 この機能は、ソースデータベースとターゲットデータベースに同じテーブル名が含まれていて、ターゲットデータベースのテーブルを削除または名前変更できない場合に使用できます。 詳細については、「マップオブジェクト名」をご参照ください。
エラーを無視して続行: ソースデータベースとターゲットデータベースの同じテーブル名の事前チェックをスキップします。
警告[エラーを無視して続行] を選択すると、データの不整合が発生し、ビジネスが潜在的なリスクにさらされる可能性があります。
ソースデータベースとターゲットデータベースが同じスキーマを持ち、データレコードがターゲットデータベースの既存のデータレコードと同じ主キー値を持つ場合:
完全データ同期中、DTSはデータレコードをターゲットデータベースに同期しません。 ターゲットデータベースの既存のデータレコードが保持されます。
増分データ同期中、DTSはデータレコードをターゲットデータベースに同期します。 ターゲットデータベースの既存のデータレコードが上書きされます。
ソースデータベースとターゲットデータベースのスキーマが異なる場合、データの初期化に失敗したり、一部の列のみが同期されたり、データ同期タスクが失敗したりすることがあります。 注意して操作してください。
同期トポロジ
データ同期タスクの同期トポロジ。 双方向同期 を選択します。
DDL 操作を除外
Yes: DDL操作を除外します。
No: DDL操作を同期します。
重要DDL操作は、ソースデータベースからターゲットデータベースへの順方向でのみ同期できます。 DDL操作は、ターゲットデータベースからソースデータベースへの逆方向では無視されます。 したがって、このパラメーターは、タスクを順方向に設定した場合にのみ表示されます。
競合解決ポリシー
このトピックの [競合検出] セクションで説明されている競合が発生した場合は、ビジネス要件に基づいて競合解決ポリシーを選択します。
タスク失敗
データ同期中に競合が発生した場合、データ同期タスクはエラーを報告し、プロセスを終了します。 タスクが失敗状態になり、競合を手動で解決する必要があります。
無視する
データ同期中に競合が発生した場合、データ同期タスクは現在のステートメントを無視してプロセスを続行します。 宛先データベース内の競合するレコードが使用されます。
上書き
データ同期中に競合が発生した場合、ターゲットデータベース内の競合するレコードは上書きされます。
説明データ同期タスクを一時停止または再起動するときにレイテンシが発生した場合、選択した競合解決ポリシーはレイテンシの間は有効になりません。 デフォルトでは、同期先データベースのデータは、遅延中に同期されたデータによって上書きされます。
移行先インスタンスでのオブジェクト名の大文字化
ターゲットインスタンスのデータベース名、テーブル名、および列名の大文字化。 デフォルトでは、DTSデフォルトポリシーが選択されています。 他のオプションを選択して、オブジェクト名の大文字化をソースまたはターゲットデータベースの大文字化と一致させることができます。 詳細については、「ターゲットインスタンスのオブジェクト名の大文字化の指定」をご参照ください。
ソースオブジェクト
[ソースオブジェクト] セクションから1つ以上のオブジェクトを選択し、アイコンをクリックして [選択済みオブジェクト] セクションにオブジェクトを追加します。
説明同期するオブジェクトとして、列、テーブル、またはスキーマを選択できます。
選択中のオブジェクト
同期先のインスタンスに同期するオブジェクトの名前を変更するには、[選択済みオブジェクト] セクションでオブジェクトを右クリックします。 詳細については、「単一オブジェクトの名前のマッピング」をご参照ください。
一度に複数のオブジェクトの名前を変更するには、[選択済みオブジェクト] セクションの右上隅にある [一括編集] をクリックします。 詳細については、「一度に複数のオブジェクト名をマップする」をご参照ください。
説明特定のデータベースまたはテーブルで実行されたSQL操作を選択するには、[選択済みオブジェクト] セクションでオブジェクトを右クリックします。 表示されるダイアログボックスで、同期するSQL操作を選択します。
データをフィルタリングするWHERE条件を指定するには、[選択済みオブジェクト] セクションでテーブルを右クリックします。 表示されるダイアログボックスで、条件を指定します。 詳細については、「SQL条件を使用したデータのフィルタリング」をご参照ください。
オブジェクト名マッピング機能を使用してオブジェクトの名前を変更すると、そのオブジェクトに依存する他のオブジェクトの同期が失敗する可能性があります。
[次へ: 詳細設定] をクリックして詳細設定を構成します。
データ検証設定
データ検証機能の使用方法の詳細については、「データ検証の有効化」をご参照ください。
詳細設定
パラメーター
説明
タスクのスケジュールに使用する専用クラスターの選択
デフォルトでは、DTSはタスクを共有クラスターにスケジュールします。 このパラメーターを設定する必要はありません。 指定した仕様の専用クラスターを購入して、DTS同期タスクを実行できます。 詳細については、「DTS専用クラスターの概要」をご参照ください。
アラートの設定
データ同期タスクのアラートを設定するかどうかを指定します。 タスクが失敗するか、同期レイテンシが指定されたしきい値を超えると、アラート送信先は通知を受け取ります。 有効な値:
No: アラートを設定しません。
Yes: アラートを設定します。 この場合、アラートしきい値とアラート連絡先も設定する必要があります。 詳細については、「新しいDTSタスクのモニタリングとアラートの設定」をご参照ください。
失敗した接続の再試行時間
失敗した接続のリトライ時間範囲。 データ同期タスクの開始後にソースデータベースまたはターゲットデータベースの接続に失敗した場合、DTSはその時間範囲内ですぐに接続を再試行します。 有効な値: 10 ~ 1440 単位は分です。 デフォルト値: 720 パラメーターを30より大きい値に設定することを推奨します。 DTSが指定された時間範囲内にソースデータベースとターゲットデータベースに再接続すると、DTSはデータ同期タスクを再開します。 それ以外の場合、データ同期タスクは失敗します。
説明同じソースまたはターゲットデータベースを持つ複数のDTSタスクに対して異なるリトライ時間範囲を設定した場合、設定された最短のリトライ時間範囲が優先されます。
DTSが接続を再試行すると、DTSインスタンスに対して課金されます。 業務要件に基づいて再試行時間範囲を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。
その他の問題の再試行時間範囲。 たとえば、データ同期タスクの開始後にDDLまたはDML操作の実行に失敗した場合、DTSはその時間範囲内ですぐに操作を再試行します。 有効な値: 1 ~ 1440 単位は分です。 デフォルト値は 10 です。 パラメーターを10より大きい値に設定することを推奨します。 指定された時間範囲内で失敗した操作が正常に実行されると、DTSはデータ同期タスクを再開します。 それ以外の場合、データ同期タスクは失敗します。
重要ソースデータベースとターゲットデータベースで他の問題が発生した場合の再試行までの待機時間パラメーターの値は、[失敗した接続の再試行時間] パラメーターの値よりも小さくする必要があります。
完全移行率を制限するかどうか
完全データ移行中、DTSはソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを使用します。 これは、データベースサーバの負荷を増加させる可能性がある。 1 秒あたりのソースデータベースのクエリ率 QPS 、完全なデータ移行の BPS、および完全なデータ移行の BPSパラメーターをフルデータ同期タスク用に設定して、ターゲットデータベースへの負荷を軽減できます。
説明このパラメーターは、完全データ同期 が 同期タイプ として選択されている場合にのみ設定できます。
増分同期率を制限するかどうか
ターゲットデータベースへの負荷を軽減するために、増分データ同期タスク用に増分データ移行の RPSおよび増分データ移行の BPSパラメーターを設定できます。
環境タグ
DTSインスタンスを識別するために使用される環境タグ。 ビジネス要件に基づいて環境タグを選択できます。
ETL の設定
抽出、変換、および読み込み (ETL) 機能を有効にするかどうかを指定します。 詳細については、「ETLとは」をご参照ください。 有効な値:
Yes: ETL機能を設定します。 コードエディターでデータ処理ステートメントを入力できます。 詳細については、「データ移行またはデータ同期タスクでのETLの設定」をご参照ください。
No: ETL機能を設定しません。
ページの下部にある [次へ: タスク設定と事前チェック] をクリックします。
ポインタを 次:タスク設定の保存と事前チェック に移動し、[OpenAPIパラメーターのプレビュー] をクリックして、インスタンスを設定するために呼び出されるAPI操作のパラメーター設定を表示します。
説明データ同期タスクを開始する前に、DTSは事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にある [詳細の表示] をクリックします。 原因に基づいて問題をトラブルシューティングした後、再度事前チェックを実行します。
事前チェック中にアイテムに対してアラートがトリガーされた場合:
アラートアイテムを無視できない場合は、失敗したアイテムの横にある [詳細の表示] をクリックして問題のトラブルシューティングを行います。 次に、もう一度プレチェックを実行します。
アラート項目を無視できる場合は、[アラート詳細の確認] をクリックします。 [詳細の表示] ダイアログボックスで、[無視] をクリックします。 表示されたメッセージボックスで、[OK] をクリックします。 次に、[再度事前チェック] をクリックして、事前チェックを再度実行します。 アラート項目を無視すると、データの不整合が発生し、ビジネスが潜在的なリスクにさらされる可能性があります。
成功率が100% になるまで待ちます。 [戻る] をクリックします。
順方向のデータ同期タスクが開始されます。 タスクリストでタスクの進行状況を確認できます。
初期同期が完了し、順方向のデータ同期タスクが 実行中 状態になるまで待ちます。ステータス
逆方向でデータ同期タスクを見つけ、[タスクの設定] をクリックします。
ステップ5からステップ10までの操作を実行して、データ同期タスクを逆方向に設定します。
重要データ同期タスクを逆方向に設定する場合は、正しいソースインスタンスとターゲットインスタンスを選択する必要があります。 逆方向のソースインスタンスは、順方向の宛先インスタンスである。 逆方向の宛先インスタンスは、順方向のソースインスタンスである。 また、データベース名、アカウント、パスワードなどのパラメーター設定が一貫していることを確認する必要があります。
データ同期タスクのソースデータベースとターゲットデータベースを逆方向に設定する場合、インスタンスのリージョンパラメーターは変更できません。 逆方向のデータ同期タスクに設定する必要があるパラメーターの数は、順方向のデータ同期タスクの場合よりも少なくなります。 コンソールに表示されるパラメーターを設定します。
DTSが逆方向で競合するテーブルをチェックする場合、順方向でターゲットインスタンスに同期されたテーブルは無視されます。競合するテーブルの処理モード
逆方向のデータ同期タスクに対して、順方向のデータ同期タスクの選択したオブジェクトを選択することはできません。選択中のオブジェクト
データ同期タスクを逆方向に設定する場合は、オブジェクト名マッピング機能を使用しないことをお勧めします。 DDL 操作を実行すると、データの不整合が発生する可能性があります。
逆方向のデータ同期タスクが設定されたら、両方のタスクが 実行中 状態になるまで待ちます。 双方向データ同期が設定されています。ステータス