TiDB アップストリームおよびダウンストリーム クラスタのデータ チェック
TiCDC を使用して TiDB のアップストリームおよびダウンストリーム クラスターを構築する場合、レプリケーションを停止せずにアップストリームおよびダウンストリーム データの整合性を検証する必要がある場合があります。通常のレプリケーション モードでは、TiCDC はデータが最終的に一貫していることのみを保証しますが、レプリケーション プロセス中にデータが一貫していることを保証することはできません。したがって、動的に変化するデータの整合性を検証することは困難です。そのようなニーズを満たすために、TiCDC は Syncpoint 機能を提供します。
Syncpoint は、TiDB が提供するスナップショット機能を使用し、TiCDC がレプリケーション プロセス中にアップストリームとダウンストリームのスナップショット間で一貫性を持つts-map
を維持できるようにします。このように、動的データの整合性を検証する問題は、静的なスナップショット データの整合性を検証する問題に変換され、ほぼリアルタイムの検証の効果が得られます。
同期点機能を有効にするには、レプリケーション タスクの作成時に TiCDC 構成項目の値をenable-sync-point
からtrue
に設定します。同期点を有効にした後、TiCDC は、データ複製プロセス中に TiCDC パラメータsync-point-interval
に従って定期的にアップストリームとダウンストリームのスナップショットを調整し、アップストリームとダウンストリームの TSO 対応をダウンストリームtidb_cdc.syncpoint_v1
テーブルに保存します。
次に、sync-diff-inspector でsnapshot
を構成するだけで、TiDB の上流と下流のクラスターのデータを検証できます。次の TiCDC 構成例では、作成されたレプリケーション タスクの同期点を有効にします。
# Enables SyncPoint.
enable-sync-point = true
# Aligns the upstream and downstream snapshots every 5 minutes
sync-point-interval = "5m"
# Cleans up the ts-map data in the downstream tidb_cdc.syncpoint_v1 table every hour
sync-point-retention = "1h"
ステップ 1: ts-map
を取得する
ts-map
を取得するには、下流の TiDB クラスターで次の SQL ステートメントを実行します。
select * from tidb_cdc.syncpoint_v1;
+------------------+----------------+--------------------+--------------------+---------------------+
| ticdc_cluster_id | changefeed | primary_ts | secondary_ts | created_at |
+------------------+----------------+--------------------+--------------------+---------------------+
| default | default_test-2 | 435953225454059520 | 435953235516456963 | 2022-09-13 08:40:15 |
+------------------+----------------+--------------------+--------------------+---------------------+
前述のsyncpoint_v1
表のフィールドは、次のように説明されています。
ticdc_cluster_id
: このレコードの TiCDC クラスターの ID。changefeed
: このレコードの変更フィードの ID。異なる TiCDC クラスターには同じ名前の変更フィードがある可能性があるため、変更フィードによって挿入されたts-map
を TiCDC クラスター ID と変更フィード ID で確認する必要があります。primary_ts
: アップストリーム データベース スナップショットのタイムスタンプ。secondary_ts
: ダウンストリーム データベース スナップショットのタイムスタンプ。created_at
: このレコードが挿入された時刻。
ステップ 2: スナップショットを構成する
ステップ1で取得したts-map
の情報を利用して、上流データベースと下流データベースのスナップショット情報を設定します。
Datasource config
セクションの設定例を次に示します。
######################### Datasource config ########################
[data-sources.uptidb]
host = "172.16.0.1"
port = 4000
user = "root"
password = ""
snapshot = "435953225454059520"
[data-sources.downtidb]
host = "172.16.0.2"
port = 4000
user = "root"
snapshot = "435953235516456963"
ノート:
- TiCDC が変更フィードを作成する前に、TiCDC 構成項目
enable-sync-point
の値がtrue
に設定されていることを確認してください。このようにしてのみ、同期点が有効になり、ts-map
がダウンストリームに保存されます。完全な構成については、 TiCDC タスク構成ファイルを参照してください。- TiKV のガベージ コレクション (GC) 時間を変更して、スナップショットに対応する履歴データがデータ チェック中に GC によって収集されないようにします。確認後、GC 時間を 1 時間に変更し、設定を元に戻すことをお勧めします。
- TiDB Binlogの一部のバージョンでは、
master-ts
とslave-ts
はts-map
に格納されます。master-ts
はprimary-ts
に相当し、slave-ts
はsecondary-ts
に相当します。- 上記の例は、
Datasource config
のセクションのみを示しています。完全な構成については、 sync-diff-inspector ユーザーガイドを参照してください。