TiDB ログ バックアップと PITR ガイド
フルバックアップ(スナップショットバックアップ)には、特定の時点での完全なクラスターデータが含まれますが、TiDB ログバックアップは、アプリケーションによって書き込まれたデータを指定されたstorageにタイムリーにバックアップできます。必要に応じて復元ポイントを選択する場合、つまりポイントインタイムリカバリ(PITR)を実行する場合は、 ログバックアップを開始すると定期的に完全バックアップを実行する選択できます。
br コマンドライン ツール (以下、 br
と呼びます) を使用してデータをバックアップまたは復元する前に、まずインストールbr
を行う必要があります。
TiDBクラスタをバックアップする
ログバックアップを開始
注記:
- 次の例では、 Amazon S3 アクセスキーとシークレットキーを使用して権限を承認することを前提としています。IAM ロールを使用して権限を承認する場合は、
--send-credentials-to-tikv
からfalse
に設定する必要があります。- 他のstorageシステムまたは認証方法を使用して権限を認証する場合は、 バックアップストレージに従ってパラメータ設定を調整します。
ログ バックアップを開始するには、 br log start
実行します。クラスターは 1 回につき 1 つのログ バックアップ タスクのみを実行できます。
tiup br log start --task-name=pitr --pd "${PD_IP}:2379" \
--storage 's3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}'
ログ バックアップ タスクが開始されると、手動で停止するまで TiDB クラスターのバックグラウンドで実行されます。このプロセス中、TiDB 変更ログは指定されたstorageに小さなバッチで定期的にバックアップされます。ログ バックアップ タスクのステータスを照会するには、次のコマンドを実行します。
tiup br log status --task-name=pitr --pd "${PD_IP}:2379"
期待される出力:
● Total 1 Tasks.
> #1 <
name: pitr
status: ● NORMAL
start: 2022-05-13 11:09:40.7 +0800
end: 2035-01-01 00:00:00 +0800
storage: s3://backup-101/log-backup
speed(est.): 0.00 ops/s
checkpoint[global]: 2022-05-13 11:31:47.2 +0800; gap=4m53s
定期的に完全バックアップを実行する
スナップショット バックアップは、完全バックアップの方法として使用できます。1 br backup full
実行すると、固定スケジュール (たとえば、2 日ごと) に従ってクラスター スナップショットをバックアップstorageにバックアップできます。
tiup br backup full --pd "${PD_IP}:2379" \
--storage 's3://backup-101/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}'
PITRを実行する
バックアップ保持期間内の任意の時点にクラスターを復元するには、 br restore point
使用します。このコマンドを実行するときは、復元する時点、その時点より前の最新のスナップショット バックアップ データ、およびログ バックアップ データを指定する必要があります。BRは復元に必要なデータを自動的に判別して読み取り、これらのデータを指定されたクラスターに順番に復元します。
br restore point --pd "${PD_IP}:2379" \
--storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}' \
--full-backup-storage='s3://backup-101/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}' \
--restored-ts '2022-05-15 18:00:00+0800'
データの復元中は、ターミナルの進行状況バーで進行状況を確認できます。復元は、完全復元とログ復元 (メタファイルの復元と KV ファイルの復元) の 2 つのフェーズに分かれています。各フェーズが完了すると、復元時間やデータ サイズなどの情報がbr
されます。
Full Restore <--------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
*** ["Full Restore success summary"] ****** [total-take=xxx.xxxs] [restore-data-size(after-compressed)=xxx.xxx] [Size=xxxx] [BackupTS={TS}] [total-kv=xxx] [total-kv-size=xxx] [average-speed=xxx]
Restore Meta Files <--------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Restore KV Files <----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
*** ["restore log success summary"] [total-take=xxx.xx] [restore-from={TS}] [restore-to={TS}] [total-kv-count=xxx] [total-size=xxx]
古いデータをクリーンアップする
TiDB バックアップと復元の使用概要で説明したとおり:
PITR を実行するには、復元ポイントより前のフルバックアップと、フルバックアップポイントから復元ポイントまでのログバックアップを復元する必要があります。そのため、バックアップ保持期間を超えるログバックアップについては、 br log truncate
使用して指定時点より前のバックアップを削除できます。フルスナップショットより前のログバックアップのみ削除することをお勧めします。
次の手順では、バックアップ保持期間を超えたバックアップ データをクリーンアップする方法について説明します。
バックアップ保持期間外の最後の完全バックアップを取得します。
validate
コマンドを使用して、バックアップに対応する時点を取得します。2022/09/01 より前のバックアップ データを消去する必要があると仮定すると、この時点より前の最後の完全バックアップを探して、消去されないことを確認する必要があります。FULL_BACKUP_TS=`tiup br validate decode --field="end-version" --storage "s3://backup-101/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}"| tail -n1`スナップショットバックアップ
FULL_BACKUP_TS
より前のログバックアップデータを削除します。tiup br log truncate --until=${FULL_BACKUP_TS} --storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}'スナップショットバックアップ
FULL_BACKUP_TS
より前のスナップショットデータを削除します。rm -rf s3://backup-101/snapshot-${date}
PITRのパフォーマンス機能
- 各 TiKV ノードでは、PITR はスナップショット データを 280 GB/h の速度で復元し、ログ データを 30 GB/h の速度で復元できます。
- BR は、古くなったログ バックアップ データを 600 GB/h の速度で削除します。
注記:
上記の仕様は、次の 2 つのテスト シナリオのテスト結果に基づいています。実際のデータは異なる場合があります。
- スナップショットデータの復元速度 = スナップショットデータサイズ / (期間 * TiKV ノードの数)
- ログデータの復元速度 = 復元されたログデータのサイズ / (期間 * TiKV ノードの数)
スナップショット データ サイズは、復元されたデータの実際の量ではなく、単一のレプリカ内のすべての KV の論理サイズを指します。BRは、クラスターに構成されたレプリカの数に応じてすべてのレプリカを復元します。レプリカの数が多いほど、実際に復元できるデータが多くなります。テストのすべてのクラスターのデフォルトのレプリカ数は 3 です。全体的な復元パフォーマンスを向上させるには、TiKV 構成ファイルの
import.num-threads
項目とBRコマンドのconcurrency
オプションを変更します。
テストシナリオ 1 ( TiDB Cloud ) は次のとおりです。
- TiKVノード数(8コア、16GBメモリ): 21
- TiKV構成項目
import.num-threads
:8 - BRコマンドオプション
concurrency
:128 - 地域数: 183,000
- クラスターで作成された新しいログデータ: 10 GB/時間
- 書き込み (INSERT/UPDATE/DELETE) QPS: 10,000
テスト シナリオ 2 (TiDB セルフホスト) は次のとおりです。
- TiKVノード数(8コア、64GBメモリ): 6
- TiKV構成項目
import.num-threads
:8 - BRコマンドオプション
concurrency
:128 - 地域数: 50,000
- クラスターで作成された新しいログデータ: 10 GB/時間
- 書き込み (INSERT/UPDATE/DELETE) QPS: 10,000
監視と警告
ログ バックアップ タスクが分散された後、各 TiKV ノードは継続的にデータを外部storageに書き込みます。このプロセスの監視データは、TiKV 詳細 > バックアップ ログダッシュボードで表示できます。
メトリックが正常範囲から外れた場合に通知を受け取るには、 ログバックアップアラート参照してアラート ルールを構成します。