【Part.1】Advanced Troubleshooting of VMware ESXi Server 6.x for vSphere Gurus
Table of contents
はじめに
以前開催された VMworld 2017 のセッションが VMworld の公式 YouTube チャンネルで一般公開されています。
こちらの SER2965BU のセッションは ESXi のトラブルシューティングで使うツールとユースケースを解説している非常に貴重な資料です。しかし、ただでさえトラブルシューティングの話でそこそこハードルが高いことに加えて英語のセッションのため、可能な範囲で日本語で補足もしつつ見ていきたいと思います。
本記事シリーズについて
SER2965BU のセッション動画は vSphere の管理者が ESXi の障害に直面した時に自力でトラブルシューティングをするためのステップが解説されています。本記事シリーズではセッションの Objectives (動画の 1:57~) に沿って見ていきたいと思います。
- ESXi のアーキテクチャ概要をコンポーネントに深堀りして理解する
- トラブルシューティング七つ道具 3セットについて見ていく
- ログファイル:いつ、どのログファイルを見るか
- ESXi のコマンド:問題の切り分けと対処を行うために
- 構成ファイル:トラブルシューティングの中でとっても重要
今回はまず最初に準備編として ESXi のアーキテクチャの概要を押さえていきます。動画では 3:08 ~ 4:30 くらいでサラッと流されているので少しだけ踏み込みたいと思います。ESXi の構造を頭に入れておくだけでも、ホストのトラブルシューティング時にイメージがしやすくなるかなと思います。
なお、原初の ESXi のアーキテクチャは以下のホワイトペーパーで公開されています。現在の ESXi とは異なる部分もありますが、基本的なコンセプトの理解にはとても役立つと思います(これも英語ですが・・・)。
The Architecture of VMware ESXi
ESXi のアーキテクチャ概観
まず ESXi の各種コンポーネントおよび関連コンポーネント (vCenter Server やクライアント、ゲストOS) がどのようにコミュニケーションするか、セッションの 3:08~ のダイアグラムを以下に引用します。
ESXi を構成するコンポーネントを大まかに分類すると以下の3種類があります。
- VMkernel
- Userworld
- Virtual Machine Monitor
ESXi も Windows や Linux などの OS と同じくカーネルとユーザープロセス(のようなもの)が存在します。前者は VMkernel、後者は Userworld と呼ばれます。主な Userworld には hostd, vpxa, fdm などがあります。後ほど個別に説明します。
仮想マシンの実体は仮想マシンモニタ (Virtual Machine Monitor, VMM) として VMkernel の管理下で実行されます。Intel VT-x (または Binary Translation) を使用して CPU を仮想化、Intel EPT (または Shadow Paging) を使用してメモリを仮想化、ゲストOSはその上で動作しています1。一般的な仮想マシンモニタの動作などはここでは説明しませんが、以下のような資料をご参考としてください。
なお KB1001101 に記載がありますが、コマンドの実行結果やログなどでは、仮想マシンモニタやカーネルスレッドなどを World という抽象化された管理単位で呼んだり、関連する World の集合を Cartel と呼ぶ場合もあります。KB1010993 に記載がある ps コマンド(ESXi 固有のもの)を実行すると World 番号や World のタイプなどが確認できます。
- Mapping a virtual machine world number to a virtual machine name (1001101)
- Obtaining process information in ESXi (1010993)
VMkernel とは?
VMkernel は ESXi のカーネルです。まず、仮想マシンに CPU やメモリなどのリソースを割り当てるリソーススケジューラの役割を持っています。例えばリソースのシェアや予約、物理 CPU の NUMA トポロジなどに基づいて仮想マシンが適切な CPU コアで実行されるようスケジューリングします。
また、仮想マシンからのネットワーク I/O やディスク I/O は VMkernel を経由して実行されます。ネットワーク I/O であれば各種ネットワークポリシーの適用や TCP/IP のオフロードが行われたり、ストレージ I/O であれば適切なパスを選んで I/O を送出したりなど、様々な処理が VMkernel で行われます。NIC や HBA 等のデバイスドライバは VMkernel のモジュールとしてロードされます。
これらの詳細に関しては、以下のような資料が参考になると思います。
- VMware vSphere 6.5 Host Resources Deep Dive (Free Ebook) (Kindle)
- Understanding the ESXi Network IOChain - VMware vSphere Blog
- VMware ESXi Storage I/O Path (日本語訳 (ネットワールド様) )
- Performance Best Practices Guide for vSphere 7.0
その他には一般的な OS のユーザープロセスとカーネルの関係と同じように、Userworld から発行されたシステムコール2を受けて、ファイルやデバイスの読み書きなどの処理を実行する場合もあります。ただし汎用的な実行環境ではないため、ハイパーバイザー環境に必要な最小限の機能だけが提供されています(API は非公開)。
代表的な Userworld
ESXi の中で最も重要な Userworld は以下の3つです。個人的には、この3つの Userworld の役割を押さえることが本格的なトラブルシューティングへの入り口になるかなと思っています。
- hostd
- vpxa
- fdm
以下、それぞれの概要について説明していきます。
hostd とは?
hostd (Host Daemon) は、vpxa や fdm といった他の Userworld や ESXi に直接接続する外部のコンポーネント (Host Client や C# Client、vSphere CLI 等) からの操作や要求を受け付け、VMkernel や仮想マシンとコミュニケーションを取ります。
例えば、仮想マシンのパワーオンやスナップショットの作成、vMotion やコールド移行といった ESXi のタスクは、まず最初に hostd が受け付けます。その後、必要に応じて VMkernel や仮想マシンとコミュニケーションを取ります。
ESXi の主要な Userworld の多くは hostd に依存関係があるため、hostd が停止するとほぼ何もできなくなります。停止した hostd が再起動できない状況では結果的に ESXi の再起動が必要になることが多いです。このため、非常に重要な Userworld です。
- Troubleshooting an ESXi host in a “not responding” state (1003409)
- Restarting the Management agents in ESXi (1003490)
vpxa とは?
vpxa (VPX Agent) は主に vCenter Server (vpxd) からの指示を hostd に渡す、ESXi と vCenter Server の仲介役を担っています。vCenter Server と ESXi の仲介役のためスタンドアロン ESXi では基本的に使用されない Userworld です(起動はしている)。
vCenter Server に接続して ESXi の操作を行う場合、vCenter Server からの指示はすべて vpxa が仲介し、hostd によって解釈・実行されます。vpxa が停止した場合、ESXi は応答なしとなり vCenter Server からの操作が行なえません。ただ、ESXi への直接接続は hostd への接続になるため可能な場合も稀にあります。
ESXi にログインする場合は ESXi の root ユーザーなどを使用しますが、vpxd - vpxa 間の通信には vpxuser という管理者権限を持った特別な ESXi ユーザーが使用されます。vpxuser は vCenter Server にホストを追加した時に ESXi 上に作成され、以後、既定では30日ごとに vCenter Server が vpxuser のパスワードを更新します。
fdm とは?
FDM (Fault Domain Manager) は vSphere HA の機能を司るエージェントです。ESXi のインストール直後は存在せず、vCenter Server から vSphere HA を有効化すると、vSphere HA の設定と合わせてクラスタの各 ESXi にプッシュおよびインストールされます。
vSphere HA では ESXi が管理ネットワーク上で相互に通信を行ってマスターホスト3を選出したり、マスターホストが他のホストの状態を監視したりします。保護されている仮想マシンの電源状態のチェックや vSphere HA のホスト障害の種類 (停止・隔離・パーティション) の判別などもマスターホストが実施します。これらの動作は実際には ESXi 上の FDM が担当しています。
このため、vSphere HA の構成や設定変更は vCenter Server から実施する必要がありますが、構成した後は vCenter Server とは独立しクラスタ配下の ESXi のみで vSphere HA が動作するようになります4。
なお、今ではもう化石になりつつありますが、vSphere 4.1 以前の VMware HA (vSphere HA の前身) では AAM (Automated Availability Manager) という全く別のエージェントが使用されていました。VMware HA と vSphere HA では動作も仕様も異なっています。
Comparing VMware HA 4.x and vSphere HA 5.x (2004401)
その他の Userworld の一例
特筆すべき重要な Userworld は上述の hostd, vpxa, fdm ですが、他にも多くの Userworld が存在します。以下に一例を記載します。
- vobd (VMkernel Observation Daemon):VMkernel での特徴的なイベントをモニタリングする
- sfcbd (Small Footprint CIM Broker Daemon):ホストのハードウェア健全性情報を提供する CIM エージェント
- shell:ESXi Shell
- dcui:ダイレクトコンソール (DCUI)
- ntpd:NTP クライアント
- esxcli:ESXi の様々な操作を行うトラブルシューティング用のコマンド。hostd を経由して VMkernel にアクセスする
- localcli:esxcli と似ているが hostd を経由しない、hostd 停止時などに使用する基本的には非常用のコマンド
- vmx (Virtual Machine Executable):仮想マシンの性能に関連しない I/O などを担当するヘルパープロセス5
- mks (Mouse Keyboard Screen):仮想マシンのマウス・キーボード・画面の入出力を担当するヘルパープロセス
To be continued…
今回は準備編として ESXi のアーキテクチャの概観を見ていきました。次回は ESXi の各種ログファイルを見ていきます。
-
Binary Translation は ESXi 6.7 で廃止されました。これに伴い ESXi 6.7 以降では仮想マシンから CPU/MMU 仮想化の設定が無くなっています。MMU 仮想化設定も無くなっているところを見ると実質的には EPT も必須といったところでしょうか。 ↩︎
-
地味ですが ESXi Shell に strace コマンドがあったりもします。ただ、中の人の記事はありますが VMware Docs や KB など公式な公開情報は見当たりませんでした。 ↩︎
-
VMware Docs の英語版では現在 Primary Host / Secondary Host の表記になっています。もしかしたら日本語版もそのうち追従して更新されるかもしれません。 ↩︎
-
vSphere 7 では、ホスト障害時のフェイルオーバーで vSphere HA と DRS が連携する改良が加えられています。vCenter Server が停止していてもフェイルオーバーは行われますが、vCenter Server が起動していれば DRS により配置が最適化されます。詳細な動作は中の人のブログ記事をご参照ください (私も記事を読んで概要などツイートしてます)。 ↩︎
-
例えば、KB1019471にあるようなスナップショット操作の指示を受けるための通信や、こちらの記事にある vMotion でのスイッチオーバー時のソースVMの停止などがあります。詳細な公開情報はないので、個人的には VMM/VMX/MKS 等を一つにまとめて「仮想マシン」として見ておけば十分かなと思います。 ↩︎