ファイル数が多いNASワークロードのベストプラクティス
ファイル数の多いワークロードの設計では、パブリックinodeの総数、最大ディレクトリ内のエントリ数、メタデータ操作レート、およびライフサイクルタスクを考慮する必要があります。"計画アプローチ"に記載されているようにそれらの入力を収集し、以下の推奨事項に従ってください。ファイル数を唯一の制限として扱ったり、データ容量だけに頼ったりしないでください。
ストレージのサイズを決定する前に、ネームスペースのプロファイリングを行う
収集または推定:
-
現在およびピーク時のファイル、ディレクトリ、ストリーム、およびACLオブジェクトの合計数
-
年間成長率またはプロジェクト段階別成長率
-
1秒あたりに作成および削除されるファイルのピーク値
-
1つのディレクトリにおけるピークエントリ
-
ファイル名の長さ分布と文字セット
-
SMB DOS 8.3または代替NFS名の使用
-
読み取り、書き込み、検索、属性、列挙、名前変更、削除レート
-
Snapshotスケジュールおよび保持
-
バックアップ、レプリケーション、移行、分析、およびセキュリティスキャンの頻度
日平均値ではなく、最高水位の値を使用してください。ビルドパイプライン、分析ジョブ、移行、および一時的なスクラッチワークフローは、多くの場合、短期間に最大の名前空間を作成し、その後クリーンアップしますが、inodeファイルとディレクトリファイルは、クリーンアップ後もハイウォーターマークを保持する可能性があります。
maxfilesとmaxdir-sizeを個別に設定する
2つの異なる予測を維持します:
-
ボリュームinode予測: FlexVolまたは各FlexGroupコンスティチュエントで想定されるすべてのパブリックファイルシステムオブジェクト。
-
最大ディレクトリ予測: 最も多くの名前または最も大きな名前を持つディレクトリの、ディスク上のディレクトリファイルバイト数。
*一方の値から他方の値を導き出さないでください。*シャーディングされた名前空間(ファイルが複数のディレクトリに分割されている)は、大きなディレクトリを作成せずに `maxfiles`を使い果たす可能性があります。単一のフラットディレクトリは、ボリュームに数百万の空きinodeがある状態でも `maxdir-size`の制限に達する可能性があります。
*NTFSまたは高度にACLが設定された名前空間において、目に見えるファイル数のみに基づいてサイズを設定しないでください maxfiles。*ディレクトリ、ACL iノード、名前付きストリーム、その他の公開オブジェクトをプロジェクションに含めてください。ACLが多用されている場合は、予測されるファイルとディレクトリ数の最大2倍を保守的な開始見積もりとして `files`に使用し、ACL共有により実際の使用量が削減される可能性があるため、代表的なデータを用いて検証してください。
-
ファイル数の多いボリュームの場合、ボリュームサイズとプロトコルの制約が許す限り、 `files`を現在の `files-maximum-possible`に設定してください。この上限は領域を事前に割り当てるものではなく、繰り返し上限を引き上げることなく `files-used`が許容量まで拡張できるようにするものです。
-
単一ディレクトリの必要性が明確に示された場合にのみ `maxdir-size`上げます。通常は約2%ずつ段階的に増加させます。"maxfilesの制御"および"maxdir-sizeを超えるとどうなりますか?"を参照してください。
"ONTAP inode タイプ" および "Maxdir-size と large ONTAP ディレクトリ" を参照してください。
シャーディングされたディレクトリ構造を推奨します
名前空間のレイアウトには、一般的に3種類あります。
-
フラット: 1つまたは少数のディレクトリに、同じ階層に多数のファイルが含まれています。
-
ワイド: 多数のトップレベルディレクトリがファイルを分割します。
-
Deep: 最上位ディレクトリの数が少ないほど、サブディレクトリのレベルが複数になります。
アプリケーションが広範囲または深い階層構造を利用できる場合は、可能な限り、数百万もの名前を単一のフラットなディレクトリレベルに配置することは避けてください。フラットレイアウトはメモリとCPUの処理を集中させ、大量 GETATTR、 READDIR、検索、および削除操作時のレイテンシを増加させる可能性があります。FlexGroupボリュームでは、大きなフラットディレクトリはリモートエントリをさらに生成し、FlexVolでの同じ表示名数の場合よりも早くディレクトリファイルが上限に近づく可能性があります maxdir-size。
FlexGroupボリュームは一般的に、1つの大きなフラットなディレクトリよりも、多数の小さなディレクトリで構成する方がうまく機能します。約2MiB以下のディレクトリは、単純なスキャンパスに留まります。ONTAP 9.2以降では、より大きなディレクトリが自動的にインデックス化されるため、ターゲットを絞った検索が容易になります。インデックス作成によって、非常に大きなディレクトリがシャーディングされた階層構造と同等になるわけではありません。列挙、ワイルドカードスキャン、および単一ディレクトリ作成時のシリアル化は依然として適用されます。ONTAPは、親ディレクトリへのファイルのローカル性を優先しながら、FlexGroupの子ディレクトリをリモートに配置することができ、これによりそれらのファイルのリモートレイテンシを低減します。
ファイルを階層構造に分散させるということは、ディレクトリ数を増やし、各ディレクトリ内のファイル数を減らすことを意味します。
一般的なシャーディングキーには以下が含まれます:
-
ハッシュ接頭辞
-
顧客、プロジェクト、またはテナント
-
日付または時間帯
-
データセット、ジョブ、またはワークフローのステージ
-
オブジェクトタイプまたはライフサイクル状態
ディレクトリ操作を管理しやすいように十分な数のシャードを選択しますが、ディレクトリ数自体が過剰になるほど多くのほぼ空のディレクトリを作成しないようにしてください。決定論的な方式では、ファイルの配置が予測可能になり、クライアントはすべてのシャードをスキャンすることなくファイルの位置を特定できます。
フラットなレイアウトと深いレイアウトは、どちらも有効です。完全なパス長は、NASプロトコル、クライアントのオペレーティングシステム、およびアプリケーションの制限内に収めてください。フラットなレイアウトが避けられない場合は、"maxdir-size と現在のディレクトリサイズの表示"で説明されているように、最大のディレクトリファイルの現在のサイズと `maxdir-size`ヘッドルームを監視し、制御された増加が適切かどうかを検証してください。
適切なボリュームアーキテクチャを選択してください
FlexVol
1つのボリュームの容量(1TB未満)、inodeの規模(20億未満)、およびパフォーマンス領域がワークロード(取り込み量の減少、クライアント数の減少)を満たす場合は、FlexVolを使用してください。FlexVolボリュームは、クラスター内で多数のボリューム/ファイルシステムを作成する必要があり、総ボリューム数に達するリスクがあるワークロード(Kubernetes PVCなど)や、VMwareデータストアについても考慮する必要があります。
FlexGroup
ワークロードがより大きな総容量(300TB超)、ファイル数の規模(20億超)、および構成要素とノード間の並列処理のメリットを享受できる場合は、FlexGroupを使用してください。
計画すべき事項:
-
構成要素ごとのiノード制限と分布
-
NFS 64ビットファイル識別子(FlexGroupが約20億ファイルを超える可能性がある場合)("NFS 64ビットファイル識別子とFlexGroupファイル数"を参照)
-
総容量と構成要素容量のバランス(注:NetApp AFXの場合、これは必須ではありません)
-
ワークロードの配置動作
-
FlexGroup 固有のディレクトリエントリ表現
-
データ保護互換性
-
ファイルが配布されたときのアプリケーションの動作
FlexGroupは、1つの論理ディレクトリに対する操作を自動的に並列化することはありません。パフォーマンスのバランスを維持するためには、ディレクトリ間でのシャード分割が引き続き有効です。
営業利益率を残す
使用中のinode数または最大のディレクトリファイルの100%で定常状態の動作を計画しないでください。予期せぬ増加、一時オブジェクト、Snapshot保持メタデータ、ACLとストリーム、移行の重複、バックアップ作業、FlexGroup配置の不均衡、およびファイル名を変更するソフトウェアの変更のために余裕を確保してください。
`files`を現在の最大値に設定することは上限を意味するものであり、最後のinodeがなくなるまで実行できるという許可ではありません。その上限に達するずっと前に `files-used`のアラートを設定してください。 `maxdir-size`については、link:high-file-count-workloads-05-maxdirsize-impact.html#what-happens-when-maxdir-size-is-exceeded["maxdir-sizeを超えるとどうなりますか?"]における約2%増加のガイダンスは、上限を引き上げる方法を示すものであり、普遍的な運用マージンではありません。
メタデータ容量を考慮する
inodeファイル、ディレクトリファイル、インデックス、Snapshot、およびアグリゲートメタデータをそれぞれ個別に予算化します。割り当てられたパブリックinodeごとに288バイトを基本inodeファイル推定値として使用します。"容量が及ぼす影響"を参照してください。 `files`を増やしても、そのスペースはすぐには割り当てられません。割り当てられたinodeファイルのピーク容量を永続的なものとして扱います。
`volume show-space`を使用して、すべてのCLIカウンターをバイト値として変換するのではなく、inodeとメタデータの容量を検査してください。
現実的なファイル名のシナリオを使用する
少なくとも以下のテストを実施してください:
-
ASCII文字のみの短い名前
-
ワークロードのファイル名の中央値と上位パーセンタイル値の長さ
-
非ASCII文字または補助Unicode文字を使用する場合
-
DOS 8.3エイリアスを生成するSMBワークロード
-
代替名を必要とするマルチプロトコルアクセス
-
FlexGroup 本番環境の配置代表
パスの長さとベース名の長さは互換性がありません。複数のディレクトリにまたがる長いパスは、プロトコルの制限や inode 数に影響を与え、各ディレクトリにはその直下のコンポーネントのみが格納されます。
スループットだけでなく、メタデータ操作もテストする
連続的な帯域幅テストでは、ファイル数が多い場合の動作を予測することはできません。含む:
-
ファイルとディレクトリを作成する
-
既存名と未登録名の検索
-
`stat`または属性演算
-
開閉
-
ディレクトリ内およびディレクトリ間で名前を変更する
-
リンク解除と再帰的削除
-
ディレクトリの完全列挙と部分列挙
-
ワイルドカード検索
-
コールドキャッシュとウォームキャッシュの実行
-
必要に応じてNFSとSMBの混在アクセス
レイテンシ分布、CPU、キャッシュの動作、ネットワーク負荷、および完了時間を測定します。本番環境でSnapshot、レプリケーション、分析、バックアップ、セキュリティスキャンが同時に実行される場合は、これらの操作中にテストを繰り返してください。
ライフサイクル操作を検証する
初回取り込み以降のテスト:
-
予測されるピーク数への拡大
-
大規模削除と非同期削除
-
バックアップと復元
-
SnapMirror の初期化、更新、フェイルオーバー、および再同期
-
クローンやスナップショットを多用するワークフロー
-
ボリュームの移動またはストレージのフェイルオーバー
-
ONTAPのアップグレード、および必要に応じたリバートチェック
-
FlexVol から FlexGroup への移行、またはプロトコル環境間の移行
ディレクトリインデックスは、転送先で作成または転送する必要がある場合があります。パブリックインデックス転送を有効にするのは、再構築を回避することでリカバリが大幅に改善される場合に限ります。ローカル検索の改善にはつながりません。参照:"パブリックディレクトリインデックス転送を有効にするタイミング"
inodeの制限と割り当てを監視する
"maxfiles、EMSイベント、ONTAP機能強化のモニタリング"で説明されているように、 `files-used`を `files`および `inodefile-public-capacity`と比較して追跡します。 `files-used`が `files`に達する前にアラートを送信します。FlexGroupボリュームの場合、全体的な合計に余裕があるように見える場合でも、コンスティチュエント レベルのイベントを調査します。
大規模ディレクトリを監視する
ディレクトリファイルサイズを測定し、"maxdir-size と現在のディレクトリサイズの表示"の説明に従って EMS ファイル ID を解決します。警告が発生する前に、既知のフラットなディレクトリや頻繁に更新されるディレクトリをインベントリしてください。
故障が発生する前に警告に対応する
inode の警告:
-
チェック
files-used、files、files-maximum-possible、ボリュームサイズ、および容量。 -
成長が予想されるものか、異常なものかを判断します。
-
増加
files、ボリュームを拡張するか、必要に応じて不要なオブジェクトを削除してください。 -
FlexGroup の場合は、影響を受けるコンスティチュエントと配置バランスを確認してください。
ディレクトリサイズに関する警告について:
-
ディレクトリのinodeをパスに解決します。
-
現在のディレクトリのファイルサイズを測定し、ファイル名の挙動を分析します。
-
際限のないフラットディレクトリの拡大を阻止します。
-
可能な場合は、名前を新しいディレクトリにシャードまたは移行してください。
-
増加 `maxdir-size`は、アプリケーションの再構築が不可能であり、かつパフォーマンスリスクが理解されている場合に限り行ってください。
`callhome.no.inodes`または `wafl.dir.size.max`を待たないでください。その時点では、クライアントの作成はすでに失敗しています。
削除動作の管理
ファイルを削除すると、パブリックinodeが解放されて再利用できるようになりますが、パブリックinodeファイルのサイズは縮小されません。同様に、ディレクトリから名前を削除すると、ディレクトリのスロットが再利用可能になりますが、通常はディレクトリファイルの最大サイズは縮小されません。
大規模な削除はメタデータを大量に消費する可能性があり、一時的にプライベートゾンビiノードを増加させる可能性があります。本番トラフィックと競合する場合は、クライアント側の再帰的削除をレート制限してください(rm -rf)。
ONTAP 9.8 以降、 volume file async-delete は NFS や SMB 経由ではなく、クラスタからディレクトリを削除することで、クライアントおよびネットワークの競合を回避します。これは FlexVol および FlexGroup ボリュームに適用されます。ONTAP はパスをスキャンし、最初にサブディレクトリの内容を削除し、並列削除タスクを実行します(デフォルトは 5,000 の同時タスク。50 から 100,000 まで設定可能)。TR-4571 のテストでは、24,000 エントリのツリーにおいてシングルスレッドの rm -rf と比較して約 10 倍高速でした。
volume file async-delete start -vserver <svm> -volume <volume> -path /relative/dir volume file async-delete show
制約事項:ボリュームはオンラインでマウントされている必要があり、パスはディレクトリである必要があり(単一のファイルではない)、非同期削除ジョブは一度に1つしか実行できません。
大きなスパースディレクトリが問題となる場合は、残りのエントリを新しいディレクトリにコピーしてください。 `maxdir-size`を低下させても、コンパクト化は行われません。"スパースディレクトリとホールパンチング"を参照してください。
プランノードとHAヘッドルーム
ファイル数が多い処理は、データスループットが低い場合でも、CPU、メモリ、キャッシュ、ストレージI/Oを大量に消費します。以下のための余裕を確保してください:
-
メタデータの急増
-
コールドキャッシュのルックアップと列挙
-
スキャナーとデータ保護
-
ストレージのフェイルオーバーまたはテイクオーバー
-
FlexGroup リモート操作
-
ノードを共有するその他のボリューム
ワークロードのバランスを取るには、容量やスループットだけでなく、観測されたメタデータの需要も考慮に入れてください。ネットワークとディスクの帯域幅が利用可能に見えても、ノードがメタデータによって制限されることがあります。
クライアント接続をデータ LIF とノード全体に分散させる
ファイル数の多いNASは、メタデータに制約を受けることが多いです。NFSまたはSMBマウントは通常、1つのTCP接続を使用して1つのデータLIFにアクセスし、そのLIFは1つのノード上に存在します。多数のクライアント、スキャナ、またはバックアップジョブが同じアドレスをマウントすると、クラスタの他の部分がアイドル状態であっても、そのノードはプロトコル処理にCPUを消費します。FlexGroupはファイル操作をクラスタネットワーク経由でリダイレクトできますが、クライアント接続を所有するノードへの負荷は解消されません。
-
SVM内に複数のデータLIF(データネットワークインターフェース)を作成し、ワークロードを処理する各ノードに複数のLIFを配置することで、クライアントが各ノードに複数の経路でアクセスできるようにします。
-
参加すべきすべてのノードが、そのSVM内に少なくとも1つのデータLIFを持っていることを確認してください。
-
これらのLIFとノード全体でマウントのバランスを取ります。IPアドレスでマウントする場合は、アドレスを均等に選択してください。クライアントが名前でマウントする場合、1つのFQDNの背後に複数のLIFアドレスを提示し、DNSロード バランシングを使用してください。
-
ワークロード全体を単一のLIFまたは単一のノードに固定しないでください。
NFS `nconnect`またはSMBマルチチャネルをサポートする単一のクライアントは、1つのマウント上で追加の接続を開くことができます。これはそのクライアントにとって有益ですが、多数のクライアントをLIFやノードに分散させる方法を置き換えるものではありません。
現在の ONTAP リリースを使用する
ONTAP の以降のリリースには、ディレクトリインデックス作成、inode 管理の改善、スパースディレクトリの最適化、ディレクトリインデックスの転送、その他ファイル数の多いシステム向けの機能強化が含まれています。アップグレードの決定にあたっては、プラットフォームのサポート状況、データ保護の互換性、およびアプリケーションの適合性を考慮する必要があります。
ファイル数が多いという理由だけで機能を有効にしないでください。
-
単一ディレクトリの要件が明確に示されている場合にのみ、 `maxdir-size`を引き上げてください。
-
適切な場合は現在の最大値に `files`を設定します。"maxfilesの制御"を参照してください。
-
ディレクトリインデックス転送は、レプリケーションまたはリストア時にインデックスを保持する必要がある場合にのみ有効にしてください。
-
ファイルシステム分析は、その分析結果がスキャン作業を正当化する場合にのみ有効にしてください。
-
`-has-dir-index-public`と `-has-optimized-sparse-directories`は、有効化スイッチではなくステータスとして扱います。
ONTAP 9.17.1 以降、ファイルシステム分析は、新しく作成された NAS SVM の新しいボリュームでデフォルトで有効にすることができます。無効になっていると想定するのではなく、チェック `-analytics-state`し、ファイル数の多いワークロードを評価する際には、その名前空間スキャンを考慮してください。
前提条件と閾値を文書化する
レコード:
-
ワークロードとファイル名に関する前提条件
-
ファイル数とディレクトリ数のピーク値
-
選択されたマージン
-
ボリュームと構成要素の配置
-
データLIFとクライアントマウントレイアウト
-
`files`と `maxdir-size`の値
-
アラートのしきい値と対応担当者
-
想定される取り込み率と削除率
-
リカバリと移行の目標
-
ONTAPリリースとプラットフォームの依存関係
アプリケーションのバージョン、ファイル名の形式、保持期間、プロトコル、またはデータ保護ワークフローが変更された場合は、モデルを見直してください。
