TiUPを使用して TiDB をアップグレードする
このドキュメントは、次のアップグレード パスを対象としています。
- TiDB 4.0 バージョンから TiDB 7.1 にアップグレードします。
- TiDB 5.0 ~ 5.4 バージョンから TiDB 7.1 にアップグレードします。
- TiDB 6.0 ~ 6.6 から TiDB 7.1 にアップグレードします。
- TiDB 7.0 から TiDB 7.1 にアップグレードします。
注記:
- アップグレードするクラスターが v3.1 以前のバージョン (v3.0 または v2.1) である場合、v7.1.0 以降の v7.1.x バージョンへの直接アップグレードはサポートされていません。まずクラスターを v4.0 にアップグレードし、次にターゲットの TiDB バージョンにアップグレードする必要があります。
- アップグレードするクラスターが v6.2 より前の場合、シナリオによってはクラスターを v6.2 以降のバージョンにアップグレードすると、アップグレードが停止する可能性があります。 問題の解決方法を参照してください。
- TiDB ノードは、
server-version
構成項目の値を使用して、現在の TiDB バージョンを確認します。したがって、予期しない動作を回避するには、TiDB クラスターをアップグレードする前に、値server-version
を空、または現在の TiDB クラスターの実際のバージョンに設定する必要があります。
アップグレードに関する注意事項
- TiDB は現在、バージョンのダウングレードや、アップグレード後の以前のバージョンへのロールバックをサポートしていません。
- TiDB Ansible を使用して管理されている v4.0 クラスターの場合、 TiUP (v4.0) を使用して TiDB をアップグレードするに従って新しい管理を行うためにクラスターをTiUP (
tiup cluster
) にインポートする必要があります。その後、このドキュメントに従ってクラスターを v7.1.3 にアップグレードできます。 - v3.0 より前のバージョンを v7.1.3 に更新するには:
- TiDB Ansibleを使用してこのバージョンを 3.0 に更新します。
- TiUP (
tiup cluster
) を使用して、TiDB Ansible 構成をインポートします。 - TiUP (v4.0) を使用して TiDB をアップグレードするに従って、3.0 バージョンを 4.0 に更新します。
- このドキュメントに従ってクラスターを v7.1.3 にアップグレードします。
- TiDB Binlog、 TiCDC、 TiFlash、およびその他のコンポーネントのバージョンのアップグレードをサポートします。
- TiFlash をv6.3.0 より前のバージョンから v6.3.0 以降のバージョンにアップグレードする場合、CPU は Linux AMD64アーキテクチャでは AVX2 命令セットをサポートし、Linux ARM64アーキテクチャでは ARMv8 命令セットアーキテクチャをサポートする必要があることに注意してください。詳細については、 v6.3.0 リリースノートの説明を参照してください。
- さまざまなバージョンの互換性の変更の詳細については、各バージョンのリリースノートを参照してください。対応するリリース ノートの「互換性の変更」セクションに従って、クラスター構成を変更します。
- v5.3 より前のバージョンから v5.3 以降のバージョンにアップグレードするクラスターの場合、デフォルトでデプロイされた Prometheus は v2.8.1 から v2.27.1 にアップグレードされます。 Prometheus v2.27.1 では、より多くの機能が提供され、セキュリティ問題が修正されています。 v2.8.1 と比較して、v2.27.1 ではアラート時間の表現が変更されています。詳細については、 プロメテウスのコミットを参照してください。
準備
このセクションでは、 TiUPおよびTiUPクラスタコンポーネントのアップグレードなど、TiDB クラスターをアップグレードする前に必要な準備作業について説明します。
ステップ 1: 互換性の変更を確認する
TiDB リリース ノートで互換性の変更を確認してください。変更がアップグレードに影響を与える場合は、それに応じて対処してください。
以下に、v7.0.0 から現在のバージョン (v7.1.3) にアップグレードするときに知っておく必要がある互換性の変更点を示します。 v6.6.0 以前のバージョンから現在のバージョンにアップグレードする場合は、対応するリリースノートの中間バージョンで導入された互換性の変更も確認する必要がある場合があります。
ステップ 2: TiUPまたはTiUPオフライン ミラーをアップグレードする
TiDB クラスターをアップグレードする前に、まずTiUPまたはTiUPミラーをアップグレードする必要があります。
TiUPおよびTiUPクラスタのアップグレード
注記:
アップグレードするクラスターの制御マシンが
https://tiup-mirrors.pingcap.com
アクセスできない場合は、このセクションをスキップしてTiUPオフライン ミラーをアップグレードするを参照してください。
TiUP のバージョンをアップグレードします。 TiUPバージョンは
1.11.3
以降を推奨します。tiup update --self tiup --versionTiUPクラスタのバージョンをアップグレードします。 TiUP クラスタ のバージョンは
1.11.3
以降を推奨します。tiup update cluster tiup cluster --version
TiUPオフライン ミラーをアップグレードする
注記:
アップグレードするクラスターがオフライン方式を使用せずにデプロイされた場合は、この手順をスキップしてください。
TiUPを使用して TiDBクラスタをデプロイ- TiUP をオフラインでデプロイを参照して、新バージョンのTiUPミラーをダウンロードし、制御マシンにアップロードします。 local_install.sh
を実行すると、 TiUP は上書きアップグレードを完了します。
tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz
sh tidb-community-server-${version}-linux-amd64/local_install.sh
source /home/tidb/.bash_profile
上書きアップグレード後、次のコマンドを実行して、サーバーとツールキットのオフライン ミラーをサーバーディレクトリにマージします。
tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64
cd tidb-community-server-${version}-linux-amd64/
cp -rp keys ~/.tiup/
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64
ミラーを結合した後、次のコマンドを実行してTiUPクラスタコンポーネントをアップグレードします。
tiup update cluster
これで、オフライン ミラーが正常にアップグレードされました。上書き後のTiUP動作中にエラーが発生した場合、 manifest
が更新されていない可能性があります。 TiUP を再度実行する前に、 rm -rf ~/.tiup/manifests/*
を試すことができます。
ステップ 3: TiUPトポロジ構成ファイルを編集する
注記:
次のいずれかの状況に該当する場合は、この手順をスキップしてください。
- 元のクラスターの構成パラメーターは変更されていません。または、
tiup cluster
を使用して構成パラメータを変更しましたが、それ以上の変更は必要ありません。- アップグレード後、未変更の構成項目には v7.1.2 のデフォルトのパラメータ値を使用したいと考えています。
vi
編集モードに入り、トポロジ ファイルを編集します。tiup cluster edit-config <cluster-name>トポロジー構成テンプレートの形式を参照し、トポロジ ファイルの
server_configs
セクションに変更するパラメータを入力します。変更後、 : + w + qを入力して変更を保存し、編集モードを終了します。 Yを入力して変更を確認します。
注記:
クラスターを v7.1.3 にアップグレードする前に、v4.0 で変更したパラメーターが v7.1.3 でも互換性があることを確認してください。詳細はTiKVコンフィグレーションファイルを参照してください。
ステップ 4: クラスターの DDL とバックアップのステータスを確認する
アップグレード中の未定義の動作やその他の予期しない問題を回避するために、アップグレード前に次の項目を確認することをお勧めします。
- クラスタDDL:
ADMIN SHOW DDL
ステートメントを実行して、進行中の DDL ジョブがあるかどうかを確認することをお勧めします。 「はい」の場合は、その実行を待つか、アップグレードを実行する前にADMIN CANCEL DDL
ステートメントを実行してキャンセルします。 - クラスタのバックアップ:
SHOW [BACKUPS|RESTORES]
ステートメントを実行して、クラスター内に進行中のバックアップまたは復元タスクがあるかどうかを確認することをお勧めします。 「はい」の場合は、アップグレードを実行する前に完了するまで待ちます。
ステップ 5: 現在のクラスターの健全性ステータスを確認する
アップグレード中の未定義の動作やその他の問題を回避するには、アップグレード前に現在のクラスターのリージョンの健全性ステータスを確認することをお勧めします。これを行うには、 check
サブコマンドを使用します。
tiup cluster check <cluster-name> --cluster
コマンド実行後、「リージョンステータス」のチェック結果が出力されます。
- 結果が「すべてのリージョンが正常です」の場合は、現在のクラスター内のすべてのリージョンが正常であるため、アップグレードを続行できます。
- 結果が「リージョンが完全に正常ではありません: m miss-peer, n pending-peer」で、「他の操作の前に異常なリージョンを修正してください。」となった場合。プロンプトが表示されると、現在のクラスター内の一部のリージョンが異常です。チェック結果が「すべてのリージョンが正常」になるまで、異常のトラブルシューティングを行う必要があります。その後、アップグレードを続行できます。
TiDB クラスターをアップグレードする
このセクションでは、TiDB クラスターをアップグレードし、アップグレード後のバージョンを確認する方法について説明します。
TiDB クラスターを指定されたバージョンにアップグレードする
クラスターは、オンライン アップグレードとオフライン アップグレードの 2 つの方法のいずれかでアップグレードできます。
デフォルトでは、 TiUPクラスタはオンライン方式を使用して TiDB クラスターをアップグレードします。これは、TiDB クラスターがアップグレード プロセス中に引き続きサービスを提供できることを意味します。オンライン方式では、アップグレードして再起動する前に、各ノードでリーダーが 1 つずつ移行されます。したがって、大規模なクラスターの場合、アップグレード操作全体が完了するまでに長い時間がかかります。
アプリケーションにメンテナンスのためにデータベースを停止するためのメンテナンス期間がある場合は、オフライン アップグレード方法を使用してアップグレード操作を迅速に実行できます。
オンラインアップグレード
tiup cluster upgrade <cluster-name> <version>
たとえば、クラスターを v7.1.3 にアップグレードする場合は、次のようにします。
tiup cluster upgrade <cluster-name> v7.1.3
注記:
オンライン アップグレードでは、すべてのコンポーネントが 1 つずつアップグレードされます。 TiKV のアップグレード中、TiKV インスタンス内のすべてのリーダーは、インスタンスを停止する前に削除されます。デフォルトのタイムアウト時間は 5 分 (300 秒) です。このタイムアウト時間が経過すると、インスタンスは直接停止されます。
--force
パラメーターを使用すると、リーダーを削除せずにクラスターをすぐにアップグレードできます。ただし、アップグレード中に発生するエラーは無視されます。つまり、アップグレードの失敗については通知されません。したがって、--force
パラメータは注意して使用してください。安定したパフォーマンスを維持するには、インスタンスを停止する前に、TiKV インスタンス内のすべてのリーダーが削除されていることを確認してください。
--transfer-timeout
より大きな値、たとえば--transfer-timeout 3600
を設定することもできます (単位: 秒)。TiFlash を5.3 より前のバージョンから 5.3 以降にアップグレードするには、 TiFlashを停止してからアップグレードする必要があります。次の手順は、他のコンポーネントを中断せずにTiFlashをアップグレードするのに役立ちます。
- TiFlashインスタンスを停止します:
tiup cluster stop <cluster-name> -R tiflash
- TiDB クラスターを再起動せずにアップグレードします (ファイルの更新のみ):
tiup cluster upgrade <cluster-name> <version> --offline
(例:tiup cluster upgrade <cluster-name> v6.3.0 --offline
- TiDB クラスターをリロードします。
tiup cluster reload <cluster-name>
.リロード後、 TiFlashインスタンスが開始されるため、手動で開始する必要はありません。TiDB Binlogを使用してクラスターにローリング アップデートを適用する場合は、新しいクラスター化インデックス テーブルを作成しないようにしてください。
オフラインアップグレード
オフライン アップグレードの前に、まずクラスター全体を停止する必要があります。
tiup cluster stop <cluster-name>オフライン アップグレードを実行するには、
upgrade
コマンドと--offline
オプションを使用します。<cluster-name>
の場合はクラスターの名前を入力し、<version>
の場合はアップグレードするバージョン (v7.1.3
など) を入力します。tiup cluster upgrade <cluster-name> <version> --offlineアップグレード後、クラスターは自動的に再起動されません。再起動するには
start
コマンドを使用する必要があります。tiup cluster start <cluster-name>
クラスターのバージョンを確認する
display
コマンドを実行して、最新のクラスター バージョンTiDB Version
を表示します。
tiup cluster display <cluster-name>
Cluster type: tidb
Cluster name: <cluster-name>
Cluster version: v7.1.3
FAQ
このセクションでは、 TiUPを使用して TiDB クラスターを更新するときに発生する一般的な問題について説明します。
エラーが発生してアップグレードが中断された場合、このエラーを修正した後にアップグレードを再開するにはどうすればよいですか?
tiup cluster upgrade
コマンドを再実行して、アップグレードを再開します。アップグレード操作では、以前にアップグレードされたノードが再起動されます。アップグレードされたノードを再起動したくない場合は、 replay
サブコマンドを使用して操作を再試行します。
tiup cluster audit
を実行して操作記録を確認します。tiup cluster audit失敗したアップグレード操作レコードを見つけて、この操作レコードの ID を保管します。 ID は次のステップの
<audit-id>
値です。tiup cluster replay <audit-id>
を実行して、対応する操作を再試行します。tiup cluster replay <audit-id>
v6.2.0 以降のバージョンにアップグレードするときにアップグレードが停止する問題を解決するにはどうすればよいですか?
v6.2.0 以降、TiDB ではデフォルトで同時 DDL フレームワークが同時 DDL を実行できるようになります。このフレームワークは、DDL ジョブstorageをKV キューからテーブル キューに変更します。この変更により、一部のシナリオではアップグレードが停止する可能性があります。以下に、この問題を引き起こす可能性のあるいくつかのシナリオと、対応する解決策を示します。
プラグインの読み込みによりアップグレードが停止する
アップグレード中に、DDL ステートメントの実行を必要とする特定のプラグインをロードすると、アップグレードが停止する可能性があります。
解決策: アップグレード中にプラグインをロードしないようにします。代わりに、アップグレードが完了した後にのみプラグインをロードしてください。
オフライン アップグレードに
kill -9
コマンドを使用したため、アップグレードが停止する- 注意事項:
kill -9
コマンドを使用してオフライン アップグレードを実行することは避けてください。必要に応じて、2 分後に新しいバージョンの TiDB ノードを再起動します。 - アップグレードがすでに停止している場合は、影響を受ける TiDB ノードを再起動します。問題が発生したばかりの場合は、2 分後にノードを再起動することをお勧めします。
- 注意事項:
DDL 所有者の変更によりアップグレードが停止する
マルチインスタンスのシナリオでは、ネットワークまたはハードウェアの障害により、DDL 所有者が変更される可能性があります。アップグレード段階で未完了の DDL ステートメントがある場合、アップグレードが停止する可能性があります。
解決:
- スタックした TiDB ノードを終了します (
kill -9
使用は避けてください)。 - 新しいバージョンの TiDB ノードを再起動します。
- スタックした TiDB ノードを終了します (
エビクト リーダーがアップグレード中に長時間待機しすぎました。この手順をスキップして簡単にアップグレードするにはどうすればよいですか?
--force
を指定できます。その後、アップグレード中に PD リーダーの転送プロセスと TiKV リーダーの削除プロセスがスキップされます。バージョンを更新するためにクラスターが直接再起動されます。これは、オンラインで実行されるクラスターに大きな影響を与えます。次のコマンドの<version>
、アップグレード後のバージョンです ( v7.1.3
など)。
tiup cluster upgrade <cluster-name> <version> --force
TiDB クラスターをアップグレードした後に pd-ctl などのツールのバージョンを更新するにはどうすればよいですか?
TiUPを使用して、対応するバージョンのctl
コンポーネントをインストールすることで、ツールのバージョンをアップグレードできます。
tiup install ctl:v7.1.3