オンラインの安全でない回復
恒久的に損傷したレプリカが原因でTiKV上のデータの一部が読み取りおよび書き込み不能になった場合、オンラインの安全でない回復機能を使用して、不可逆回復操作を実行できます。
機能の説明
TiDBでは、ユーザーが定義したレプリカルールに従って、同じデータが同時に複数のストアに保存される場合があります。これにより、1つまたはいくつかのストアが一時的にオフラインになったり破損したりした場合でも、データの読み取りと書き込みが可能になります。ただし、リージョンのほとんどまたはすべてのレプリカが短期間にオフラインになると、データの整合性を確保するために、設計上、リージョンは一時的に使用できなくなります。
データ範囲の複数のレプリカで永続的な損傷(ディスクの損傷など)などの問題が発生し、これらの問題によってストアがオフラインのままになるとします。この場合、このデータ範囲は一時的に利用できません。クラスタを再び使用し、データの巻き戻しまたはデータの損失も受け入れる場合は、理論的には、障害が発生したレプリカをグループから手動で削除することで、レプリカの大部分を再形成できます。これにより、アプリケーション層サービスは、このデータ範囲(古くなっているか空である可能性があります)を再度読み書きできます。
この場合、損失耐性のあるデータを持つ一部のストアが恒久的に損傷している場合は、OnlineUnsafeRecoveryを使用して損失のある回復操作を実行できます。この機能を使用して、PDは、グローバルな視点で、すべてのストアからデータシャードのメタデータを収集し、リアルタイムで完全なリカバリプランを生成します。次に、PDは、存続しているすべてのストアに計画を配布して、データ回復タスクを実行させます。さらに、データ回復計画が配布されると、PDは定期的に回復の進行状況を監視し、必要に応じて計画を再送信します。
ユーザーシナリオ
オンラインの安全でないリカバリ機能は、次のシナリオに適しています。
- 永続的に破損したストアが原因でストアの再起動に失敗するため、アプリケーションサービスのデータは読み取りおよび書き込みできません。
- データの損失を受け入れ、影響を受けるデータを読み取りおよび書き込み可能にすることができます。
- ワンストップのオンラインデータ回復操作を実行したい。
使用法
前提条件
Online Unsafe Recoveryを使用する前に、次の要件が満たされていることを確認してください。
- オフラインストアでは、実際に一部のデータが使用できなくなります。
- オフラインストアを自動的に回復または再開することはできません。
手順1.すべてのタイプのスケジューリングを無効にする
負荷分散など、すべてのタイプの内部スケジューリングを一時的に無効にする必要があります。それらを無効にした後、トリガーされたスケジューリングがスケジュールされたタスクを完了するのに十分な時間を確保できるように、約10分間待つことをお勧めします。
ノート:
スケジューリングを無効にすると、システムはデータホットスポットの問題を解決できなくなります。したがって、リカバリが完了した後、できるだけ早くスケジューリングを有効にする必要があります。
PD制御を使用して、
config show
コマンドを実行して現在の構成を取得します。PD制御を使用して、すべてのタイプのスケジューリングを無効にします。例えば:
手順2.自動的に復元できないストアを削除する
PD制御を使用して、 unsafe remove-failed-stores <store_id>[,<store_id>,...]
コマンドを実行しても自動的に回復できないストアを削除します。
ノート:
このコマンドの返される結果は、要求が受け入れられたことを示すだけであり、リカバリーが正常に完了したことを示すものではありません。店舗は実際にバックグラウンドで復元されます。
ステップ3.進捗状況を確認します
上記のストア削除コマンドが正常に実行されたら、PD Controlを使用して、 unsafe remove-failed-stores show
コマンドを実行することで削除の進行状況を確認できます。コマンドの結果に「最後のリカバリが終了しました」と表示されたら、システムのリカバリは完了です。
ステップ4.読み取りおよび書き込みタスクをテストする
progressコマンドが回復タスクの完了を示したら、次の例のようないくつかの単純なSQLクエリを実行するか、書き込みタスクを実行して、データの読み取りと書き込みが可能であることを確認できます。
select count(*) from table_that_suffered_from_group_majority_failure;
ノート:
データの読み取りと書き込みが可能な状況は、データの損失がないことを示すものではありません。
ステップ5.スケジューリングを再開します
スケジューリングを再開するには、ステップconfig set merge-schedule-limit 0
で変更したconfig set region-schedule-limit 0
、およびconfig set replica-schedule-limit 0
の0
の値を初期値に調整する必要があります。
その後、プロセス全体が終了します。