TiDBクラスタの移行とアップグレード
このドキュメントでは、 BRで完全バックアップと復元を行い、 ティCDCで増分データ レプリケーションを行って、TiDB クラスターを移行およびアップグレードする方法について説明します (ブルーグリーン アップグレードとも呼ばれます)。このソリューションでは、デュアル クラスターの冗長性と増分レプリケーションを使用して、スムーズなトラフィック切り替えと高速ロールバックを実現し、重要なシステムに信頼性が高くリスクの少ないアップグレード パスを提供します。パフォーマンスの向上と新機能のメリットを継続的に享受し、安全で効率的なデータベース システムを維持するために、データベース バージョンを定期的にアップグレードすることをお勧めします。このソリューションの主な利点は次のとおりです。
- 制御可能なリスク: 数分以内に元のクラスターへのロールバックをサポートし、ビジネスの継続性を確保します。
- データの整合性: データの損失を防ぐために、多段階の検証メカニズムを使用します。
- ビジネスへの影響は最小限: 最終的な切り替えには短いメンテナンス期間のみが必要です。
移行とアップグレードのコアワークフローは次のとおりです。
- リスクの事前チェック: クラスターの状態とソリューションの実現可能性を確認します。
- 新しいクラスターを準備します。古いクラスターの完全バックアップから新しいクラスターを作成し、それをターゲット バージョンにアップグレードします。
- 増分データを複製する: TiCDC を使用してフォワード データ レプリケーション チャネルを確立します。
- 切り替えと検証: 多次元検証を実行し、ビジネス トラフィックを新しいクラスターに切り替え、TiCDC リバース レプリケーション チャネルを設定します。
- ステータスを観察: リバース レプリケーション チャネルを維持します。観察期間後、環境をクリーンアップします。
ロールバック プラン: 移行およびアップグレード プロセス中に新しいクラスターで問題が発生した場合、いつでもビジネス トラフィックを元のクラスターに戻すことができます。
次のセクションでは、TiDB クラスターの移行とアップグレードの標準化されたプロセスと一般的な手順について説明します。サンプル コマンドは、TiDB セルフマネージド環境に基づいています。
ステップ1: ソリューションの実現可能性を評価する
移行およびアップグレードを行う前に、関連するコンポーネントの互換性を評価し、クラスターの健全性ステータスを確認してください。
TiDB クラスターのバージョンを確認します。このソリューションは、TiDB v6.5.0 以降のバージョンに適用されます。
TiCDC の互換性を確認します。
- テーブル スキーマの要件: 複製するテーブルに有効なインデックスが含まれていることを確認します。詳細については、 TiCDC 有効インデックス参照してください。
- 機能制限: TiCDC はシーケンスまたはTiFlash DDL レプリケーションをサポートしていません。詳細については、 TiCDC がサポートしていないシナリオ参照してください。
- ベスト プラクティス: スイッチオーバー中に TiCDC のアップストリーム クラスターで DDL 操作を実行しないでください。
BR互換性を確認します。
- BRフルバックアップの互換性マトリックスを確認してください。詳細については、 BRバージョン互換性マトリックス参照してください。
- BRバックアップと復元の既知の制限事項を確認してください。詳細については、 BRの使用制限参照してください。
リージョン健全性やノードのリソース使用率など、クラスターの健全性ステータスを確認します。
ステップ2: 新しいクラスターを準備する
1. 古いクラスタのGC有効期間を調整する
データ レプリケーションの安定性を確保するには、システム変数tidb_gc_life_time
、 BRバックアップ、 BR復元、クラスター アップグレード、およびTiCDC Changefeedレプリケーション セットアップの操作と間隔の合計期間をカバーする値に調整します。そうしないと、レプリケーション タスクが回復不能なfailed
状態になり、新しい完全バックアップから移行およびアップグレード プロセス全体を再起動する必要が生じる可能性があります。
次の例では、 tidb_gc_life_time
を60h
に設定します。
-- Check the current GC lifetime setting.
SHOW VARIABLES LIKE '%tidb_gc_life_time%';
-- Set GC lifetime.
SET GLOBAL tidb_gc_life_time=60h;
注記:
tidb_gc_life_time
増やすと、 MVCCデータのstorage使用量が増加し、クエリのパフォーマンスに影響する可能性があります。詳細については、 GC の概要参照してください。storageとパフォーマンスへの影響を考慮しながら、推定操作時間に基づいて GC 期間を調整します。
2. 新しいクラスターに全データを移行する
完全なデータを新しいクラスターに移行するときは、次の点に注意してください。
バージョンの互換性: バックアップと復元に使用されるBRバージョンは、古いクラスターのメジャー バージョンと一致する必要があります。
パフォーマンスへの影響: BRバックアップはシステム リソースを消費します。ビジネスへの影響を最小限に抑えるには、オフピーク時にバックアップを実行します。
時間の見積もり: 最適なハードウェア条件 (ディスク I/O またはネットワーク帯域幅のボトルネックなし) では、推定時間は次のとおりです。
- バックアップ速度: 8 つのスレッドで TiKV ノードごとに 1 TiB のデータのバックアップに約 1 時間かかります。
- 復元速度: TiKV ノードごとに 1 TiB のデータの復元には約 20 分かかります。
コンフィグレーションの一貫性: 古いクラスターと新しいクラスター間で
new_collations_enabled_on_first_bootstrap
構成が同一であることを確認します。そうでない場合、 BR の復元は失敗します。システム テーブルの復元: BR復元中に
--with-sys-table
オプションを使用して、システム テーブル データを復元します。
完全なデータを新しいクラスターに移行するには、次の手順を実行します。
古いクラスターで完全バックアップを実行します。
tiup br:${cluster_version} backup full --pd ${pd_host}:${pd_port} -s ${backup_location}後でTiCDC Changefeed を作成するために、古いクラスターの TSO を記録します。
tiup br:${cluster_version} validate decode --field="end-version" \ --storage "s3://xxx?access-key=${access-key}&secret-access-key=${secret-access-key}" | tail -n1新しいクラスターをデプロイ。
tiup cluster deploy ${new_cluster_name} ${cluster_version} tidb-cluster.yaml完全バックアップを新しいクラスターに復元します。
tiup br:${cluster_version} restore full --pd ${pd_host}:${pd_port} -s ${backup_location} --with-sys-table
3. 新しいクラスターをターゲットバージョンにアップグレードする
時間を節約するために、次のコマンドを使用してオフライン アップグレードを実行できます。その他のアップグレード方法については、 TiUPを使用して TiDB をアップグレードする参照してください。
tiup cluster stop <new_cluster_name> # Stop the cluster
tiup cluster upgrade <new_cluster_name> <v_target_version> --offline # Perform offline upgrade
tiup cluster start <new_cluster_name> # Start the cluster
ビジネスの継続性を維持するには、構成項目やシステム変数などの重要な構成を古いクラスターから新しいクラスターに複製する必要があります。
ステップ3: 増分データを複製する
1. フォワードデータレプリケーションチャネルを確立する
この段階では、古いクラスターは元のバージョンのままですが、新しいクラスターはターゲット バージョンにアップグレードされています。この手順では、古いクラスターから新しいクラスターへの転送データ レプリケーション チャネルを確立する必要があります。
注記:
TiCDCコンポーネントのバージョンは、古いクラスターのメジャー バージョンと一致する必要があります。
Changefeedタスクを作成し、データ損失を防ぐために、増分レプリケーションの開始点(
${tso}
)をステップ2で記録したバックアップTSOとまったく同じに設定します。tiup ctl:${cluster_version} cdc changefeed create --server http://${cdc_host}:${cdc_port} --sink-uri="mysql://${username}:${password}@${tidb_endpoint}:${port}" --config config.toml --start-ts ${tso}レプリケーション タスクのステータスを確認し、
tso
またはcheckpoint
継続的に進んでいることを確認します。tiup ctl:${cluster_version} cdc changefeed list --server http://${cdc_host}:${cdc_port}出力は次のようになります。
[{ "id": "cdcdb-cdc-task-standby", "summary": { "state": "normal", "tso": 417886179132964865, "checkpoint": "202x-xx-xx xx:xx:xx.xxx", "error": null } }]
増分データ レプリケーション中は、レプリケーション チャネルの状態を継続的に監視し、必要に応じて設定を調整します。
レイテンシ メトリック:
Changefeed checkpoint lag
5 分以内などの許容範囲内に留まることを確認します。スループットの健全性:
Sink flush rows/s
一貫してビジネス書き込みレートを超えていることを確認します。エラーとアラート: TiCDC ログとアラート情報を定期的に確認してください。
(オプション) テスト データ レプリケーション: テスト データを更新し、Changefeed がそれを新しいクラスターに正しく複製することを確認します。
(オプション) TiCDC 構成項目
gc-ttl
調整します (デフォルトは 24 時間)。レプリケーション タスクが利用できないか中断され、時間内に解決できない場合、
gc-ttl
、TiCDC に必要なデータがガベージコレクション(GC) によって消去されることなく TiKV に保持されることを保証します。この期間を超えると、レプリケーション タスクはfailed
状態になり、回復できなくなります。この場合、PD の GC セーフ ポイントは進み続けるため、プロセスを再開するには新しいバックアップが必要になります。gc-ttl
の値を増やすと、tidb_gc_life_time
増やすのと同様に、より多くの MVCC データが蓄積されます。適度に長くて適切な値に設定することをお勧めします。
2. データの一貫性を確認する
データのレプリケーションが完了したら、次の方法を使用して、古いクラスターと新しいクラスター間のデータの整合性を確認します。
同期差分インスペクターツールを使用します。
./sync_diff_inspector --config=./config.toml同期差分インスペクターのスナップショット構成を TiCDC の同期ポイント機能と組み合わせて使用し、Changefeed レプリケーションを停止せずにデータの整合性を検証します。詳細については、 上流および下流のクラスタデータ検証とスナップショット読み取り参照してください。
テーブルの行数の比較など、ビジネス データの手動検証を実行します。
3. 環境設定を完了する
この移行手順では、 BR --with-sys-table
オプションを使用して一部のシステム テーブル データを復元します。範囲に含まれていないテーブルについては、手動で復元する必要があります。確認および補足する一般的な項目は次のとおりです。
- ユーザー権限:
mysql.user
テーブルを比較します。 - コンフィグレーション設定: 構成項目とシステム変数が一貫していることを確認します。
- 自動インクリメント列: 新しいクラスター内の自動インクリメント ID キャッシュをクリアします。
- 統計: 統計を手動で収集するか、新しいクラスターで自動収集を有効にします。
さらに、新しいクラスターをスケールアウトして、予想されるワークロードを処理し、アラート サブスクリプション、スケジュールされた統計収集スクリプト、データ バックアップ スクリプトなどの運用タスクを移行することもできます。
ステップ4: ビジネストラフィックの切り替えとロールバック
1. 切り替えの準備
レプリケーションステータスを確認します。
- TiCDC Changefeedレプリケーションのレイテンシーを監視します。
- 増分レプリケーションのスループットがピーク時のビジネス書き込み速度以上であることを確認します。
次のような多次元検証を実行します。
- すべてのデータ検証手順が完了していることを確認し、必要な追加チェックを実行します。
- 新しいクラスター内のアプリケーションに対して健全性テストまたは統合テストを実行します。
2. 切り替えを実行する
古いクラスターがビジネス トラフィックを処理できないように、アプリケーション サービスを停止します。アクセスをさらに制限するには、次のいずれかの方法を使用できます。
古いクラスター内のユーザー アカウントをロックします。
ALTER USER ACCOUNT LOCK;古いクラスターを読み取り専用モードに設定します。アクティブなビジネス セッションをクリアし、読み取り専用モードに入っていない接続を防止するために、古いクラスター内の TiDB ノードを再起動することをお勧めします。
SET GLOBAL tidb_super_read_only=ON;
TiCDC が追いつくようにします:
古いクラスターを読み取り専用モードに設定した後、現在の
up-tso
取得します。SELECT tidb_current_ts();Changefeed
checkpointTs
監視して、それがup-tso
超えていることを確認します。これは、TiCDC がデータ複製を完了したことを示します。
新しいクラスターと古いクラスター間のデータの一貫性を確認します。
- TiCDC が追いついたら、新しいクラスターから
down-tso
取得します。 - 同期差分インスペクターツールを使用して、
up-tso
とdown-tso
の新しいクラスターと古いクラスター間のデータの一貫性を比較します。
- TiCDC が追いついたら、新しいクラスターから
フォワード Changefeed レプリケーション タスクを一時停止します。
tiup ctl:${cluster_version} cdc changefeed pause --server http://${cdc_host}:${cdc_port} -c <changefeedid>新しいクラスター内の TiDB ノードを再起動して、自動増分 ID キャッシュをクリアします。
次の方法を使用して、新しいクラスターの動作ステータスを確認します。
TiDB のバージョンがターゲット バージョンと一致していることを確認します。
tiup cluster display <cluster-name>データベースにログインし、コンポーネントのバージョンを確認します。
SELECT * FROM INFORMATION_SCHEMA.CLUSTER_INFO;Grafana を使用してサービス ステータスを監視します概要 > サービス ポート ステータスに移動し、すべてのサービスがUp状態であることを確認します。
新しいクラスターから古いクラスターへのリバースレプリケーションを設定します。
古いクラスターのユーザー アカウントのロックを解除し、読み取り/書き込みモードを復元します。
ALTER USER ACCOUNT UNLOCK; SET GLOBAL tidb_super_read_only=OFF;新しいクラスターの現在の TSO を記録します。
SELECT tidb_current_ts();リバース レプリケーション リンクを構成し、Changefeed タスクが適切に実行されていることを確認します。
- この段階では業務が停止しているため、現在の TSO を使用することができます。
- ループバック書き込みのリスクを回避するために、古いクラスターのアドレスに
sink-uri
が設定されていることを確認します。
tiup ctl:${cluster_version} cdc changefeed create --server http://${cdc_host}:${cdc_port} --sink-uri="mysql://${username}:${password}@${tidb_endpoint}:${port}" --config config.toml --start-ts ${tso} tiup ctl:${cluster_version} cdc changefeed list --server http://${cdc_host}:${cdc_port}
ビジネス トラフィックを新しいクラスターにリダイレクトします。
次の Grafana パネルを使用して、新しいクラスターの負荷と動作ステータスを監視します。
- TiDBダッシュボード > クエリサマリー : 期間、QPS、失敗したクエリ OPM メトリックを確認します。
- TiDBダッシュボード > サーバー :接続数メトリックを監視して、ノード間で接続が均等に分散されるようにします。
この時点で、ビジネス トラフィックは新しいクラスターに正常に切り替えられ、TiCDC リバース レプリケーション チャネルが確立されます。
3. 緊急ロールバックを実行する
ロールバック計画は次のとおりです。
- 新しいクラスターと古いクラスター間のデータの一貫性を定期的にチェックし、リバース レプリケーション リンクが適切に動作していることを確認します。
- 1 週間など、指定された期間にわたってシステムを監視します。問題が発生した場合は、古いクラスターに戻します。
- 観察期間が終了したら、リバース レプリケーション リンクを削除し、古いクラスターを削除します。
以下では、トラフィックを古いクラスターに戻す緊急ロールバックの使用シナリオと手順について説明します。
使用シナリオ: 重大な問題を解決できない場合は、ロールバック プランを実行します。
手順:
- 新しいクラスターへのビジネス アクセスを停止します。
- ビジネス アカウントを再認証し、古いクラスターへの読み取り/書き込みアクセスを復元します。
- リバース レプリケーション リンクをチェックし、TiCDC が追いついていることを確認し、新しいクラスターと古いクラスター間のデータの一貫性を検証します。
- ビジネス トラフィックを古いクラスターにリダイレクトします。
ステップ5: クリーンアップ
新しいクラスターを一定期間監視し、安定した業務運用を確認した後、TiCDC リバース レプリケーションを削除し、古いクラスターを削除できます。
TiCDC リバースレプリケーションを削除します。
tiup ctl:${cluster_version} cdc changefeed remove --server http://${cdc_host}:${cdc_port} -c <changefeedid>古いクラスターを削除します。保持する場合は、
tidb_gc_life_time
元の値に戻します。-- Restore to the original value before modification. SET GLOBAL tidb_gc_life_time=10m;