【NetApp】Flash Poolに関する基礎的な内容と設定方法

2022年7月11日

こんにちは、キクです。

僕は業務上NetAppに触れる機会が比較的多いこともあり、何度かONTAPクラスタの構築にも携わらせていただきました。

そんな中で、環境によっては「Flash Pool」というものを取り入れることもありました。

ただ、先日そのFlash Poolに関するトラブルにも遭遇しました。

そちらを題材に記事を書きたいところですが、本ブログではFlash Poolに触れたことがなかったので、まずは前段としてFlash Poolの基礎的な内容を残しておきたいなと思いました。

というわけで、今回は『Flash Poolに関する基礎的な内容』をテーマに書いていきたいと思います!

それでは、よろしくお願いします。

動作環境

本記事の内容は下記の環境で実施したものになります
・ONTAP 9.8

注意事項

本記事は僕が経験した内容をもとに記載しておりますが、実行環境や設定などによって動作が異なる場合があります。
そのため『参考程度』にお読みいただけますと幸いです。

Flash Poolとは

まず「Flash Poolとは何なのか」について書いていきたいと思います。

Flash PoolとはSSDとHDD(SASまたはNL-SAS)を併用して、高速なデータアクセスを可能とする機能になります。
この高速処理はSSDをキャッシュとして利用することで実現されています。

後程詳しく書きますが、HDDで構成されたデータ用アグリゲートにSSDで構成されたキャッシュ用RAIDグループを組み込んだものが「Flash Pool」となります。

パフォーマンスの向上

Flash Poolとしては以下のようなデータを高速に処理することができます。

  • ランダムRead
  • ランダムOverWrite

初回データの読み込みおよび書き込みはコントローラに搭載されたシステムメモリが担当しますが、そこからキャッシュアウトされたデータはFlash Poolとして組み込んだSSDへ配置されます。
Flash Poolの容量がいっぱいになると、アクセス頻度の低いデータから自動的に削除されていきます。

ただ、書き込みデータについては削除されては困るので、そちらについては別途HDDに保存されます。

netapp-flashpool1

ポイント

ちなみに、Flash Poolはアグリゲートとして構成されるため、コントローラのTakeover時にも動作が継続されます。
そのため、メンテナンスなどの計画的なコントローラ停止時だけでなく障害発生時にもキャッシュされたデータが維持できるので安心です。

機器設置面積の削減

Flash Poolはキャッシュ利用によるパフォーマンス向上も魅力の1つですが、機器コストや機器設置面積の削減にも貢献してくれる面も持ちます。

求められる性能要件を満たすためにHDDを必要以上に搭載するというケースもあるかと思います。
その「性能要件」の部分をFlash Poolで賄うことができればHDDの搭載本数を減らすことも可能です。それは結果として「コストの削減」や「接地面積の削減」に繋がることになりますよね。

netapp-flashpool2

ユニットという概念

少しややこしい話になりますが、Flash Poolの「ユニット」という概念についても触れておこうと思います。
Flash Poolとして利用するSSDは、まず「ストレージプール」という形でまとめます。

ただ、このSSDストレージプールをそのままFlash Poolに組み込むわけではありません。
ストレージプールを作成すると自動的に「ユニット」という形で4分割されます。
この分割(パーティショニング)された1つ1つのユニットをデータ用のアグリゲートに割り当てることでFlash Poolが完成します。

netapp-flashpool3

なお、この4分割されたユニットはデフォルトでは各コントローラに2つずつ割り振られます。
つまりコントローラAがオーナー(管理者)のユニットが2つ、コントローラBがオーナーのユニットが2つということになります。

補足

僕はまだ実施したことがないのですが、この2:2の割り振りはHAペア同士であれば変更することもできるみたいです。
参考:Flash Pool SSDパーティショニングでFlash Poolアグリゲートのキャッシュ割り当ての柔軟性を拡張する方法

Flash Poolの設定方法

それでは「Flash Poolの設定方法」について書いていきたいと思います。
Flash Pool設定には以下のような手順を実施していきます。

FlahPool設定の3ステップ

・ステップ1 :SSDストレージプールの作成
・ステップ2 :データ用アグリゲートのHybridモード有効化
・ステップ3:データ用アグリゲートのFlash Poolアグリゲート化

ステップ1:SSDストレージプールの作成

ステップ1ではFlash Poolとして利用するSSDストレージプールを作成していきます。
まず、以下のコマンドを実行して作業前のストレージプール状態を確認しておきましょう。

::> storage pool show

もしストレージプールが存在していなければ以下のように表示されます。

This table is currently empty.

次に、以下のコマンドを実行してストレージプールを作成します。

::> storage pool create -storage-pool ストレージプール名 -disk-list 対象ディスク1, 対象ディスク2,・・・

なお、SSDストレージプールという名前の通りですが、上記で指定する「対象ディスク」はSSDのみとなります。
改めてストレージプールの状態を確認し、指定した内容でストレージプールが作成されていることを確認しましよう。

::> storage pool show
Storage
Storage Pool          Type        #Disks     Nodes             Total Size
------------------    ---------   ---------  ---------------   ------------
ストレージプール名       SSD         構成本数     コントローラA,     合計サイズ
                                              コントローラB

より詳細に確認する場合は以下のコマンドが便利です。

::> storage pool show -storage-pool ストレージプール名

また、ユニットの割り当て状況を確認するには以下のコマンドを実行します。

::> storage pool show-available-capacity

以下はストレージプール名を「SP1」として作成した直後の例を示します。
なお、各サイズは設定内容やディスクサイズに応じて変動しますので、あくまでも例として参考にしてください。

Storage    SyncMirror   Allocation   Unit      Total
Node         Storage Pool     Type       Pool         Unit  size   Count     Usable Size
---------   -------------     --------  -----------   -----------  -------   ------------
node-a       SP1              SSD        Pool0        1.31TB       2         2.62TB
node-b       SP1              SSD        Pool0        1.31TB       2         2.62TB

前述の「ユニットという概念」でも触れましたが、ストレージプールを作成すると合計4つのユニットに分割されます。
上記の「Unit Count」が「node-a / node-b」共に「2」となっていることから、ストレージプール「SP1」のユニットは両コントローラに2ユニットずつ割り振られていることが分かります。

また、「Total Usable Size」は未割り当てユニットの合計サイズ、「Allocation Unit size」は1ユニットあたりのユニットサイズとなります。

ただし、「Allocation Unit size = 1.31TB」となっていますがFlash Poolとしてこのサイズのキャッシュを格納できるわけではないということには注意が必要です。
ユニットの割り当て先アグリゲートのRAIDタイプが何なのか(RAID-4? RAID-DP?)などによっても値が変動するということを意識しておきましょう。

ステップ2:データ用アグリゲートのHybridモード有効化

続いて、Flash Poolとして利用したいデータ用アグリゲートを「Hybridモード」と呼ばれるモードに変更していきます。
これは対象のデータ用アグリゲートをFlash Poolとして利用できるようにするための受け入れ態勢を整える作業になります。
作業としては簡単で、以下のコマンドを実行してHybridモードを有効化します。

::> storage aggregate modify -aggregate アグリゲート名 -hybrid-enabled true

次に、上記作業によって対象データ用アグリゲートが問題なくHybridモードに変更されているかを確認していきます。

::> storage aggregate show -aggregate アグリゲート名

項目名「Hybrid Enabled」が「true」になっていれば大丈夫です。

ステップ3:データ用アグリゲートのFlash Poolアグリゲート化

それではいよいよデータ用アグリゲートをFlash Pool構成にしていきます。

::> storage aggregate add -aggregate アグリゲート名 -storage-pool ストレージプール名 -allocation-units 割り当てユニット数

エラーなく上記コマンドが実行できたら、アグリゲートの詳細情報を確認しておきましょう。

::> storage aggregate show -aggregate アグリゲート名

特に確認したい4項目

・Storage Type
・Disks for First Plex
・Hybrid
・RAID Groups

Storage Type

本項目が「hybrid」になっていることを確認します。
これは、指定したアグリゲートがハイブリッドすなわちHDDとSSDの「混合状態」になっていることを指します。

Disks for First Plex

本項目はアグリゲートを構成するディスクが表示されます。
Flash Poolとして問題なく設定されていれば設定前からアグリゲートに所属していたHDDに加えて、本作業の中で指定したSSDも表示されるようになります。

Hybrid

本項目が「true」になっていることを確認します。
先に登場した「Storage Type」が「hybrid」になっていれば、こちらの項目も問題なく「true」になっているかと思います。

RAID Groups

netapp-flashpool4

本項目は設定前のアグリゲート構成によって表示内容が異なるかもしれませんが、Flash Pool設定後には新しいRAIDグループが追加されているかと思います。
Flash Pool設定時に指定したSSD(ユニット)はRAIDグループとしてデータ用アグリゲートに組み込まれるため、このような動作になります。

以下のコマンドではアグリゲートの構成ディスク情報が確認できるので、より分かりやすいと思います。

::> storage aggregate show-status -aggregate アグリゲート名

おわりに

いかがだったでしょうか。

今回はFlash Poolに関する基礎的な内容について書いてみました。
Flash Poolは「パフォーマンス向上」「機器設置面積の削減」などのメリットがありましたね。
ユニットなどの概念は少し複雑な部分ではありますが、Flash Poolの設定自体はシンプルなものだったかと思います。
本記事を通してFlash Poolについて少しでも理解が深まっていれば嬉しいです。

最後までお読みいただきありがとうございました。
ではでは!

-NetApp
-