ディスク容量の管理
このドキュメントでは、Doris のディスクストレージ容量に関するシステムパラメータと対処方法を説明します。運用担当者がディスクのしきい値の仕組みを理解し、適切なしきい値を設定して、ディスク容量が逼迫した場合やディスクがいっぱいになった場合にクラスタを迅速に復旧するための情報を提供します。
Doris のデータディスクを適切に管理しないと、ディスクがいっぱいになった時点で BE プロセスが異常終了します。Doris は各ディスクの使用率と残り容量を監視し、複数の警戒しきい値に応じてシステム内の操作を制限することで、ディスクがいっぱいになる事態をできるだけ防ぎます。
対象となるシナリオ
| シナリオ | 確認する点 |
|---|---|
| 日常的な容量計画 | FE/BE のしきい値の仕組みを理解し、早めに警戒する |
| ディスク使用率が高水位に近づいている | FE のしきい値を調整し、バランシングや復旧による容量の追加消費を防ぐ |
| ディスク使用率がフラッドステージに達した | 書き込みがブロックされる原因を調べ、積極的に空き容量を確保する |
| ディスクがいっぱいになり、BE が起動できない | 一時ファイルを削除し、プロセスを緊急復旧する |
| 複数レプリカを持つテーブルの容量を迅速に削減したい | レプリカ数を一時的に減らし、復旧後に元に戻す |
用語
- Data Dir(データディレクトリ): BE の
storage_root_pathで指定する各データディレクトリです。この設定はbe.confにあります。通常、各データディレクトリは一つのディスクに対応するため、以下ではディスクがデータディレクトリを指す場合もあります。 - High Watermark(高水位): FE 側の低いほうのしきい値です。使用率がこのしきい値を超えると、バランシングなど一部の操作が制限されます。
- Flood Stage(フラッドステージ): FE 側と BE 側の両方にある高いほうのしきい値です。使用率がこのしきい値を超えると、自己保護のため、書き込みなどの重要な操作が禁止されます。
基本的な仕組み
- BE は約一分ごとにディスク使用状況を FE に報告します。
- FE は報告された統計情報に基づいて、操作を段階的に制限します。
- 使用率が高水位を超えると、バランシングやデコミッションなどの操作が制限されます。
- 使用率がフラッドステージを超えると、ロードやリストアなどの書き込み操作が禁止されます。
- FE は BE のディスク状態を完全にリアルタイムで把握できず、コンパクションなど BE 内部のタスクも制御できません。そのため、BE 側にもフラッドステージが設定されており、BE は自己保護のために一部の操作を能動的に拒否・停止します。
FE のパラメータ
FE 側では、高水位とフラッドステージの二段階のしきい値を設定します。各段階には「使用率」と「残り容量」の二つの条件があります。
高水位
storage_high_watermark_usage_percent defaults to 85 (85%).
storage_min_left_capacity_bytes defaults to 2GB.
発動条件: ディスク使用率が storage_high_watermark_usage_percent より大きい、またはディスクの残り容量が storage_min_left_capacity_bytes より小さい場合です。
発動すると、このディスクは次の操作の転送先パスとして使用されなくなります。
- Tablet のバランシング(Balance)
- Colocation テーブルのデータシャードの再配置(Relocation)
- デコミッション
フラッドステージ
storage_flood_stage_usage_percent defaults to 95 (95%).
storage_flood_stage_left_capacity_bytes defaults to 1GB.
発動条件: ディスク使用率が storage_flood_stage_usage_percent より大きく、かつディスクの残り容量が storage_flood_stage_left_capacity_bytes より小さい場合です。
発動すると、このディスクは転送先パスとして使用されなくなり、次の操作が禁止されます。
- Tablet のバランシング(Balance)
- Colocation テーブルのデータシャードの再配置(Relocation)
- レプリカの補充
- リストア操作
- データロード(Load/Insert)
FE パラメータの一覧
| パラメータ | デフォルト | 説明 |
|---|---|---|
storage_high_watermark_usage_percent | 85 (85%) | FE の高水位における使用率のしきい値 |
storage_min_left_capacity_bytes | 2 GB | FE の高水位における残り容量のしきい値 |
storage_flood_stage_usage_percent | 95 (95%) | FE のフラッドステージにおける使用率のしきい値 |
storage_flood_stage_left_capacity_bytes | 1 GB | FE のフラッドステージにおける残り容量のしきい値 |
BE のパラメータ
BE 側ではフラッドステージのみを設定します。FE による検知が遅れた場合や、FE が BE 内部のタスクを制御できない場合に、自己保護のために使用します。
storage_flood_stage_usage_percent defaults to 90 (90%).
storage_flood_stage_left_capacity_bytes defaults to 1GB.
発動条件: ディスク使用率が storage_flood_stage_usage_percent より大きく、かつディスクの残り容量が storage_flood_stage_left_capacity_bytes より小さい場合です。
発動すると、このディスクに対する次の操作が禁止されます。
- Base/Cumulative Compaction
- データ書き込み(すべてのロード操作を含む)
- Clone Task: 通常、レプリカの修復またはバランシング中に発生します
- Push Task: Hadoop ロードの Loading フェーズでファイルをダウンロードするときに発生します
- Alter Task: Schema Change または Rollup のタスクです
- Download Task: リストア操作の Downloading フェーズです
BE パラメータの一覧
| パラメータ | デフォルト | 説明 |
|---|---|---|
storage_flood_stage_usage_percent | 90 (90%) | BE のフラッドステージにおける使用率のしきい値 |
storage_flood_stage_left_capacity_bytes | 1 GB | BE のフラッドステージにおける残り容量のしきい値 |
ディスク容量の解放
ディスク使用率が高水位、さらにはフラッドステージを超えると、多くの操作が禁止されます。次の方法を試してディスク使用率を下げ、システムを復旧できます。リスクの低い方法を優先し、データファイルの直接削除は最後の手段としてのみ検討してください。
| 優先順位 | 操作 | 適用場面 | リスク |
|---|---|---|---|
| 1 | テーブルまたはパーティションを削除する | 削除できる過去のデータがある | 復元できないが、影響範囲は限定される |
| 2 | BE をスケールアウトする | リソースに余裕があり、数時間から数日待てる | 低い |
| 3 | テーブルまたはパーティションのレプリカ数を変更する | 緊急時に容量を一時的に減らしたい | データの信頼性が低下する |
| 4 | 余分なファイル(ログ、スナップショット、ごみ箱)を削除する | ディスクがいっぱいで BE が起動できない | ごみ箱からの復元に影響する |
| 5 | データファイルを削除する | 上記の方法がすべて失敗した場合の最後の手段 | データが失われる可能性がある |
テーブルまたはパーティションを削除する
テーブルまたはパーティションを削除すると、ディスク使用率を迅速に下げてクラスタを復旧できます。
注記: ディスク使用率を迅速に下げるのは
DROPのみで、DELETEでは下げられません。
DROP TABLE tbl;
ALTER TABLE tbl DROP PARTITION p1;
BE をスケールアウトする
スケールアウトすると、データシャードがディスク使用率の低い BE ノードへ自動的にバランシングされます。データ量とノード数に応じて、クラスタが均衡状態になるまで数時間から数日かかります。
テーブルまたはパーティションのレプリカ数を変更する
テーブルまたはパーティションのレプリカ数を減らせます。たとえば、デフォルトの 3 レプリカを 2 レプリカに減らせます。この方法はデータの信頼性を低下させますが、ディスク使用率を迅速に下げてクラスタを正常な状態に戻せるため、通常は緊急復旧に使用します。復旧後は、スケールアウトまたはデータの削除によってディスク使用率を下げてから、レプリカ数を 3 に戻してください。
レプリカ数の変更はすぐに反映され、余分なレプリカはバックグラウンドで非同期に削除されます。
ALTER TABLE tbl MODIFY PARTITION p1 SET("replication_num" = "2");
余分なファイルを削除する
ディスクがいっぱいになったために BE プロセスがすでにクラッシュし、起動できない場合(FE または BE による検知が遅れたときに発生する可能性があります)、BE プロセスを起動できるように、データディレクトリ内の一時ファイルを削除できます。次のディレクトリ内のファイルは直接削除できます。
log/: ログディレクトリ内のログファイル。snapshot/: スナップショットディレクトリ内のスナップショットファイル。trash/: ごみ箱内のファイル。
注記: この操作は BE のごみ箱からのデータ復元に影響します。
BE がまだ起動できる場合は、次のコマンドで一時ファイルを明示的にクリーンアップします。このコマンドはすべてのごみ箱内のファイルと期限切れのスナップショットファイルを削除し、ごみ箱からのデータ復元に影響します。
ADMIN CLEAN TRASH ON(BackendHost:BackendHeartBeatPort);
ADMIN CLEAN TRASH を手動で実行しなくても、システムは数分から数十分以内に自動クリーンアップを実行します。次の二つの場合があります。
- ディスク使用率がフラッドステージの 90% に達していない場合: 期限切れのごみ箱内のファイルと期限切れのスナップショットファイルだけが削除され、最近のファイルは保持されるため、データ復元には影響しません。
- ディスク使用率がフラッドステージの 90% に達している場合: ごみ箱内のファイルがすべて削除され、期限切れのスナップショットファイルも削除されます。この時点で、ごみ箱からの復元に影響します。
自動クリーンアップの間隔は、設定項目 max_garbage_sweep_interval と min_garbage_sweep_interval で変更できます。
ごみ箱内のファイルがなくて復元に失敗した場合、次のような結果が表示されることがあります。
{"status": "Fail","msg": "can find tablet path in trash"}
データファイルを削除する(危険!!!)
上記のどの操作でも空き容量を確保できない場合は、データファイルを直接削除して容量を確保する必要があります。データファイルは、指定されたデータディレクトリの data/ ディレクトリ内にあります。
警告: データシャード(Tablet)を削除する前に、その Tablet の少なくとも一つのレプリカが正常であることを確認してください。正常なレプリカがない場合、唯一のレプリカを削除するとデータが失われます。
ID が 12345 の Tablet を削除する場合、手順は次のとおりです。
-
Tablet のディレクトリを見つけます。通常は
data/shard_id/tablet_id/の下にあります。例:data/0/12345/ -
Tablet ID とスキーマハッシュを記録します。スキーマハッシュは、前の手順で見つけたディレクトリの直下にあるディレクトリの名前です。例:
352781111。data/0/12345/352781111 -
データディレクトリを削除します。
rm -rf data/0/12345/ -
Tablet のメタデータを削除します(詳細は Tablet メタデータ管理ツールを参照)。
./lib/meta_tool --operation=delete_header --root_path=/path/to/root_path --tablet_id=12345 --schema_hash=352781111
FAQ
Q: ロードタスクがエラーで拒否されます。どうすればよいですか?
ディスク使用率が FE または BE のフラッドステージを超えています。「ディスク容量の解放」セクションを参照し、過去のパーティションの DROP またはスケールアウトを優先してください。
Q: レプリカのバランシングが長時間収束しません。どうすればよいですか?
一部のディスクが高水位を超えているため、バランシングの転送先として使用できません。高水位を超えているディスクの空き容量を確保するか、BE をスケールアウトしてから、自動バランシングを待ってください。
Q: ディスクがいっぱいで BE プロセスが起動しません。どうすればよいですか?
data/ を格納するディスクがいっぱいです。まず log/、snapshot/、trash/ を削除して空き容量を確保し、その後 BE を起動してください。
Q: ADMIN CLEAN TRASH の実行後、データを復元できません。どうすればよいですか?
ごみ箱内のファイルは削除されています。この操作は元に戻せません。復旧前に影響を評価してください。
Q: 自動クリーンアップで can find tablet path in trash が返されます。どうすればよいですか?
ディスク使用率がフラッドステージの 90% に達し、ごみ箱内のファイルがすべて削除されています。しきい値の状態を確認し、ディスク容量を回復してから再試行してください。