TiDBクラスター間でインクリメンタルデータをリアルタイムで複製する
このドキュメントでは、TiDBクラスタとそのセカンダリMySQLまたはTiDBクラスタを構成する方法、およびプライマリクラスタからセカンダリクラスタに増分データをリアルタイムで複製する方法について説明します。
増分データをリアルタイムで複製するために実行中のTiDBクラスタとそのセカンダリクラスタを構成する必要がある場合は、 バックアップと復元(BR) 、およびDumplingを使用しTiDB Binlog 。
実装の原則
TiDBに書き込まれる各トランザクションには、一意のコミットタイムスタンプ(コミットTS)が割り当てられます。このTSを介して、TiDBクラスタのグローバル整合性ステータスを取得できます。
クラスタデータは、グローバルに一貫した時点でBRまたはDumplingを使用してエクスポートされます。次に、この時点から、TiDBBinlogを使用して増分データを複製します。つまり、レプリケーションプロセスは、完全レプリケーションと増分レプリケーションの2つの段階に分けられます。
- フルバックアップを実行し、バックアップデータのコミットTSを取得します。
- インクリメンタルレプリケーションを実行します。インクリメンタルレプリケーションの開始時刻がバックアップデータのコミットTSであることを確認してください。
ノート:
バックアップデータのエクスポート後に取得されるコミットTSは、閉じた間隔です。 TiDB Binlogを使用してレプリケーションプロセスを開始した後に取得されるinitial-commit-tsは、オープンインターバルです。
レプリケーションプロセス
既存のクラスタAが正しく機能するとします。まず、クラスタAのセカンダリクラスタとして新しいクラスタBを作成してから、クラスタAの増分データをクラスタBにリアルタイムで複製する必要があります。手順については、次の手順を参照してください。
手順1.TiDBBinlogを有効にする
TiDB BinlogがクラスタAにデプロイされ、有効になっていることを確認してください。
ステップ2.すべてのクラスタデータをエクスポートする
次のツールのいずれかを使用して、クラスタAのデータを(グローバル整合性が確保された状態で)指定されたパスにエクスポートします。
グローバルに一貫したタイムスタンプを取得する
COMMIT_TS
:BR
validate
コマンドを使用して、バックアップタイムスタンプを取得します。例えば:COMMIT_TS=`br validate decode --field="end-version" -s local:///home/tidb/backupdata | tail -n1`または、 Dumplingメタデータを確認して、Pos(
COMMIT_TS
)を取得します。cat metadataStarted dump at: 2020-11-10 10:40:19 SHOW MASTER STATUS: Log: tidb-binlog Pos: 420747102018863124 Finished dump at: 2020-11-10 10:40:20
クラスタAのデータをクラスタBにエクスポートします。
ステップ3.増分データを複製する
次の構成を追加して、TiDB Binlogのdrainer.toml
の構成ファイルを変更し、TiDBBinlogがクラスタBへのデータの複製を開始するCOMMIT_TS
を指定します。
initial-commit-ts = COMMIT_TS
[syncer.to]
host = {the IP address of cluster B}
port = 3306