TiDB のスムーズなアップグレード
このドキュメントでは、DDL 操作を手動でキャンセルせずに TiDB クラスターのアップグレードをサポートする TiDB のスムーズ アップグレード機能を紹介します。
v7.1.0 以降、TiDB を新しいバージョンにアップグレードする場合、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 バージョン (つまり、v7.1.x、x >= 2) から v7.4.0 以降のバージョンへのアップグレード
- v7.4.0 からそれ以降のバージョンへのアップグレード
特定のバージョンでサポートされているアップグレード方法については、次の表を参照してください。
元のバージョン | アップグレード版 | アップグレード方法 | 注記 |
---|---|---|---|
< v7.1.0 | 任意のバージョン | スムーズなアップグレードはサポートされていません。 | |
v7.1.0 | v7.1.1、v7.2.0、または v7.3.0 | スムーズなアップグレードが自動的にサポートされます。追加の操作は必要ありません。 | Experimental機能。問題#44760が発生する可能性があります。 |
v7.1.1 | v7.2.0 または v7.3.0 | スムーズなアップグレードが自動的にサポートされます。追加の操作は必要ありません。 | Experimental機能。 |
v7.2.0 | v7.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 クラスターをアップグレードできます。 tiup cluster patch
コマンドは現在サポートされていないことに注意してください。
TiDB Operator を使用してアップグレードする
現在、この機能はサポートされていません。できるだけ早くサポートさせていただきます。
その他のアップグレード方法
次の手順を実行して、手動またはスクリプトを使用して TiDB をアップグレードできます。
HTTP アップグレード開始リクエストをクラスター内の任意の TiDB ノードに送信します。
curl -X POST http://{TiDBIP}:10080/upgrade/start
.- TiDB クラスターはアップグレード状態になります。
- 実行される DDL 操作は一時停止されます。
TiDB バイナリを置き換えて、ローリング アップグレードを実行します。このプロセスは、元のアップグレード プロセスと同じです。
- システム DDL 操作は、アップグレード プロセス中に実行されます。
クラスター内のすべての TiDB ノードが正常にアップグレードされたら、HTTP アップグレード終了リクエストを
curl -X POST http://{TiDBIP}:10080/upgrade/finish
の TiDB ノードに送信します。- 一時停止されていたユーザーの DDL 操作が再開されます。
制限事項
スムーズ アップグレード機能を使用する場合は、次の制限事項に注意してください。
ユーザー操作の制限
アップグレードする前に、次の制限事項を考慮してください。
- クラスター内にキャンセル中の DDL ジョブがある場合、つまり進行中の DDL ジョブがユーザーによってキャンセルされている場合、キャンセル状態のジョブは一時停止できないため、TiDB はジョブのキャンセルを再試行します。再試行が失敗した場合は、エラーが報告され、アップグレードは終了します。
- TiDB Distributed eXecution Framework (DXF) が有効になっている場合は、
tidb_enable_dist_task
~OFF
(デフォルト値) を設定して無効にします。進行中の分散ADD INDEX
およびIMPORT INTO
タスクがすべて完了していることを確認してください。あるいは、これらのタスクをキャンセルし、アップグレードが完了するまで待って再開することもできます。そうしないと、アップグレード中のADD INDEX
操作によってデータ インデックスの不整合が発生する可能性があります。
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 操作がシステム以外のテーブルで実行されると、アップグレードが失敗する可能性があります。