ad1

2019年12月22日日曜日

ストレージ性能設計・検証のすすめ① : vSAN 性能検証時に取得するべき情報

今年、いくつか HCIBench 等を利用したストレージ性能検証の方法を紹介したところ、いろいろと性能設計や検証に関連しての質問、相談がありましたので整理してご紹介しようと思います。

本投稿は vExpert Advent Calendar 2019 の 12/22 分を担当させていただきました。
https://adventar.org/calendars/4289

色々書きたい事を集めていたら膨大な量になって情報探し難くなってしまったので、何個かに記事を分ける事にしました
また、以下の HCIBench に関連した投稿も参考にしていただければ幸いです。

 vSAN 性能検証時に取得する情報

現職 (vSAN 製品担当) になってから「性能が出ない」「挙動がおかしい」など、 vSAN 試験に関しての相談を受ける事が非常に多くなり、そんな時に構成や試験内容、パフォーマンスログについてヒアリングするのですが試験事後で情報が取れないなど問題の切り分けに苦労する事が多数ありました。

本投稿では vSAN 性能試験を行う際に必ず取得していただきたいパフォーマンス情報、構成情報などの取得方法、
どの様な時にどの情報を見て問題(性能限界やボトルネックなど)を切り分ける事が出来るか、以下6つツールを利用するポイントをご紹介します。
  1. vCenter でのパフォーマンス情報取得の有効化と vSphere Client での監視
  2. vSAN Observer ログの取得
  3. vSAN 構成情報 ( vSAN Support Information) の取得
  4. vSAN Performance Monitor でのモニタリング
  5. HCIBench でのモニタリングとログ取得
  6. PowerCLI での vSAN Stats ログの取得
※ 性能検証時のログ取得、障害などの切り分け等する際には①~③は必ず設定、取得してください。これがあるだけで問題解決への道のりが大幅に短縮されます。

① vCenter でのパフォーマンス情報取得(パフォーマンスサービスの有効化)と vSphere Client での監視

検証時に限った事ではありませんが、まずは vSAN パフォーマンスサービスを有効化してください。
この後紹介する vSAN Observer 程ではありませんが、リアルタイムで vSAN クラスタの性能情報を常時モニタリングする事が可能です。
※ 今回は vSphere 6.7u3 環境での画面でご紹介しています。

検証開始前に必ずパフォーマンスサービスの状態を確認してください。

通常はデフォルト設定で行いますが、特定の VM ストレージポリシーと併せて利用する場合は適宜設定してください。
※ 詳細モードなどは通常は利用しません。

また、本項後半の PowerCLI での性能情報のエクスポートにも関連しますが、デフォルト5分間隔で vCenter に保存されるログの間隔、精度は必要に応じて vCenter の設定から「統計情報」を変更してください。
通常は "5分毎1日保存” の箇所を "1分毎1日保存" に変更し、統計レベルを 1 -> 2 にする事でかなり詳細なログが保持されます。
障害切り分けなどでより詳細なログが必要な場合は レベル 3、4 等を選ぶ事もありますが、vCSA のストレージ容量をかなり消費しますのでご注意ください。
詳細は以下公式ドキュメントを参照ください。

vSphere Client での統計収集間隔の設定

vSphere Client 上での vSAN パフォーマンス情報の確認は、
vSAN クラスタ を選択し > 監視 > vSAN > パフォーマンス から確認するざっくりとした仮想マシンとバックエンドのパフォーマンス情報(IOPS/帯域/遅延/輻輳/未処理IO: Outstanding IO)などの他、


vSAN クラスタ を選択し > 監視 > vSAN > サポート > サポートのパフォーマンス から確認する詳細な情報があります。
こちらは vSAN Observer までの詳細情報ではないですが、個々のホスト毎の細かい状態が確認出来ます。

また、各ホストの 監視 > vSAN > パフォーマンス を選択する事でホスト毎の詳細をチェックする事も可能です。
Write バッファの状況や Cache ヒット率なども確認できます。

しかし、これらグラフ情報はリアルタイムで見る事が基本なので、事後の分析をしたい場合は次の vSAN Observer が重要となります。

② vSAN Observer ログの取得

性能試験で過大な負荷を掛けた場合や、性能試験と併せて障害動作を検証した場合などに IO 性能の低下(バッファ溢れや輻輳など)が発生した際に、
vSAN Observer ログを取得しておけば事後であっても検証時にどのような問題がどこで発生したのかを詳しく分析する事が出来ます。


vSAN 6.6 以降では ① でご紹介したパフォーマンスサービスがざっくりとした情報を vSphere Client 上で表示したり、vSAN 6.7u3 以降では vSphere Client 内で確認できるパフォーマンス情報がかなり詳細化しましたが、基本的にリアルタイムで見るための UI なので、検証事後の詳細分析をする場合などは vSAN Observer で --generate-html-bundle オプションを利用してログを保存しておいてください。

vSAN Observer は vCSA に root ログイン後、shell を起動、rvc で vCSA 自身にログインして利用します。
"/localhost/Datacenter/computers/vSANCluster/" の部分は対象のクラスタ名を入力しますが、Tab 補完で入力されますので全てを手打ちする必要はないです。

vsan.observer /localhost/Datacenter/computers/vSANCluster/  --force --generate-html-bundle /tmp --interval 20 --max-runtime 1

※ 上記では HTML バンドルを /tmp に生成して、20 秒間隔で 1時間のログ取得を設定しています。

例)
VMware vCenter Server Appliance 6.7.0.40000
Type: vCenter Server with an embedded Platform Services Controller
Connected to service
    * List APIs: "help api list"
    * List Plugins: "help pi list"
    * Launch BASH: "shell"
Command> shell
Shell access is granted to root
root@vcsa [ ~ ]# rvc "administrator@vsphere.local"@localhost
password: *********
0 /
1 localhost/
> cd localhost/Datacenter/
/localhost/Datacenter> vsan.observer ~/computers/vSAN-Cluster/  --force --generate-html-bundle /tmp --interval 20 --max-runtime 1
Couldn't load gnuplot lib
Press + to stop observing at any point ...
2019-12-xx 11:39:20 +0000: Collect one inventory snapshot
Query VM properties: 0.27 sec (43 VMs)
Query Stats on esxi04.vsphere.local: 3.39+0.33 sec (on ESX: 0.21, json size: 2597KB)
Query Stats on esxi02.vsphere.local: 3.51+0.38 sec (on ESX: 0.17, json size: 2602KB)
Query Stats on esxi03.vsphere.local: 3.61+0.41 sec (on ESX: 0.20, json size: 2583KB)
Query Stats on esxi01.vsphere.local: 4.18+0.26 sec (on ESX: 0.18, json size: 2566KB)
Query CMMDS from esxi01.vsphere.local: 0.34 sec (json size: 57KB) 

~~ 省略 ~~

2019-12-xx 12:39:50 +0000: Generating Memory per-host HTML tabs ... 
2019-12-xx 12:39:50 +0000: CBRC wasn't enabled, skipping ...
2019-12-xx 12:39:50 +0000: Generating HTML (fill in template)
2019-12-xx 12:39:50 +0000: HTML length: 287029
2019-12-xx 12:40:03 +0000: Done writing HTML bundle to /tmp/vsan-observer-2019-12-22.12-39-20.tar.gz
/localhost/Datacenter> 
ここで最後に出力されたファイル名が表示されていますので SCP などでデータをダウンロードして分析に利用します。

tar.gz ファイルを解凍し、stats.html をブラウザで開くと検証時のパフォーマンスの詳細情報を閲覧することが可能です。
※ vSAN Observer のグラフが表示されない、という問題に出くわした際は以下の手順をお試しください。

以下は一例ですが、Overview の他、

各ホスト毎の vSAN ディスクの状況確認や、

より詳細に各 vSAN ディスクの状態を確認したり、

その他途中を省略しますが、CPU、メモリ、VMその他、ネットワークなど vSAN に関連するコンポーネントの状態を詳細にチェックする事が可能です。

以下のキャプチャの例では一部のホストのネットワークにエラーが起きている様です。

思った通りの性能が出ない時、vSAN Observer が取得されていれば何が原因で性能が発揮できないのか詳細に確認可能ですので必ず取得する様にしてください。

経験上、何等か性能問題が発生した際は、ネットワークやドライブのエラーや輻輳、同時処理要求の多さ(Queue Depth を上回る Outstanding IO など)のような物理レイヤに問題が潜んでいる事が多々ありました。
vSAN Observer  はそういった物理コンポーネントの問題を可視化して調査する事が出来る強力なツールです。

③ vSAN 構成情報 ( vSAN Support Information) の取得

vSAN Observer の情報と併せて必ず取得しておいて欲しいのが検証実施時の構成情報(vSAN Support Information : 健全性チェックログ) です。
vSphere Client で閲覧できる vSAN Health に関連する情報をテキストで一気に吐き出すことが出来、rvc にログインして出力する他、vCSA に root ログインして以下のスクリプトを実行するだけで一発で出力する事が出来ます。


root@vcsa [ ~ ]# python /usr/lib/vmware-vpx/vsan-health/vsan-vc-health-status.py
これ一発流すだけで、ESXi ホストの構成、仮想マシンデータの配置、各ディスクグループ毎のオブジェクトの状態、再同期中のステータス、諸々のコンポーネントバージョン、構成情報が一気に出力されますので、
Teraterm 等を利用している場合はログキャプチャを開始した後に実施するか、画面バッファを多めに設定して出力されたテキストを全てコピーペーストしてテキストファイルに保存するのが一般的な利用方法です。

また、vCSA ではなく ESXi にログインして個々のノードで取得する事も可能です。
何等か vCSA が障害でアクセスできない時などに各ノードのデータの健全性を確認する際には以下を実行します。
[root@esxi01:~] python /usr/lib/vmware/vsan/bin/vsan-health-status.pyc
 vSAN Support Information のログさえあれば、構成図がなくても大体の vSAN クラスタの構成、設計が分かりますので障害時の切り分けにも重宝します。
作業や検証時には必ず取得する様にしていただけると幸いです。

④ vSAN Performance Monitor でのモニタリング

vSAN Observer はリアルタイムで監視する際も vCenter にログインしてサービスを起動する必要がありますが、Flings で公開されている vSAN Performance Monitor <https://flings.vmware.com/vsan-performance-monitor>は PhotonOS とその上の Container で vSAN の詳細性能をリアルタイムモニタリングするためのサービスを提供します。

仮想アプライアンスとしての完成度はまだそれほど高くなく、起動時に仮想マシンハードウェアバージョンを更新する必要がある場合があったり、
IP アドレスは PhotonON にコンソールログインして手動で設定しなければならないなど、少し面倒なところもありますが、一度設定した後は vSAN Observer をよりグラフィカルにした UI で性能監視が可能です。

モニターできる性能情報は非常に多岐にわたります。

ダッシュボードは以下の様な感じです。

HCIBench 2.3.x 以降では vSAN Performance Monitor の機能そのものが HCIBench に取り込まれたので、HCIBench を利用して性能検証する際にはあえてデプロイする必要はなくなりました。

⑤ HCIBench でのモニタリングとログ取得

過去何回かご紹介した HCIBench <https://flings.vmware.com/hcibench>。

HCIBench で試験は vSAN に限らず vSphere 環境でデータストアとして ESXi がマウントしている環境であれば同じ負荷試験を実施できるので製品間、環境間で同一条件の比較ができるのでとても便利です。

2019年12月時点では Ver 2.3.1 となり、今年の初夏に投稿したバージョンからさらに進化して、④ でご紹介した vSAN Performance Monitor の機能も組み込まれたので、
HCIBench の試験を実施しながら vSAN Performance Monitor も自動で構成されるようになりました。

私が考える HCIBench のメリットは以下が大きいと考えます。
  1.  VDBench などのコンフィグを好みの試験パターンで自作出来て使いまわしができる(以前の記事参照)
  2. vSAN 以外にも、FC-SAN・iSCSI-SAN・NFS・その他HCI のデータストアも ESXi がデータストアとしてマウントしていれば同じ負荷を掛けられる
  3. v2.x 以降では試験結果が Excel でまとめてくれるのでレポート作成が容易
  4. vSAN 環境で試験をした場合は HCIBench VM 内に vSAN Observer を取得してくれる
  5. Grafana を利用したベンチマークのモニタリングの他、v2.3.x 以降では vSAN Performance Monitor の機能が実装されてリアルタイムでの監視がしやすくなった
とにかく複数パターンを組み合わせての長時間かかる性能試験が大幅に楽になりました。

HCIBench 2.3.x からはベンチマーク実行中に vSAN Performance Monitor も開ける様になりました。

以下は HCIBench 2.0 から実装された Grafana の Performance View

こちらは HCIBench 2.3.x から実装された vSAN Performance Monitor のUI。本家の vSAN Performance Monitor と全く同じ(たぶん)

二つ組み合わせる事で非常に使いやすくなったと思いますし、イベントなどの動態デモ展示に映える UI を並べる事が出来ます。

⑥ PowerCLI での vSAN Stat ログの取得

確か PowerCLI 6.5 辺りで実装された vSAN Stat (Get-VsanStat) の機能も 2019年12月時点の PowerCLI 11.5 ではかなり進化、使いやすくなっています。
PowerCLI であらかじめスクリプトファイルや 1Line スクリプトにしておく事で検証時にサクッと vCenter から vSAN 性能情報を CSV に吐き出させておく事が出来ます。

※ vSAN Stat (Get-VsanStat) で吐き出されるパフォーマンスログ情報は vCenter の統計情報の設定により丸められる時間が設定されます。
デフォルトは 5分 / 1日 : レベル1 となっているので、試験時に取得する情報の詳細度に合わせて 5分 -> 1分、レベル1 -> レベル2 などと設定を変更する事をお勧めします。
vCSA の容量を消費するので試験が終わったら設定は元に戻すようにしてください。

Get-VsanStat の詳細はヘルプを見て頂ければ記載がありますが、
-Name
        Cluster: Backend, VMConsumption
        VMHost: Backend, VMConsumption, HostNetwork, HostIscsi
        VirtualMachine: Performance
        HardDisk: VirtualDisk, Vscsi
        VsanDisk: Performance
        VsanDiskGroup: Performance
        VsanIscsiTarget: Performance
        VsanIscsiLun: Performance
-Entity
        Cluster
        VMHost
        VirtualMachine
        VsanIscsiTarget

などのタイプがあります。

絞り込まずまるっと取っておく場合はワイルドカード(*)も利用できますので、
私は以下の様な 1Line にまとめて置き、試験実施した後に1時間分、または1日分のログを取得しています。

# vSAN クラスタに関する性能情報
PS C:\> $cluster = Get-Cluster
PS C:\> Get-VsanStat -Entity $cluster -name *  -PredefinedTimeRange Last24Hours | Export-Csv -Path ./Get-VsanStat_Cluster_Log.csv -Encoding UTF8

# vSAN ノードに関する性能情報
PS C:\> $vmhost = Get-VMHost -Location $cluster
PS C:\> Get-VsanStat -Entity $vmhost -name *  -PredefinedTimeRange Last24Hours | Export-Csv -Path ./Get-VsanStat_VMHost_Log.csv -Encoding UTF8

# vSAN ディスクグループに関する性能情報
PS C:\> $vSANDG = Get-VsanDiskGroup
PS C:\> Get-VsanStat -Entity $vSANDG -name *  -PredefinedTimeRange Last24Hours | Export-Csv -Path ./Get-VsanStat_vSANDG_Log.csv -Encoding UTF8

エクスポートしたCSVファイルは取り方によっては数百万行になってしまい、Excel で編集しようにも大変な場合もありますのでその際はメトリックを絞り込んでください。
Excel に取り込んだ後はピボットグラフ化してスライサーをつけたテンプレート化する事で汎用的に利用可能なグラフシートとして活用可能です。

まとめ

以上、長文で並べましたが vSAN 性能検証する際には以上 6 つのポイントで、上から順にチェックしていただければ情報の取りこぼしなく、何か問題があった場合の解析も容易になりますのでお試しいただければ幸いです。

過去30日でアクセスの多い投稿