本記事の原文はもともとNutanix社のStaff Solution Architectで、Nutanix Platform Expert (NPX) #001、
そしてVMware Certified Design Expert (VCDX) #90として活動しているJosh Odger氏によるものです。
原文を参照したい方はNutanix Scalability – Part 3 – Storage Performance for a single Virtual Machineをご確認ください。
情報は原文の投稿時のままの情報ですので、現時点では投稿時の情報と製品とで差異が出ている場合があります。
当社のNutanix社製品についてはこちら。本ブログのNutanix関連記事のまとめページはこちら。
ネットワールドのNutanix関連情報は、ぜひ当社のポータルから取得ください。
(初回はID、パスワードの取得が必要です)
Part 1 からの継続となりますが、Part1では、どの様にストレージオンリーノードを利用してNutanixがストレージをコンピュートとは別に拡張する事ができるかをお話しました。今回はNutanixがどう仮想マシンのストレージのパフォーマンスをスケールアップ出来るのかをお話していきます。
これまでの物理サーバで構築している仮想マシンはストレージコントローラーや複数のドライブ(HDD/SSDなどに関わらず)からのメリットがあります。
Nutanix ADSFの仮想マシンにも同じ事が言えます。多くのストレージコントローラーと多くの仮想ディスクがストレージパフォーマンスを向上することになるのです。
これまでのESXi、Hyper-Vといったハイパーバイザーで最大限のパフォーマンスと低遅延の要求により最大となる4つのSCSIコントローラーをVMへ割り当てを行います。複数のコントローラーは仮想ディスクへの多くのキューの処理が出来ることを示しており、結果より少ないボトルネックの削減による低遅延を可能としているのです。
この複数の仮想SCSIコントローラーはとても素晴らしい事なのでNutanixはこの機能をデフォルトで次世代のハイパーバイザー AHVで利用する事にしました。これは“Turbo Mode“.として良く知られている機能です。
これはAHV上の仮想マシンがストレージコントローラーのレイヤでお客様がすでに持っているストレージコントローラーの構成、複雑性を排除し初期状態で最適化されているのです。
仮想ディスクに関わらずお客様が最適なパフォーマンスを得るために必要な事は4つの準仮想化SCSIコントローラーを使う事です。いくつか例を見ていきましょう。
MS Exchange サーバで20のデータベースを持っており、各データベースのパフォーマンス要求は100IOPSの範囲とすると、一つの仮想ディスクと一つのデータベース、それとログ用に別の仮想ディスクの割り当てが良いでしょう。
LargeタイプのMS SQLサーバに関していえば、数万から数十万にもなるIOPSが一つのデータベースで求められます、このようなケースでは複数の仮想ディスクをこのデータベースに割り当てSplitting SQL datafiles across multiple VMDKsを利用する事がVMのパフォーマンスの最適化となるでしょう。
2つの例ともにいえる事ですが、ESXiやHyper-Vをご利用の場合は、仮想ディスクは4つの準仮想化SCSIコントローラーを通してアクセスできるように構成するべきです。一方でAHVを利用いただいているお客様は単純に仮想ディスクの作成すると、それぞれの仮想ディスクはStargateと呼ばれるNutanixのADSFのI/Oに占有のパスで直接接続できます。
詳細な情報はSQL & Exchange performance in a Virtual Machine も合わせてご覧ください。
ここではハイパーバイザーの仮想ディスクの数、ESXiやHyper-vといったハイパーバイザーに関わらず、複数の準仮想化SCSIアダプターを設定する事が最適なパフォーマンスを得る方法であると学びました。
ではモンスター級のSQLワークロードがあり、ノードとクラスタが正しく構成されており、アクティブなワークロードが100% SSD層にあるかオールフラッシュクラスタについてお話ししましょう。
AHVで稼働している仮想マシンはターボモード(ESXi/Hyper-Vの準仮想化SCSIコントローラー)を利用するし、16の仮想ディスクを追加して、お客様のデータベースはvDiskを越えて追加していくことが出来ますが、もっとパフォーマンスが必要になったら???
良いニュースとしては、Nutanixはパフォーマンスを向上する多くの方法があるので、いくつか見てみましょう。
- CVMのvCPUを向上する
これは稀な場合ですが、NutanixはVMで稼働しているソフトウェアという事を理解する事は大事です。単純にvCPUを増やしCVMへアサインする事がより多くのI/Oパフォーマンスとクラスタ機能のバックグラウンド処理を向上します。
CVMは自動的にCVMのN-2のvCPUがStargate(I/O)に割り当てられます。つまり、多くのvCPUをCVMへ追加する事がI/Oパフォーマの向上につながるのです
アプリケーションのパフォーマンスがローカルCVMにより影響を受けた場合(このケースはかなり稀なケースですが)2つ以上のvCPUをCVMへアサインする事でCVMにはボトルネックを軽減しアフォーマンスを向上する事になります。
実際、私は以前このような状況を見たことがあります。
一つのCVM,複数のCVM,また、クラスタの構成やお客様のクラスタの要求事項の範囲で全てのCVMのvCPUを増やせるのを知ることは大事です。
22コアプロセッサーと10コアプロセッサーの混在環境のクラスタだとするとクリティカルなVMは22コアプロセッサーのノードへ移動しCVM のvCPUを2つ追加し、10コアのvCPUはそのままにして置いてください。
これでパフォーマンスを向上させることが出来ますし、22コアノードの利益を最大限に利用できるのです。
この記事に関してはさらにCost vs Reward for the Nutanix Controller VM (CVM)にも詳細があるのでご参照ください。
- Nutanix CVMのメモリーを増やす
メモリーを増やすのはもう一つの簡単にパフォーマンスを向上する方法です。
メモリーの追加でパフォーマンスを向上する主な2つの利用としてはCVMのメモリーはリードキャッシュを行いますので、アプリケーション、データセットのサイズには依存します。従来のリードキャッシュと全く違うのです。
次の理由としてはCVMのRAMはMedusa(metadata)のキャッシュとして利用されるようになるので、読み込み遅延がすくなくなるのです。
もしhttp://cvm-ip:2009/cache_stats(下にサンプルがあります)を見てキャッシュヒット幅が50%であれば、良いキャッシュヒットと言えます。一方5%程度ならワークサイズによりますが、大幅にリードパフォーマンスを向上するかもしれません。
他のパフォーマンスで大事な要素はMedusaのキャッシュです。
vDisk block map CacheとExtent group id map Cacheを出来るだけ100%に近づけたいと考えています。
上記はワーキングセットのRange Cache 50% , vDisk block map Cache , Extent group id map Cache が100%とCVMメモリーが最適なシステムの例です。
The above cache and medusa hit rates are from a test cluster and it was achieving the following performance for a database checksum task (100% read).
上記のキャッシュとMedusaのヒットはテストクラスタからのもので、データベースのチェックサムタスク(100%Read)の際は次の値を達成しました。
ポイントはとても低いリードのレイテンシであるという事です。
最大でも0.35ms で0.18ms近辺の値が数時間にわたって継続されています。
CVMのメモリーが不十分だと一貫した読み込み遅延とはならないので、この問題に直面したらhttp://cvm-ip:2009/cache_status を確認してサポートにCVM RAMのサイジングについて相談してください。
ノート:CVMメモリーがNUMAノード内で最適な状態で構成されている環境でCVMへメモリーを追加する事は「害」ではありません。唯一のインパクトは仮想マシンに割り当てるメモリーが減る事です。
おさらいしましょう
AHVの仮想マシンはターボモードを利用し16の仮想ディスクでデータベースを仮想ディスクのスパンかして全体でアクセスさせ、CVMのvCPUを追加します。
そして、Readキャッシュが正しくヒットしているかを確認しましょう。しかし、さらに多くのパフォーマンスが必要な場合は何を確認したらいいでしょうか?
- ストレージオンリーノードの追加
もしまだ私投稿した“Scale out performance testing with Nutanix Storage Only Nodes”を読んでいない場合に向けて簡単におさらいしますが、是非こちらのドキュメントも読んでください。
簡単に言うと、MS Exchange jetstress ワークロードを4VMで最適化されている4ノード構成のHybridクラスタで稼働させて達成した値が次の通りです。
- ベースラインテストからの観測
- VM辺り1000IOPSの達成
- パフォーマンスは全てのJetstress インスタンスを通して安定
- ログ書き込みは1ms の範囲
- データベースの読み込みは平均で10ms以下 (Microsoftが推奨している20msよりもよい結果)
- データベース作成時間の平均は2時間24分
- 3つのデータベースの複製は平均で4時間17分
- データベースのチェックサムの取得の平均は38分
その後、4ノードをクラスタへ追加したのですが、Jetstress仮想マシン、クラスタのコンフィグは何もしていませんがIOPSは2倍になったのです!
4つのJetstressの各結果は次の通りです。
ストレージオンリーノードを4ノード追加した概要は次の通りです
- IOPSはおおよそ2倍となる
- ログ書き込みの平均遅延は13%程度低くなる
- データベースの書き込み遅延は20%改善
- データベースの読み込み遅延はおおよそ2倍低くなる
- データベースの作成時間は15分ほど早くなる
- 3つのデータベースの複製は約35分改善
- データベースのチェックサムは40秒ほど早くなる
結果から分かる通り、ストレージオンリーノードの追加で変更を行わないでパフォーマンスが向上する事が解りました。Jetstressの構成を変更していたならば、より高いパフォーマンスとより低い読み込み、書込み遅延が達成できたことでしょう。
言い換えると、ストレージオンリーノードの追加は簡単にパフォーマンスと共にクラスタのresiliency and capacityも向上するのです。
これで、ワークロードに対して高いパフォーマンスを得るためのコンビネーションとしてCVMの最適化とストレージオンリーノードの話しをしました。
もし未だ求められているパフォーマンスを達成できていなきのであれば、Acropolis Volumesでパフォーマンスを向上させられるかもしれません
- Acropolis Volumes
Acropolis Volumes は 2016にアナウンスし、お客様がNutanixがデータセンターの標準化のためのエッジの使用例として発表しましたが、多くの理由からこのビジョンを達成できませんでした。
- 既存のサーバの再利用の要望、要求
- 仮想化でないアプリケーション
- パフォーマンス/外部接続しているサーバの拡張性
- 外部iSCSIを含めたオペレーションへの複雑性
さらに多くの詳細はこちらをご参照ください。
In-guest ISCSI を利用しているNutanix VolumesはゲストOSの仮想ディスクを直接提供します。この仮想ディスクは自動的にNutanixクラスタ内で最適なパフォーマンスが提供できるようにロードバランスされるのです。
次のツイートにはNutanix Volumesを利用した際にどの様に分散されるかのFAQがあります。下のが示す通り、4ノードクラスタでは4つのiSCSIのパスとなりますが、クラスタを8ノードへ拡張するとNutanix Volumesは自動的に8パスに拡張しているのが解ります。
ABSの欠点といえばデータローカリティがなくなる事ですが、もしデータのローカリティを持てなかったとしても、その次に素晴らしいのは高い拡張、レジリエンシー、動的な分散ストレージファブリックを利用できる事です。
Nutanix Volumesは即時パフォーマンスのスケールが出来ますが、制限はネットワークのバンド幅、ノード数になってくるので、100GBのNICと32ノードの物理クラスタでは数百万レベルのIOPSというとんでもないパフォーマンスを提供する事になるでしょう。
このIn-guest iSCSI の設定はとてもシンプルで、単にiSCSIターゲットをNutanixのクラスタIPとして設定するとクラスターサイズが増えた際に自動で計算しロードバランスをすることになります。仮想ディスクは自動的に新しいノード間でお客様の介入なしにバランシングが行われます。
これと同じことがノードの削除、メンテナンス、アップグレード、障害などに関しても言えます。
全て自動的に管理される為、Nutanix Volumesは管理者にとって非常にシンプルな実装といえます。
要約
Nutanixは仮想マシンに素晴らしい拡張性を提供し、より多くのパフォーマンスが求められるニッチなワークロードの為のNutanix Volumesはシングルノードが提供するものよりも多くのパフォーマンスを提供できるのです。
パフォーマンスを向上させる方法として簡単にできるのは次の2つですので是非覚えておきましょう
Writeパフォーマンスを向上させる方法はCVMへvCPUの追加
Readパフォーマンスを向上させる方法はCVMへメモリーの追加
記事担当者 : SI技術本部 カッシー @Nutanix_NTNX