こんにちは。
クロステック事業部 第三クロステックセンター Ao です。
本記事では、Nutanixのコア技術であるDSF(分散ストレージファブリック)を中心に説明します。
また、Nutanixの特徴でもあるデータローカリティと階層化の考え方についても説明します。
これまでの関連記事もぜひご覧ください!
HCIことはじめ
Nutanixの基礎 Part1~製品の特長とCVMの概要編~
はじめに、Nutanixの中で非常に重要な機能である分散ストレージファブリック(以降DSFとする)について説明させていただきます。
DSFを簡単に言うと、データを複数ノードに分散配置する仕組みになります。
ハイパーバイザから見ると、1つのストレージにしか見えませんが、実態としては各ノードのローカルにデータを配置し、各ノードでストレージI/Oをさばいています。
各ノードでコントロールすることから、”分散ストレージ”という言葉が入っているのだと思います。
まずは、DSFを構成する主要な要素をご紹介します。
Nutanixでは複数ノードでクラスタを構成し、各ノードのディスクを束ねることで大きなストレージを定義します。
この大きなストレージをストレージプールと呼びます。
なお、ストレージプールは複数のノードを跨いで構成することが可能です。
ストレージプールを論理的に分割した領域をストレージコンテナと呼びます。
ストレージコンテナはデータストアとしてESXiなどにマウントすることが可能です。
従って、Nutanix × vSphereを利用する場合、ストレージコンテナをNutanix側で用意し、ESXiから該当領域をマウントしてデータストアとして利用する流れとなります。
vDiskはDSF上に存在する512KB以上のファイルであり、vmdk等を含みます。
vSphereを利用する場合、仮想マシンの実データはvmdkに格納されるので、Nutanix目線でいえばvDiskに仮想マシンの実データが格納されていることになります。
DSFを構成する主要な要素は上記になります。
さらに詳しく知りたい方はvBlockやエクステントというキーワードで調べてみてください。
DSFでは、これらの要素を活用し、各ノードに分散してデータを配置します。
つまり、Nutanixクラスタ全体にわたり、データが分散配置されるイメージです。
下図のように、各データが特定ノードのみではなく、複数ノードにレプリカデータとして分散配置されます。
※レプリカデータは耐障害性を高めるためのものです。耐障害性に関しては今後のブログで執筆予定です。
くどいようですが、DSFのポイントは複数のノードに跨ってデータを分散配置する点です。
次はNutanixの特長の一つであり、仮想マシンのパフォーマンスに大きな影響を与えるデータローカリティについて説明させていただきます。
一言でいうと、仮想マシンのディスク読み込みをローカルのホストに搭載されたディスクから行う仕組みです。
どのような仕組みで上記が行われるか説明する前に、Nutanixにおける仮想マシンの書き込みの仕組みを説明します。
Nutanixの基礎 Part1でも少し触れましたが、仮想マシンのストレージI/Oは全てCVMによって制御されます。
仮想マシンからの書き込みが発生した場合、ローカル(自ノード上)のCVMがストレージI/Oを受け付けます。
その後、ローカルのディスクに書き込むだけでなく、その他のノード上のディスクに対しても書き込みを行います。
これは先に説明したDSFの通り、データを分散配置する設計思想から来ている仕組みと考えられます。
イメージ図は以下になります。
仮想マシン(User VM)からの書き込みは自ノード上のCVMを経由し、ローカルのディスクに書き込まれます。
その他にも、CVM間で情報を共有し、他ノード上にも書き込みが走ります。
上記のように各ノードにデータが分散配置されますが、データの読み込みを行う際は、データローカリティと呼ばれる機能を利用することで、必ず自ノード上のデータにアクセスするようになります。
この動作の何が嬉しいかというと、自ノード上でストレージI/Oが完結するため、ネットワーク越しのReadトラフィックが発生しなくなります。
ネットワーク越しのReadトラフィックが減ることで、余分な通信がネットワーク帯域を消費しなくて済むといったメリットや、ネットワーク越しにデータへアクセスする場合よりも早く読み取りが可能といったメリットがあります。
また、一般的にはVDIを利用する環境でのブートストーム(※)の対策としても有効と考えられます。
(※)始業時など、VDIを一斉起動し、ストレージへのアクセス(主に読み取り)が集中する事象を指す
次はデータ階層化について説明させていただきます。
データ階層化は、データのアクセス頻度などに応じて格納先を決定する仕組み・考え方であり、Nutanixに限らず、ストレージ製品では一般的な機能だと思います。
Nutanixではどのように階層化されているかをご紹介いたします。
Nutanixでは、HDDとSSDの両方を利用するハイブリッド型のノードが存在します。
全てSSDで構成されたオールフラッシュのノードもありますが、本ブログではHDDとSSDが混在するノードでの優先度の考え方を記載します。
以下の順で優先度が設定されています。
- ローカルのSSD
- 他ノードのSSD
- ローカル・他ノードのHDD
仮想マシンからのWrite I/Oが発生した場合、最優先で利用されるディスクはローカルのSSDになります。
また、ローカルのSSDに空きが無くなると、バックグラウンドで他ノードの空いているSSDに対してコールドデータ(アクセス頻度の低いデータ)が移動されます。
なお、クラスタ全体の負荷を均等にするため、クラスタ全体でのディスク使用率も重要になってきます。
クラスタ全体で束ねたSSDの使用率が一定の閾値を超えた場合、Curatorというプロセスがジョブをキックし、SSDからHDDへのデータ移行が発生します。
こうすることで、常にSSDの領域を利用できるようにしています。
次は、さらに細かくSSD内部の階層を見ていきましょう。
SSDの内部は以下の要素で構成されます。
- Nutanix Home
- メタデータ領域
- Oplog
- Extent Store
Nutanix HomeはCVMのコアであり、CVMの動作に必要なファイルが格納されています。
メタデータ領域は名前の通り、メタデータが格納されます。
OplogとExtent StoreはNutanixを知るうえで重要な要素なので、少し細かく説明させていただきます。
OplogはランダムWrite I/Oで利用されるキャッシュ領域であり、全てのSSDに配置されます。
Extent Storeはキャッシュではなく、永続的なストレージ領域になります。
Extent StoreはSSD/HDDの両方に配置されます。
仮想マシンからのランダムWrite I/Oが発生すると、まずはOplogでI/Oを受け、ある程度連続したデータに並び替えたのち、Extent Storeへドレインされます。
なお、シーケンシャルWrite I/Oに関しては、直接Extent Storeへ格納されます。
※シーケンシャルWriteに関しても、データのサイズによってはOplogで受けてからExtent Storeへドレインされる
上記を絵にしてみると以下のような形です。
このように、データのアクセス頻度や種類に応じて格納先を変えることにより高パフォーマンスを実現しています。
今回はNutanixを知るうえで重要なDSF・データローカリティ・データ階層化について説明させていただきました。
その中でポイントになる部分は以下になります。
- データを分散配置する
- データの読み込みはローカルノード内で完結する
- データ格納先の階層化を行うことで高パフォーマンスを実現している
HCI製品は今回説明させていただいたようなデータの扱い方に特徴があるため、HCI製品の比較を行う場合は今回取り上げた内容に着目してみるのもいいかもしれません。
次回は障害時の挙動や管理UIであるPrismいついて執筆させていただく予定です。
最後までお読みいただきありがとうございました!