機能概要
データ同期機能とは、2つのデータソース間のデータをリアルタイムに同期することを指し、クラウド上とクラウド下のマルチアクティブ、異地マルチアクティブ、クロスボーダーデータ同期、およびリアルタイムデータウェアハウスなどのビジネスシナリオに適用できます。
データ同期はデータ移行とは異なります。データ移行はデータベース全体の移行を目的としており、一度限りの短期的なタスクです。移行完了後、ユーザーは通常、手動による切り替え操作を行い、業務を新しいデータベースに接続する必要があります。一方、データ同期は継続的なタスクであり、タスク作成後はデータを継続的に同期し(ほぼリアルタイム同期)、ソースデータベースとターゲットデータベースのデータの一貫性を維持します。
Tencent Cloud DTSは、自社構築データベース、クラウドデータベース、サードパーティクラウドベンダーのデータベースなどをTencent Cloudデータベースに同期することをサポートしています。
クラウド上とクラウド下の同期:例えば、ローカルIDCの自社構築データベースをTencent Cloudデータベースインスタンスに同期し、かつ逆方向同期の確立をサポートすることで、クラウド上とクラウド下の双方向同期を実現します。
マルチクラウドベンダー間同期:サードパーティクラウドベンダーのデータベースをTencent Cloudデータベースインスタンスに同期し、デュアルクラウド同期を実現します。
Tencent Cloudデータベースインスタンス間同期:例えば、異地マルチアクティブ、クロスボーダーデータベース同期、異なるTencent Cloudアカウント配下のデータベースインスタンス同期などです。
実装原理
以下では、MySQL同期を例に説明します。全体の流れとしては、データをソースインスタンスからエクスポートし、ターゲットインスタンスにインポートします。主な手順には、構造初期化、全量データ初期化、および増分データ処理が含まれます。
構造初期化
構造初期化とは、ターゲットインスタンスにソースインスタンスと同じデータベース・テーブル構造情報を作成することです。同期タスク設定時に、ユーザーはデータベース・テーブル構造を同期するかどうかを選択できます。ターゲットインスタンスにソースインスタンスと同じ構造情報が既に作成されている場合は、データベース・テーブル構造情報を同期する必要はなく、データのみを同期すればよいです。それ以外の場合は、データベース・テーブル構造情報を同期する必要があります。
全量データ初期化
構造初期化が完了すると、DTSは既存データの初期化を実行します。つまり、ソースインスタンス内のすべての既存データをエクスポートし、ターゲットインスタンスにインポートします。
増分データ処理
増分データ処理は、ソースインスタンスのBinlogを通じて増分データを継続的に取得し、一連のフィルタリングおよび変換操作を行った後、増分データを中間ストレージに永続化します。全量データのインポートが完了した後、ターゲットインスタンス上で中間ストレージ上の増分変更データを継続的に再生し、これによりターゲットインスタンスとソースインスタンスのデータの一貫性を維持します。
データ競合処理
DTS同期タスクでは、ソースデータベースとターゲットデータベースのデータに競合が存在する可能性があります。DTSは、同名テーブル競合および主キー競合の検出をサポートしています。
同名テーブル競合
ターゲットデータベースとソースデータベースに同名テーブルが存在する場合、タスクがエラーを報告してユーザーに通知する(事前検証およびエラー報告)か、またはソースデータベースのデータをターゲットデータベースの同名テーブルに追加する(無視して続行する)ことを選択できます。
PK競合
競合エラー:同期タスク中に、ソースデータベースが挿入(INSERT)するPKデータがターゲットデータベースに存在するデータと競合する場合、タスクはエラーを報告して一時停止します。ユーザーが手動で処理した後にのみ続行できます。
競合無視:同期タスク中に、ソースデータベースのPK挿入(INSERT)データがターゲットデータベースと競合することを検出した場合、ソースデータベースのPK挿入データを無視し、ターゲットデータベースの内容を基準とします。
競合上書き:同期タスク中に、ソースデータベースのPK更新(INSERTおよびUPDATE)データがターゲットデータベースと競合することを検出した場合、ソースデータベースのPKデータでターゲットのPKデータを上書きします。
ロックフリーロジックの説明
MySQLの全量データレプリケーションでは、通常、ソースデータベースにグローバルロック(FTWRL)をかけて、増分データ同期のBinlogポジションを取得します。ただし、グローバルロックをかけるとソースデータベースの業務に影響を与え、短時間(秒単位)データの書き込みがブロックされる可能性があります。
DTSデータ同期では、技術アップグレードによりロック不要の同期方式を実現しました。全量データ同期時に、ソースデータベースにグローバルロック(FTWRL)をかける必要はありません。ここでいうロックあり、ロックなしはすべて全量データ同期を対象としており、つまり「初期化タイプ」パラメータで「全量データ初期化」を選択した場合です。その他の全量データ同期以外のシナリオでは、ロックあり、ロックなしのメカニズムは存在しません。
ロック不要をサポートするリンク
MySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL MySQL/TDSQL Boundless/Kafka間の同期リンクでは、全量同期段階でロック不要の同期を使用し、ソースデータベースにグローバルロック(FTWRL)をかける必要はなく、PKのないテーブルにのみテーブルロックをかけます。
特殊なロックありシナリオ
PK競合ポリシーで「競合エラー」を選択した場合、ロックあり同期を使用する必要があります。
ソースデータベースがAlibaba Cloud RDS 5.5/5.6、PolarDB 5.5/5.6、AWSのすべてのRDS MySQL、Aurora MySQLである場合、これらのリンク自体はデフォルトでロック不要です。ただし、これらのリンクでPK競合ポリシーとして「競合エラー」を選択した場合、全量データ同期段階では競合エラーが有効にならず、増分データ同期段階になって初めて競合ポリシーが正常に機能するようになります。
サポートされるトポロジー構造
同期サービスの基本単位は単方向同期です。設定時にDDL(Data Definition Language)、DML(Data Manipulation Language)の同期を選択できます。単方向同期を組み合わせることで、さまざまな複雑なトポロジーをカスタマイズできます。
複雑なトポロジーでは、DML操作について、技術的手段によってデータ循環の発生を回避します。一方、DDLについては、データ同期サービスが設定時に循環検出を行い、DDL循環の形成を回避します。
一対一単方向同期
カスケード単方向同期
一対多単方向同期
多対一単方向同期
双方向同期
カスケード双方向同期
代表的なユースケース
異地双活
DTSデータ同期サービスを通じて複数地域のデータベース間にデータのリアルタイム同期を確立することで、異地双活を実現できます。各地域のデータベースインスタンスは、クラウド上で実行することも、企業の自社データセンターで実行することもできます。
多対一同期
DTS多対一同期を通じて、異なるデータベース上のデータを同じターゲットデータベースに集約することで、ビジネスデータの統合と集計分析を容易にします。
Kafkaに同期
DTSはソースデータベースのデータをKafkaに配信することをサポートしており、ユーザーがソースデータベースの全量+増分データを取得するのに便利です。データアーカイブやデータ分析などのシナリオに応用できます。
制約事項
一方向同期の組み合わせによって実現される双方向同期には、以下の制限が存在します:
データの一貫性を維持するには、ユーザー業務の協力が必要です。2つのノードで同じ主キーデータを更新しないでください。主キーの競合や相互上書きを避けてください。例えば、Aノードは1、3、5の主キーデータを更新し、Bノードは2、4、6の主キーデータを更新します。
データ同期の競合が発生した場合、DTSはユーザーが選択した競合ポリシーに厳密に従ってデータを処理します。設定時に、対応する競合処理がビジネスの期待に沿っていることを確認してください。
DML文は双方向同期をサポートし、DDL文は単方向同期のみをサポートします。双方向同期を構築するには、いずれかの単方向インスタンスでDDL同期を無効にしてください。
サポートされるデータベースタイプ
サポートされる機能一覧
|
双方向同期、リング同期、多対一同期をサポートします。 | 複雑な同期トポロジー構造をサポートします。双方向同期、リング同期、多対一同期などです。 | |
| 異なるTencent Cloudアカウント配下のインスタンス間データ同期をサポートします。 | |
大部分のデータベースのバージョン間同期をサポートします。 | ターゲットデータベースのバージョンがソースデータベース以上であれば問題ありません。例えば、5.5.xバージョンは5.5.x、5.6.xおよびそれ以降のバージョンへの同期をサポートします。最後の桁はマイナーバージョンであり、マイナーバージョンは制限されません。 | |
データベース・テーブル競合チェックをサポートします。 | データベース・テーブル名重複競合チェックポリシーを提供します。 | |
| 以下の3種類のPK競合処理ポリシーをサポートします。 競合エラー:同期中にテーブルPKの競合を検出した場合、エラーを報告し、データ同期タスクを一時停止します。 競合無視:同期中にテーブルPKの競合を検出した場合、ターゲットデータベースのPKレコードを保持します。 競合上書き:同期中にテーブルPKの競合を検出した場合、ソースデータベースのPKレコードでターゲットデータベースのPKレコードを上書きします。 | |
DMLおよびDDLのフィルタリングをサポートします。 | 同期データタイプの選択をサポートします。Insert、Update、Deleteが含まれます。 具体的なDDL操作の選択をサポートします。例えば、CREATE TABLE、CREATE VIEW、DROP INDEXなどです。 | |
| 単一テーブルに対するカスタムフィルター条件の設定をサポートします。 | |
同期ビューおよび高度なオブジェクトをサポートします。 | ビュー、ストアドプロシージャ、関数の同期をサポートします。 | |
ロックなし同期をサポートします。 | ロックなし同期とは、フルデータ同期段階でソースデータベースにグローバルロック(FTWRL)をかけず、PKのないテーブルにのみテーブルロックをかけ、その他にはロックをかけないことを指します。 | - |
| 同期のステップと進捗データの表示をサポートします。 | |
メトリクス監視とイベントアラートをサポートします。 | データ同期の各指標の監視をサポートします。 データ同期イベントの監視をサポートしています。イベント異常時には自動的にユーザーへ通知します。 | |
インスタンスの再起動またはアップグレードをサポートします。 | 増分同期中に、ソースインスタンスとターゲットインスタンスの再起動またはアップグレードをサポートします。 | |
| GTIDを有効にしている場合、ソースインスタンスのHA切り替えをサポートします。 ターゲットインスタンスのHA切り替えをサポートします。 | |
Online DDL一時テーブルの同期をサポートします。 | gh-ost、pt-oscツールを使用してソースデータベース内のテーブルに対してOnline DDLを実行する場合、DTSはOnline DDLの変更によって生成された一時テーブルをターゲットデータベースに同期することをサポートします。 | |
同期設定の変更をサポートします。 | タスクの実行中に、同期オブジェクトの追加や削除、SQL同期ポリシーの変更などがサポートされます。 | |
タスクの一時停止をサポートします。 | タスクの開始後、ソースデータベースの接続数が多すぎる場合や業務の調整が必要な場合、ユーザーはタスクを一時停止し、業務の調整が完了した後に同期タスクを再開できます。 | |
自動再試行をサポートします。 | 同期タスクがネットワーク異常などによって一時的に中断された場合、DTSは設定された時間内に自動的にタスクを再試行および再開し、ユーザーによる手動操作は不要です。 | |
SSLセキュア接続 | DTSとソース/ターゲットデータベース間の伝送チャネルはSSL安全接続をサポートし、伝送チャネルを暗号化します。 | - |
XAトランザクションをサポートします。 | ソースデータベースで実行されたXAトランザクション操作を識別し、ターゲット側に同期されるデータはXAトランザクションのロジックに従って解析されます。
ソースデータベースでXAトランザクションのロールバックが発生した場合、ソースデータベース上のロールバックおよびロールバック前のSQL文はターゲット側に同期されません。 | - |