📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

PDリカバリーユーザーガイド



PD RecoverはPDのディザスタリカバリツールであり、正常に起動またはサービスを提供できないPDクラスタを復旧するために使用されます。

ソースコードからコンパイル

  • Goモジュールが使用されるため、 行く 1.23以降が必要です。
  • PDプロジェクトのルートディレクトリで、 make pd-recoverコマンドを使用してbin/pd-recoverコンパイルおよび生成します。

注記:

通常、 PD Controlツールはリリース済みのバイナリまたはDockerに既に含まれているため、ソースコードをコンパイルする必要はありません。ただし、開発者ユーザーは上記のソースコードコンパイル手順を参照してください。

TiDB Toolkitをダウンロード

PD Recover インストール パッケージはTiDB Toolkitに含まれています。TiDB TiDB Toolkit をダウンロードするには、 TiDBツールをダウンロード参照してください。

以下のセクションでは、PDクラスタを復旧するための2つの方法、すなわち、稼働中のPDノードからの復旧と、PDクラスタ全体の再構築について説明します。

方法1:残存するPDノードを使用してPDクラスタを復旧する

クラスタ内のPDノードの過半数で回復不能なエラーが発生すると、クラスタはサービスを提供できなくなります。PDノードが残っている場合は、残っているPDノードを選択し、 Raftグループのメンバーを強制的に変更することでサービスを復旧できます。手順は以下のとおりです。

ステップ1:すべてのノードを停止する

リカバリプロセス中にPDパラメータとの相互作用によって発生するデータ破損やその他の回復不能なエラーを防ぐため、クラスタ内のTiDB、TiKV、およびTiFlashプロセスを停止してください。

ステップ2:生存しているPDノードを起動する

起動パラメータ--force-new-clusterを使用して、残存PDノードを起動し、ノードが元のデータディレクトリを使用するようにします。これは、コマンドラインで--data-dir使用して明示的に指定するか、 conf/pd.tomldata-dir事前に設定することができます。例:

./bin/pd-server --force-new-cluster --name=pd-127.0.0.10-2379 --data-dir=/path/to/existing/pd/data --client-urls=http://0.0.0.0:2379 --advertise-client-urls=http://127.0.0.1:2379 --peer-urls=http://0.0.0.0:2380 --advertise-peer-urls=http://127.0.0.1:2380 --config=conf/pd.toml

注記:

  • コマンドラインで--data-dir指定されていない場合は、 conf/pd.tomldata-dir 、存続しているPDノードの元のデータディレクトリを正しく指していることを確認してください。そうでない場合、 pd-recover後続の操作で失敗する可能性があります。
  • conf/pd.tomlとコマンドライン引数の両方でdata-dir指定されている場合、 conf/pd.tomldata-dir設定が優先されます。

ステップ3: pd-recoverを使用してメタデータを修復する

この方法は少数派のPDノードがサービスを復旧することに依存するため、ノードに古いデータが含まれている可能性があります。1 alloc_id tsoデータがロールバックされると、クラスタデータが破損したり、利用できなくなったりする可能性があります。これを防ぐには、 pd-recover使用してメタデータを変更し、ノードが正しい割り当てIDとTSOサービスを提供できるようにする必要があります。以下に例を示します。

./bin/pd-recover --from-old-member --endpoints=http://127.0.0.1:2379 # Specify the corresponding PD address

注記:

このステップでは、storage内の「 alloc_idが自動的に安全な値である100000000だけ増加します。その結果、後続のクラスタはより大きなIDを割り当てることになります。

さらに、手順pd-recoverではTSOは変更されません。したがって、この手順を実行する前に、ローカル時刻が障害発生時刻よりも後であることを確認し、障害発生前にPDコンポーネント間でNTPクロック同期サービスが有効になっていることを確認してください。有効になっていない場合は、TSOのロールバックを防ぐために、ローカルクロックを将来の時刻に調整する必要があります。

ステップ4:PDノードを再起動する

プロンプトメッセージrecovery is successfulが表示されたら、PDノードを再起動してください。

ステップ5:PDをスケールアウトしてクラスターを起動する

デプロイツールを使用してPDクラスタをスケールアウトし、クラスタ内の他のコンポーネントを起動します。これでPDサービスが利用可能になります。

方法2:PDクラスタを完全に再構築する

この方法は、PDデータがすべて失われたものの、TiDB、TiKV、 TiFlashなどの他のコンポーネントのデータは残っているようなシナリオに適用可能です。

ステップ1:クラスターIDを取得する

クラスタIDは、PD、TiKV、またはTiDBのログから取得できます。クラスタIDを取得するには、サーバー上でログを直接表示してください。

PDログからクラスタIDを取得するには、次のコマンドを実行します。

grep "init cluster id" {{/path/to}}/pd.log
[2019/10/14 10:35:38.880 +00:00] [INFO] [server.go:212] ["init cluster id"] [cluster-id=6747551640615446306] ...

TiDBログからクラスタIDを取得する

TiDBログからクラスタIDを取得するには、次のコマンドを実行します。

grep "init cluster id" {{/path/to}}/tidb.log
2019/10/14 19:23:04.688 client.go:161: [info] [pd] init cluster id 6747551640615446306 ...

TiKVログからクラスタIDを取得する

TiKVログからクラスタIDを取得するには、次のコマンドを実行します。

grep "connect to PD cluster" {{/path/to}}/tikv.log
[2019/10/14 07:06:35.278 +00:00] [INFO] [tikv-server.rs:464] ["connect to PD cluster 6747551640615446306"] ...

ステップ2:割り当てられたIDを取得する

指定する割り当て済みID値は、現在割り当てられている最大のID値よりも大きくなければなりません。割り当て済みIDを取得するには、モニターから取得するか、サーバー上で直接ログを確認してください。

モニターから割り当てられたIDを取得するには、表示しているメトリックが前回のPDリーダーのメトリックであることを確認する必要があります。また、PDダッシュボードの「現在のID割り当て」パネルから、最大の割り当て済みIDを取得できます。

PDログから割り当てられたIDを取得する

PDログから割り当てられたIDを取得するには、表示しているログが最後のPDリーダーのログであることを確認する必要があります。また、次のコマンドを実行することで、割り当てられた最大IDを取得できます。

grep "idAllocator allocates a new id" {{/path/to}}/pd*.log | awk -F'=' '{print $2}' | awk -F']' '{print $1}' | sort -r -n | head -n 1
4000 ...

または、上記のコマンドをすべてのPDサーバーで実行して、最大のサーバーを見つけることもできます。

ステップ3:新しいPDクラスタをデプロイ

新しい PD クラスターをデプロイする前に、既存の PD クラスターを停止し、以前のデータ ディレクトリを削除するか、 --data-dirを使用して新しいデータ ディレクトリを指定する必要があります。

ステップ4:pd-recoverを使用する

PDノード1でのみpd-recoverプログラムを実行してください。再割り当てを避けるため、 -alloc-idパラメータには割り当て済みIDよりも大きな値を設定することをお勧めします。たとえば、監視またはログから取得した最大割り当て済みIDが9000の場合、 -alloc-idパラメータには10000以上の値を渡すことをお勧めします。

./pd-recover -endpoints http://10.0.1.13:2379 -cluster-id 6747551640615446306 -alloc-id 10000

ステップ5:クラスター全体を再起動する

リカバリが成功したことを示すメッセージが表示されたら、クラスター全体を再起動してください。

FAQ

クラスターIDを取得する際に、複数のクラスターIDが見つかりました。

PDクラスタが作成されると、新しいクラスタIDが生成されます。古いクラスタのクラスタIDは、ログを確認することで確認できます。

pd-recoverを実行すると、エラー「 dial tcp 10.0.1.13:2379: connect: connection refusedが返されます。

PD サービスは、 pd-recover実行する際に必要です。PD Recover を使用する前に、PD クラスタをデプロイ起動してください。

このページは役に立ちましたか?