Amazon FSx for NetApp ONTAPのストレージ部分の機能を深堀りしてみた

記事タイトルとURLをコピーする

はじめに

こんにちは!最近やっと半袖で過ごせるくらいになってきました。 東北在住の阿部です。

以前、FSx for NetApp ONTAPに関するざっくりな記事を執筆させていただきました。 これからいくつかFSx for NetApp ONTAPに関する記事を執筆していきたいと考えており、 まずは、私が一番理解するのに苦戦したストレージ部分について解説していきたいと思います。

FSx for NetApp ONTAPの概要

FSx for NetApp ONTAPの概要については、以前執筆した記事がございますので、そちらをご確認いただけると嬉しいです。

blog.serverworks.co.jp

FSx for NetApp ONTAPのストレージ部分の仕組み

FSx for NetApp ONTAPをファイルサーバーとして利用する場合、そのデータは、まず「SVM(Storage Virtual Machine)」という、仮想サーバーのようなものの上に作成された「ボリューム」に保管されます。 この一文だけだと、あまり理解に苦しむことは無いと思います。ファイルサーバーなら、データがボリュームに保管されるのは当たり前ですよね。

ただし、FSx for NetApp ONTAPでは、ここからさらに「プライマリストレージ」と「キャパシティプールストレージ(容量プール)」という概念が登場します。

FSx for NetApp ONTAPの構成要素

プライマリストレージ

高性能なSSDストレージで構成されています。FSx for NetApp ONTAPを作成する際は、この部分の容量とスループット・IOPSを指定または推奨値を利用してデプロイします。 FSx for NetApp ONTAPにデータが書き込まれるとまずここに格納され、頻繁にアクセスされる高頻度アクセスデータは常にここに保持されます。

キャパシティプールストレージ

オブジェクトストレージ(S3相当)で構成される、非常に安価で大容量なストレージです。ペタバイト規模まで自動的に拡張することができます。 キャパシティプールに直接データを書き込むことはできず、必ず「階層化」という機能によってプライマリストレージから移動されます。

階層化について

FSx for NetApp ONTAPがコスト効率とパフォーマンスを両立できる最大の理由、それが「階層化」という機能になります。 具体的な仕組みは以下の通りです。

  1. データが書き込まれる(プライマリストレージへの書き込み)
  2. 「冷却期間」が始まる(アクセス頻度の監視)
  3. 階層化ポリシーに基づき自動的に「コールド」へ移動(キャパシティプールへの階層化)
  4. 必要になったら「ホット」に戻る(プライマリストレージへの書き込み)

データが書き込まれる(プライマリストレージへの書き込み)

新しいデータがFSx for NetApp ONTAPのボリュームに書き込まれると、まずは必ずプライマリストレージ(SSD)に格納されます。すべてのデータは最初にSSDに書き込まれるので、どんな新規データも高速な書き込み性能の恩恵を受けられます。

「冷却期間」が始まる(アクセス頻度の監視)

データがプライマリストレージに書き込まれると、そのデータには「冷却期間」が設定され、アクセス頻度が監視され始めます。この期間は、デフォルトで31日間。ボリュームごとに2日から183日の間で調整可能です。 この冷却期間中にデータにアクセス(読み書き)があると、「このデータはまだ需要がある(これからもアクセスされる)」と判断されて、冷却期間がリセットされ、引き続きプライマリストレージに留まります。もし頻繁にアクセスされるデータであれば、ずっとSSDに残り続けることになります。

階層化ポリシーに基づき自動的に「コールド」へ移動(キャパシティプールへの階層化)

冷却期間が経過し、かつアクセスがなかったデータは、「これはもうあまり使われないデータ(コールドデータ)」と判断されます。すると、FSx for NetApp ONTAPの内部で、そのデータを自動的にキャパシティプールストレージ(S3ベース)に移動させます。

この移動は、ONTAPがデータを「ブロック」という単位で管理しているために可能な仕組みです。データはブロックごとにアクセス頻度が監視され、ボリューム全体ではなく、アクセス頻度が低いブロックだけがキャパシティプールへ移動します。これにより、SSDの容量を効率的に使い、ホットなデータだけをSSDに残すことができます。

必要になったら「ホット」に戻る(プライマリストレージへの書き込み)

キャパシティプールに移動したデータに、後からアクセスがあった場合はどうなるでしょう? FSx for NetApp ONTAPは、そのアクセスを検知すると、自動的にデータをキャパシティプールからプライマリストレージに読み戻してくれます。 ただし、ウイルス対策スキャン等で順番に読み取られる場合は、コールドのままキャパシティプール階層に残ります。 ランダムアクセスが「ホット」としてマークされるわけです。

この一連の流れが、階層化ポリシーと呼ばれる「どのデータ範囲を、いつまでアクセスがなかったら、階層化するか」をポリシーとして設定することで、実現可能になります。

階層化ポリシーについて

FSx for NetApp ONTAPでは、階層化ポリシーとして以下4パターンを設定可能です。

  • Auto(自動)
  • Snapshot Only(スナップショットのみ)
  • All(すべて)
  • None(なし)

docs.aws.amazon.com

Auto(自動)

Amazon FSxコンソールでボリュームを作るときに標準で設定されるポリシーです。 上述した階層化の仕組みがよしなに行われます。

Snapshot Only(スナップショットのみ)

このポリシーは、スナップショットデータだけをキャパシティプールのストレージ階層に移動します。 Amazon FSx API、AWS CLI、または NetApp ONTAP CLI を使ってボリュームを作成するときに標準で設定されるポリシーです。

All(すべて)

このポリシーでは、すべてのユーザーデータとスナップショットデータを「コールド」として扱い、キャパシティプール階層に保存します。 データが読み込まれても、コールドのままでプライマリストレージには戻されません。 「All(すべて)」の階層化ポリシーを使ってデータを書き込むと、最初はSSD階層に保存され、その後、自動的にキャパシティプールに移されます。 すでにデータが入っているボリュームにこのポリシーを適用した場合も、既存データがSSDからキャパシティプールへ移動されます。 なお、ファイルのメタデータ(名前や属性など)は常にプライマリストレージ階層に残ります。

None(なし)

このポリシーでは、ボリューム内のすべてのデータをプライマリストレージにとどめ、キャパシティプールには移動しないようにします。 もし他のポリシーを使っていて、あとからこのポリシーに切り替えた場合は、キャパシティプールにあるデータ(スナップショットを含む)が自動的にプライマリストレージに戻されます。 ただし、この移行は、SSDの使用率が90%未満で、cloud retrieval policyが「promote」または「on-read」に設定されているときにだけ行われます。 この移行処理は、対象のデータを読み取ることで早めることもできます。

階層化ポリシーのベストプラクティス

ベストプラクティスとして、長期間キャパシティプールに保存するデータを移す場合は、ボリュームに「自動」階層化ポリシーを使うのがおすすめとされています。 「自動」階層化では、データはすぐに移動されるのではなく、まず最低数日間はSSDストレージ階層に保管されます(この期間はボリュームの冷却期間によって決まります)。

階層化のしきい値について

ファイルシステム全体のプライマリストレージの使用率がどのくらいになったら、ONTAPがデータの階層化動作をどう管理するかを決めるルールです。 このしきい値は、ファイルシステム全体のSSDストレージの使用状況によって自動的に適用されます。FSx for NetApp ONTAPは、このしきい値に基づいてデータをキャパシティプールへ移動させたり、読み戻しを制限したりします。

注意点として、FSx for NetApp ONTAPのSSDストレージ容量使用率は、80%を超えないようにするのがベストプラクティスとされています。 これにより、階層化がスムーズに機能し、新しいデータの書き込みや読み込みのパフォーマンスも適切に保たれます。 もし使用率が常に80%を超えているようなら、SSDストレージの容量を増やしたり、IOPSを調整することを検討しましょう。

FSx for NetApp ONTAPでは、主に以下のSSDストレージ使用率のしきい値を使って、ボリュームの階層化を管理しています。

docs.aws.amazon.com

SSDストレージ階層の使用率が 50% 以下

この状態は、SSDストレージが「まだまだ余裕」と見なされます。この場合、[All](すべて)階層化ポリシーを使っているボリュームだけが、積極的にキャパシティプールへデータを移動させます。 [Auto](自動)ポリシーや[Snapshot-only](スナップショット専用)ポリシーが適用されているボリュームでは、このしきい値の範囲内ではデータの階層化は行われません。つまり、SSDにデータが置かれたままになります。

SSDストレージ階層の使用率が 50% 以上

SSDの使用率が50%を超えると、「そろそろ空きを確保し始めるか」という状態に入ります。 [Auto](自動)および[Snapshot-only](スナップショット専用)の階層化ポリシーが適用されたボリュームで、設定された冷却期間が経過したデータが、 この段階でキャパシティプールへと階層化され始めます。これにより、SSDの空き容量を適切に維持しようとします。

SSDストレージ階層の使用率が 90% 以上

「かなりSSDがいっぱいになってきた」という状態です。 この段階になると、[Auto](自動)および[Snapshot-only](スナップショット専用)ポリシーを使用するボリュームに対して、キャパシティプールにある「コールドデータ」をSSDストレージ層に読み戻すことが制限されます。 つまり、アクセスがあってもSSDに戻さずに、キャパシティプールから直接読み込むように動作が変わります。これは、SSDの容量をこれ以上消費しないための安全策として行われます。

SSDストレージ階層の使用率が 98% 以上

「もうSSDの容量が限界だ」という状態です。このしきい値に達すると、階層化が行われなくなります。 具体的には、SSDからキャパシティプールへのデータ移動も、キャパシティプールからSSDへのデータの読み戻しも行われなくなります。 ストレージ階層からの読み取りは可能ですが、新しいデータの書き込みができません。こうなると、ファイルシステムの拡張や不要データの削除など、緊急の対応が必要になります。

おわりに

今回は、FSx for NetApp ONTAPのストレージ部分の機能についてまとめてみました。 この記事がどなたかのお役に立てれば幸いです。

阿部伊織(執筆記事の一覧)

インフラエンジニアからクラウドエンジニアへ転職。