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は、ソースデータベースの一時テーブル、内部トリガー、またはCプログラミング言語で記述された一部の内部プロシージャと関数を同期できません。 DTSは、COMPOSITE、ENUM、およびRANGEタイプのカスタムパラメータを同期できます。同期するテーブルには、PRIMARY KEY、FOREIGN KEY、UNIQUE、またはCHECK制約が必要です。 |
その他の制限 |
|
特別なケース |
|
課金
同期タイプ | タスク設定料金 |
スキーマ同期と完全データ同期 | 無料です。 |
増分データ同期 | 有料。 詳細については、「課金の概要」をご参照ください。 |
サポートしている同期トポロジ
DTSは、2つのPostgreSQLデータベース間でのみ双方向データ同期をサポートします。 DTSは、複数のPostgreSQLデータベース間の双方向データ同期をサポートしていません。
競合の検出
データの一貫性を確保するために、同じプライマリキー、ビジネスプライマリキー、または一意のキーを持つデータレコードが、同期ノードの1つでのみ更新されるようにしてください。 両方のノードでデータレコードが更新された場合、DTSはデータ同期タスクに指定した競合解決ポリシーに基づいて競合に応答します。
DTS は競合をチェックして修正し、双方向同期インスタンスの安定性を最大化します。 DTS は以下のタイプの競合を検出できます。
INSERT 操作による一意性の競合
一意性の制約に従わないINSERT操作は同期できません。 たとえば、同じプライマリキー値を持つレコードがほぼ同時に2つの同期ノードに挿入された場合、挿入されたレコードのうちの1つは同期されません。 同じプライマリキー値を持つレコードが他のノードに既に存在するため、同期は失敗します。
UPDATE 操作が原因の整合性のないレコード
更新するレコードが同期先インスタンスに存在しない場合、DTS はUPDATE 操作を INSERT 操作に変換します。 ただし、一意性の競合が発生する可能性があります。
挿入するレコードの主キーまたは一意キーは、宛先インスタンス内の既存のレコードの主キーまたは一意キーと競合する場合があります。
存在しないレコードの削除
削除対象のレコードが同期先インスタンスに存在しない場合があります。 この場合、指定した競合解決ポリシーに関係なく、DTSはDELETE操作を無視します。
双方向同期時に、同期元インスタンスと同期先インスタンスのシステム時刻が異なる場合があります。 同期レイテンシが発生する可能性があります。 これらの理由により、DTSは、競合検出メカニズムがすべてのデータ競合を防ぐことができることを保証しません。 双方向同期を実行するには、同じプライマリキー、ビジネスプライマリキー、または一意のキーを持つレコードが、いずれかの同期ノードでのみ更新されるようにします。
DTS は、データの同期中に発生する可能性のある競合を防止するための競合解決ポリシーが用意されています。 双方向データ同期を設定するときに、競合解決ポリシーを選択できます。
同期するサポート対象オブジェクト
スキーマとテーブル。
説明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 | 挿入、更新、および削除 |
DDL |
|
DDL操作は、ソースデータベースからターゲットデータベースへの順方向でのみ同期できます。 DDL操作は逆方向では無視されるため、DDL操作をターゲットデータベースからソースデータベースに同期することはできません。
手順
双方向データ同期用のインスタンスを購入します。 詳細については、「DTSインスタンスの購入」をご参照ください。
重要購入ページで、ソースインスタンスと宛先インスタンスの両方のパラメーターをPostgreSQLに設定し、同期トポロジパラメーターを双方向同期に設定します。
Go to the
新しいDTSコンソールのデータ同期ページ。説明にログインすることもできます。
データ管理 (DMS) コンソール 上部のナビゲーションバーで、ポインタを [データ開発] に移動し、 を選択します。ページの左上隅で、購入したデータ同期インスタンスが存在するリージョンを選択します。
データ同期インスタンスを見つけて、タスクの設定最初のデータ同期タスクの [アクション] 列に表示されます。
ソースデータベースとターゲットデータベースを設定します。 下表に、各パラメーターを説明します。
警告ソースデータベースとターゲットデータベースを設定した後、ページに表示される制限を読むことを推奨します。 そうしないと、タスクが失敗したり、データの不一致が発生します。
セクション
パラメーター
説明
非該当
タスク名
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 操作を除外
Yes: DDL操作を除外します。
No: DDL操作を同期します。
重要DDL操作は、ソースデータベースからターゲットデータベースへの順方向でのみ同期できます。 DDL操作は、ターゲットデータベースからソースデータベースへの逆方向では無視されます。 したがって、このパラメーターは、タスクを順方向に設定した場合にのみ表示されます。
競合解決ポリシー
このトピックの [競合検出] セクションで説明されている競合が発生した場合は、ビジネス要件に基づいて競合解決ポリシーを選択します。
タスク失敗
データ同期中に競合が発生した場合、データ同期タスクはエラーを報告し、プロセスを終了します。 タスクが失敗状態になり、競合を手動で解決する必要があります。
無視する
データ同期中に競合が発生した場合、データ同期タスクは現在のステートメントを無視してプロセスを続行します。 宛先データベース内の競合するレコードが使用されます。
上書き
データ同期中に競合が発生した場合、ターゲットデータベース内の競合するレコードは上書きされます。
説明データ同期タスクを一時停止または再起動するときにレイテンシが発生した場合、選択した競合解決ポリシーはレイテンシの間は有効になりません。 デフォルトでは、同期先データベースのデータは、遅延中に同期されたデータによって上書きされます。
移行先インスタンスでのオブジェクト名の大文字化
ターゲットインスタンスのデータベース名、テーブル名、および列名の大文字化。 デフォルトでは、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インスタンスを識別するために使用される環境タグ。 ビジネス要件に基づいて環境タグを選択できます。 この例では、環境タグは選択されていません。
モニタリングとアラート
データ同期タスクのアラートを設定するかどうかを指定します。 タスクが失敗するか、同期レイテンシが指定されたしきい値を超えると、アラート送信先は通知を受け取ります。 有効な値:
No: アラートを有効にしません。
Yes: アラートを設定します。 この場合、アラートしきい値と
アラート通知設定 詳細については、「モニタリングとアラートの設定」トピックの「DTSタスクの作成時のモニタリングとアラートの設定」をご参照ください。
[次のステップ: データ検証] をクリックしてデータ検証を設定します。
データ検証機能の使用方法の詳細については、「データ検証タスクの設定」をご参照ください。
タスク設定を保存し、事前チェックを実行します。
関連するAPI操作を呼び出してDTSタスクを設定するときに指定するパラメーターを表示するには、ポインターを 次:タスク設定の保存と事前チェック に移動し、OpenAPI パラメーターのプレビュー をクリックします。
パラメーターを表示または表示する必要がない場合は、ページ下部の 次:タスク設定の保存と事前チェック をクリックします。
説明データ同期タスクを開始する前に、DTSは事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。
データ同期タスクが事前チェックに失敗した場合は、失敗した各項目の横にある [詳細の表示] をクリックします。 チェック結果に基づいて原因を分析した後、問題のトラブルシューティングを行います。 次に、プレチェックを再実行します。
事前チェック中にアイテムに対してアラートがトリガーされた場合:
アラートアイテムを無視できない場合は、失敗したアイテムの横にある [詳細の表示] をクリックして、問題のトラブルシューティングを行います。 次に、もう一度プレチェックを実行します。
アラート項目を無視できる場合は、[アラート詳細の確認] をクリックします。 [詳細の表示] ダイアログボックスで、[無視] をクリックします。 表示されたメッセージボックスで、[OK] をクリックします。 次に、[再度事前チェック] をクリックして、事前チェックを再度実行します。 アラート項目を無視すると、データの不整合が発生し、ビジネスが潜在的なリスクにさらされる可能性があります。
成功率が100% になるまで待ちます。 [戻る] をクリックします。
データ同期タスクを逆方向に設定します。
初期同期が完了し、順方向のデータ同期タスクが実行中状態になります。
逆方向のデータ同期タスクを見つけて、タスクの設定.
ステップ5からステップ9までの操作を実行して、データ同期タスクを逆方向に設定します。
重要データ同期タスクを逆方向に設定する場合は、正しいソースインスタンスとターゲットインスタンスを選択する必要があります。 逆方向のソースインスタンスは、順方向の宛先インスタンスである。 逆方向の宛先インスタンスは、順方向のソースインスタンスである。 また、データベース名、アカウント、パスワードなどのパラメーター設定が一貫していることを確認する必要があります。
データ同期タスクのソースデータベースとターゲットデータベースを逆方向に設定する場合、インスタンスのリージョンパラメーターは変更できません。 逆方向のデータ同期タスクに設定する必要があるパラメーターの数は、順方向のデータ同期タスクの場合よりも少なくなります。 コンソールに表示されるパラメーターを設定します。
DTSが逆方向で競合するテーブルをチェックする場合、順方向でターゲットインスタンスに同期されたテーブルは、競合するテーブルの処理モード で無視されます。
逆方向のデータ同期タスクに対して、順方向のデータ同期タスクの 選択中のオブジェクト を選択することはできません。
データ同期タスクを逆方向に設定する場合は、オブジェクト名マッピング機能を使用しないことをお勧めします。 DDL 操作を実行すると、データの不整合が発生する可能性があります。
逆方向のデータ同期タスクが設定されたら、両方のタスクが 実行中 状態になるまで待ちます。 双方向データ同期が設定されています。