こんにちは、キクです。
僕は業務上NetAppに触れる機会が比較的多いこともあり、何度かONTAPクラスタの構築にも携わらせていただきました。
そんな中で、環境によっては「Flash Pool」というものを取り入れることもありました。
ただ、先日そのFlash Poolに関するトラブルにも遭遇しました。
そちらを題材に記事を書きたいところですが、本ブログではFlash Poolに触れたことがなかったので、まずは前段としてFlash Poolの基礎的な内容を残しておきたいなと思いました。
というわけで、今回は『Flash Poolに関する基礎的な内容』をテーマに書いていきたいと思います!
本記事の内容
それでは、よろしくお願いします。
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に保存されます。
機器設置面積の削減
Flash Poolはキャッシュ利用によるパフォーマンス向上も魅力の1つですが、機器コストや機器設置面積の削減にも貢献してくれる面も持ちます。
求められる性能要件を満たすためにHDDを必要以上に搭載するというケースもあるかと思います。
その「性能要件」の部分をFlash Poolで賄うことができればHDDの搭載本数を減らすことも可能です。それは結果として「コストの削減」や「接地面積の削減」に繋がることになりますよね。
ユニットという概念
少しややこしい話になりますが、Flash Poolの「ユニット」という概念についても触れておこうと思います。
Flash Poolとして利用するSSDは、まず「ストレージプール」という形でまとめます。
ただ、このSSDストレージプールをそのままFlash Poolに組み込むわけではありません。
ストレージプールを作成すると自動的に「ユニット」という形で4分割されます。
この分割(パーティショニング)された1つ1つのユニットをデータ用のアグリゲートに割り当てることでFlash Poolが完成します。
なお、この4分割されたユニットはデフォルトでは各コントローラに2つずつ割り振られます。
つまりコントローラAがオーナー(管理者)のユニットが2つ、コントローラBがオーナーのユニットが2つということになります。
Flash Poolの設定方法
それでは「Flash Poolの設定方法」について書いていきたいと思います。
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 アグリゲート名
Storage Type
本項目が「hybrid」になっていることを確認します。
これは、指定したアグリゲートがハイブリッドすなわちHDDとSSDの「混合状態」になっていることを指します。
Disks for First Plex
本項目はアグリゲートを構成するディスクが表示されます。
Flash Poolとして問題なく設定されていれば設定前からアグリゲートに所属していたHDDに加えて、本作業の中で指定したSSDも表示されるようになります。
Hybrid
本項目が「true」になっていることを確認します。
先に登場した「Storage Type」が「hybrid」になっていれば、こちらの項目も問題なく「true」になっているかと思います。
RAID Groups
本項目は設定前のアグリゲート構成によって表示内容が異なるかもしれませんが、Flash Pool設定後には新しいRAIDグループが追加されているかと思います。
Flash Pool設定時に指定したSSD(ユニット)はRAIDグループとしてデータ用アグリゲートに組み込まれるため、このような動作になります。
以下のコマンドではアグリゲートの構成ディスク情報が確認できるので、より分かりやすいと思います。
::> storage aggregate show-status -aggregate アグリゲート名
おわりに
いかがだったでしょうか。
今回はFlash Poolに関する基礎的な内容について書いてみました。
Flash Poolは「パフォーマンス向上」「機器設置面積の削減」などのメリットがありましたね。
ユニットなどの概念は少し複雑な部分ではありますが、Flash Poolの設定自体はシンプルなものだったかと思います。
本記事を通してFlash Poolについて少しでも理解が深まっていれば嬉しいです。
最後までお読みいただきありがとうございました。
ではでは!