TiDB スムーズアップグレード
このドキュメントでは、DDL 操作を手動でキャンセルせずに TiDB クラスターのアップグレードをサポートする、TiDB のスムーズ アップグレード機能について説明します。
v7.1.0以降、TiDBを新しいバージョンにアップグレードする際、スムーズなアップグレードがサポートされます。この機能により、アップグレードプロセス中の制限がなくなり、よりユーザーフレンドリーなアップグレードエクスペリエンスが実現します。ただし、アップグレードプロセス中はユーザーが開始したDDL操作がないことを確認する必要があります。
サポートされているバージョン
機能がスイッチによって制御される必要があるかどうかに応じて、スムーズ アップグレードを使用する方法は 2 つあります。
この機能はデフォルトで有効になっており、スイッチによる制御は不要です。現在、この方法をサポートしているバージョンはv7.1.0、v7.1.1、v7.2.0、v7.3.0です。具体的には、以下のバージョンがサポートされています。
- v7.1.0 から v7.1.1、v7.2.0、または v7.3.0 にアップグレードします
- v7.1.1 から v7.2.0 または v7.3.0 にアップグレードします
- v7.2.0 から v7.3.0 へのアップグレード
この機能はデフォルトで無効になっていますが、
/upgrade/start
リクエストを送信することで有効にできます。詳細はTiDB HTTP API参照してください。サポートされているバージョンは次のとおりです。- v7.1.2 以降の v7.1 バージョン (つまり、x >= 2 の v7.1.x) から v7.4.0 以降のバージョンにアップグレードします。
- v7.4.0 から以降のバージョンにアップグレードする
特定のバージョンでサポートされているアップグレード方法については、次の表を参照してください。
オリジナル版 | アップグレード版 | アップグレード方法 | 注記 |
---|---|---|---|
< バージョン7.1.0 | 任意のバージョン | スムーズなアップグレードはサポートされません。 | |
バージョン7.1.0 | v7.1.1、v7.2.0、または v7.3.0 | スムーズなアップグレードが自動的にサポートされます。追加の操作は必要ありません。 | Experimentalな機能です。問題#44760発生する可能性があります。 |
バージョン7.1.1 | v7.2.0 または v7.3.0 | スムーズなアップグレードが自動的にサポートされます。追加の操作は必要ありません。 | Experimental機能です。 |
バージョン7.2.0 | バージョン7.3.0 | スムーズなアップグレードが自動的にサポートされます。追加の操作は必要ありません。 | Experimental機能です。 |
[v7.1.2、v7.2.0) | [v7.1.2、v7.2.0) | /upgrade/start HTTPリクエストを送信することでスムーズなアップグレードが可能になります。方法はTiUPを使用するとその他のアップグレード方法 2つがあります。 | スムーズ アップグレードが有効になっていない場合は、アップグレード中に DDL 操作が実行されないようにしてください。 |
[v7.1.2、v7.2.0) または >= v7.4.0 | = v7.4.0 | /upgrade/start HTTPリクエストを送信することでスムーズなアップグレードが可能になります。方法はTiUPを使用するとその他のアップグレード方法 2つがあります。 | スムーズ アップグレードが有効になっていない場合は、アップグレード中に DDL 操作が実行されないようにしてください。 |
v7.1.0、v7.1.1、v7.2.0、および v7.3.0 | = v7.4.0 | スムーズなアップグレードはサポートされません。 |
機能紹介
スムーズ アップグレード機能が導入される前は、アップグレード プロセス中の DDL 操作には次の制限があります。
- アップグレード プロセス中に DDL 操作を実行すると、TiDB で未定義の動作が発生する可能性があります。
- DDL 操作中に TiDB をアップグレードすると、TiDB で未定義の動作が発生する可能性があります。
これらの制限事項を要約すると、アップグレードプロセス中にユーザーが開始するDDL操作がないことを確認する必要があるということです。スムーズアップグレード機能が導入されると、TiDBはアップグレードプロセス中にこの制限を受けなくなります。
詳細については、 TiUPを使用して TiDB をアップグレードするの警告の内容を参照してください。
アップグレード手順
TiUPを使用してアップグレードする
v1.14.0以降、 TiUPはこの機能を自動的にサポートします。つまり、 tiup cluster upgrade
コマンドを使用してTiDBクラスタを直接アップグレードできます。3 tiup cluster patch
は現在サポートされていないことに注意してください。
TiDB Operatorを使用してアップグレードする
現在、この機能はサポートされていません。できるだけ早くサポートされる予定です。
その他のアップグレード方法
TiDB を手動でアップグレードするか、スクリプトを使用してアップグレードするには、次の手順に従います。
クラスター内の任意の TiDB ノードに HTTP アップグレード開始要求を送信します
curl -X POST http://{TiDBIP}:10080/upgrade/start
.- TiDB クラスターはアップグレード状態になります。
- 実行される DDL 操作は一時停止されます。
TiDBバイナリを置き換え、ローリングアップグレードを実行します。このプロセスは元のアップグレードプロセスと同じです。
- システム DDL 操作はアップグレード プロセス中に実行されます。
クラスター内のすべての TiDB ノードが正常にアップグレードされたら、任意の TiDB ノードに HTTP アップグレード完了要求を送信します
curl -X POST http://{TiDBIP}:10080/upgrade/finish
.- ユーザーの一時停止された DDL 操作が再開されます。
制限事項
スムーズ アップグレード機能を使用する場合は、次の制限に注意してください。
注記:
このセクションの制限は、スムーズ アップグレード機能を使用するシナリオだけでなく、 TiUPを使用して TiDB をアップグレードするにも適用されます。
ユーザー操作の制限
アップグレードする前に、次の制限を考慮してください。
- クラスタ内にキャンセル中のDDLジョブがある場合、つまり実行中のDDLジョブがユーザーによってキャンセルされている場合、キャンセル中のジョブは一時停止できないため、TiDBはジョブのキャンセルを再試行します。再試行が失敗した場合はエラーが報告され、アップグレードは終了します。
- 現在ご使用の TiDB バージョンが v8.1.0 より前で、TiDB Distributed eXecution Framework (DXF) が有効になっている場合は、
tidb_enable_dist_task
をOFF
に設定して無効にしてください。実行中の分散タスクADD INDEX
とIMPORT INTO
すべて完了していることを確認してください。または、これらのタスクをキャンセルし、アップグレードが完了するまで待ってから再開することもできます。そうしないと、アップグレード中のADD INDEX
操作によってデータインデックスの不整合が発生する可能性があります。現在ご使用の TiDB バージョンが v8.1.0 以降の場合は、DXF を無効にする必要はなく、この制限は無視してかまいません。
TiUPを使用して TiDB をアップグレードするシナリオでは、 TiUPアップグレードにはタイムアウト期間があるため、アップグレード前にクラスターのキューで待機している DDL ジョブが多数 (300 を超える) ある場合、アップグレードが失敗する可能性があります。
アップグレード中は、次の操作は許可されません。
- システム テーブル (
mysql.*
、information_schema.*
、performance_schema.*
、およびmetrics_schema.*
) に対して DDL 操作を実行します。 - DDL ジョブを手動でキャンセルします:
ADMIN CANCEL DDL JOBS job_id [, job_id] ...;
. - データをインポートします。
- システム テーブル (
ツールの制限
アップグレード中は、次のツールの使用はサポートされません。
BR: BRは一時停止中のDDLジョブをTiDBに複製する可能性があります。一時停止中のDDLジョブは自動的に再開できないため、後でDDLジョブが停止する可能性があります。
DM および TiCDC: アップグレード プロセス中に DM または TiCDC を使用して SQL ステートメントを TiDB にインポートする場合、SQL ステートメントの 1 つに DDL 操作が含まれていると、インポート操作がブロックされ、未定義のエラーが発生する可能性があります。
プラグインの制限
TiDBにインストールされているプラグインにはDDL操作が含まれている可能性があります。ただし、アップグレード中にプラグイン内のDDL操作がシステムテーブル以外のテーブルに対して実行されると、アップグレードが失敗する可能性があります。