重要

古いバージョンの TiDB データベース (TiDB {{ curdocVersion }}) のドキュメントを表示しています。

TiDBデータベースの最新の安定バージョンを使用することをお勧めします。
重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

TiDBBinlogリレーログ

binlogを複製する場合、Drainerはトランザクションをアップストリームから分割し、分割されたトランザクションを同時にダウンストリームに複製します。

アップストリームクラスターが使用できず、Drainerが異常終了する極端な場合、ダウンストリームクラスター(MySQLまたはTiDB)は、データに一貫性がない中間状態になる可能性があります。このような場合、Drainerはリレーログを使用して、ダウンストリームクラスターが一貫した状態にあることを確認できます。

ドレイナーレプリケーション中の一貫した状態

ダウンストリームクラスターが一貫した状態に達するということは、ダウンストリームクラスターのデータがtidb_snapshot = tsを設定するアップストリームのスナップショットと同じであることを意味します。

チェックポイントの整合性とは、Drainerチェックポイントがレプリケーションの整合性のある状態をconsistentに保存することを意味します。 Drainerを実行すると、 consistentfalseになります。ドレイナーが正常に終了した後、 consistenttrueに設定されます。

次のように、ダウンストリームチェックポイントテーブルをクエリできます。

select * from tidb_binlog.checkpoint;
+---------------------+----------------------------------------------------------------+
| clusterID           | checkPoint                                                     |
+---------------------+----------------------------------------------------------------+
| 6791641053252586769 | {"consistent":false,"commitTS":414529105591271429,"ts-map":{}} |
+---------------------+----------------------------------------------------------------+

実装の原則

Drainerはリレーログを有効にした後、最初にbinlogイベントをディスクに書き込み、次にイベントをダウンストリームクラスターに複製します。

アップストリームクラスターが使用できない場合、Drainerはリレーログを読み取ることにより、ダウンストリームクラスターを一貫した状態に復元できます。

ノート:

リレーログデータが同時に失われる場合、この方法は機能しませんが、その発生率は非常に低くなります。さらに、ネットワークファイルシステムを使用して、リレーログのデータの安全性を確保できます。

Drainerがリレーログからbinlogを消費するシナリオをトリガーする

Drainerの起動時に、アップストリームクラスターの配置ドライバー(PD)への接続に失敗し、チェックポイントでconsistent = falseを検出すると、Drainerはリレーログを読み取ろうとし、ダウンストリームクラスターを一貫した状態に復元します。その後、Drainerプロセスはチェックポイントconsistenttrueに設定し、終了します。

リレーログのGCメカニズム

データがダウンストリームに複製される前に、Drainerはデータをリレーログファイルに書き込みます。リレーログファイルのサイズが10MB(デフォルト)に達し、現在のトランザクションのbinlogデータが完全に書き込まれると、Drainerは次のリレーログファイルへのデータの書き込みを開始します。 Drainerは、データをダウンストリームに正常に複製した後、データが複製されたリレーログファイルを自動的にクリーンアップします。現在データが書き込まれているリレーログはクリーンアップされません。

Configuration / コンフィグレーション

リレーログを有効にするには、Drainerに次の構成を追加します。

[syncer.relay]
# It saves the directory of the relay log. The relay log is not enabled if the value is empty.
# The configuration only comes to effect if the downstream is TiDB or MySQL.
log-dir = "/dir/to/save/log"
# The size limit of a single relay log file (unit: byte).
# When the size of a relay log file reaches this limit, data is written to the next relay log file.
max-file-size = 10485760