VMware

Unofficial Tech Memo - Koji Komatsu

December 2008

Previous Next
0

VMware ConverterでP2VしたWindows仮想マシンで、ネットワーク接続に物理環境と同じIPアドレスを割り当てようとすると、「このネットワークアダプタ用に入力されたIPアドレスは別のアダプタに既に割り当てられています。」というようなエラーメッセージが表示される場合がある。
ここで指摘されるネットワークアダプタは物理環境で認識していたもので、Windowsのプラグアンドプレイ機能によってP2V後の最初の起動の際にクリーンアップされるべきものだ。ところが、デバイスマネージャには表示されないものの、レジストリ上にゴミとして残ってしまいIPアドレスの競合を引き起こしてしまうことがある。

MSの下記KBがこの事象の詳細と対処方法を解説している。
http://support.microsoft.com/kb/269155/ja

0 Comments 0 References Permalink
1

VCのIPアドレスを変更すると、管理下のESXは全て「応答なし(not responding)」になる。

VCとESXの接続状態の確認は、VCからのポーリングではなく、ESXから定期的(60秒毎?)に生きていることを通知するしくみになっている(VCはこの通信をudp/902で待ち受けている)。VCのIPアドレスが変更されてもESXには変更が通知されないため、ESXはこの設定ファイルに記録された古いIPアドレスに通知を送り続ける。VCはこの通知を受け取れず「応答なし」とみなしてしまうことになる。

このような状況になった場合、もっとも容易に復旧する方法は、
1.VI Clientのインベントリ画面でデータセンタを選択し、「ホスト」タブを開く
2.ShiftやControlボタンを使ってESXを複数選択する
3.右クリックし、まとめて「切断」する
4.ESXの切断が終わったら、同様に右クリックし、まとめて「接続」する

再度接続しなおすことで、ESXは新しいVCのIPアドレスを認識することになる。
切断中はVMware DRSといった機能は動作しないが、仮想マシンの動作そのものには一切影響しない。

VI Clientで複数選択ができないバージョンの場合、下記のスクリプトを使用することでESXを1台ごと切断・接続する手間を省くことができる。

VI Perl Toolkit Script to Reconnect Non-Responding Hosts
http://kb.vmware.com/kb/1003343

なお、ESXは自身を管理しているVCのIPアドレスを下記のファイルに記録している。
/etc/opt/vmware/vpxa/vpxa.cfg (VC2.5系)
/etc/vmware/vpxa.cfg (VC2.0系)

1 Comments Permalink
0

New-VMは、仮想マシンの新規作成だけでなく、-Templateオプションを使用してテンプレートからのデプロイを行うこともできる重要なコマンドレットだ。テンプレートからのデプロイ時には、OSCustomizationSpecを併用することで、カスタマイゼーションも実現できる。
ただ、VI ClientではできるのにNew-VMコマンドレットではできない操作が2つある。
・テンプレートではなく仮想マシンをクローンする
・カスタマイゼーションでIPアドレスを指定する

PMであるShanklinの書いた下記FAQに、"How can I change a VM's IP address?"というタイトルで、両方の制限をVI APIネイティブに解決する方法が紹介されている。

Managing VMware with PowerShell FAQ

VirtualMachineのCloneVM_Taskメソッドを使用する方法で、VMware.Vim.VirtualMachineCloneSpecを直接作成するという流れだ。少し行数は多いが一見難しくなさそうに見える。
ところが、実際には書かれているサンプルスクリプトはVirtualMachineCloneSpecの中の一部の必須プロパティの指定を省略してあるようだ。リファレンスガイドの下記を見ればわかるのだがこれは結構根気が必要。

VirtualMachineCloneSpec
http://www.vmware.com/support/developer/vc-sdk/visdk25pubs/ReferenceGuide/vim.vm.CloneSpec.html

実現されたい方は、下記をたどると省略されていない形のサンプルを紹介しているユーザがいる。

set-oscustomizationspec and IP address

0 Comments Permalink
0

IPマルチキャストとESX

Posted by kkomatsu Dec 24, 2008

IPマルチキャストについてはのTechnical Paperがリリースされた。

Using IP Multicast with VMware ESX 3.5
http://www.vmware.com/resources/techresources/1082

骨子をまとめてしまうと以下の3つ。

  • ESX3.5 Update2以降では、VMotionやNICチーミングのフェールオーバが発生してもマルチキャストの受信がすぐに再開される (ユニキャストのSwitch Nortificationに相当する機能として、IGMP Membership Fake Queryが実装されている)
  • デフォルトではIGMP v3のQueryを投げるが、IGMP v2で動作しているゲストOSはこれに対してIGMP Reportを応答しない。v3で動作しているゲストOSはv2のQueryにも応答するため、ゲストOSでv2を使っているものが存在している場合やバージョンが不明な場合は、ESXの詳細設定(Advanced Settings)で、Net.IGMPVersionを2とするのが安全。
  • ESX3.5 Update1以前のリリースでは、マルチキャストルータのIGMP Queryの間隔(多くはデフォルト60秒)を小さく設定することで、VMotion時等のマルチキャスト受信の中断時間を小さくすることができる。
なお、NICチーミングの負荷分散アルゴリズムでIPハッシュを使用している場合には、バージョンや構成によらずNICフェールオーバ時のマルチキャスト受信の中断はおきない。

0 Comments 0 References Permalink
0

VI PowerShellのサンプルとしてよく見かける下記の記述では、どうやらCold Migrationしかできないようだ。VMotionしようとすると、inner errorと言われしまう。結構はまり所かも。

Move-VM -VM (Get-VM "vm-name") -Destination (Get-VMHost "host-name")

ホストの変わりにリソースプールを指定すれば成功するのだが、リソースプールではなくてESX直下にVMotionしたい場合、回りくどく下記のように書く必要がある。

Move-VM -VM (Get-VM "vm-name") -Destination (Get-Resourcepool -Name リソース -Location (Get-VMHost "host-name"))

途中、Get-Resourcepool で指定している「リソース」という名前は、ESXに自動的に生成された見えないルートリソースプールの名前。英語版の場合には「リソース」ではなく「Resource」となるのかな?(未確認)

なお、クラスタ内の場合、DRSの有無にかぎらずESXのルートリソースプールはクラスタのルートリソースプールになっているのか、コレで指定してもESXを移動しない。(エラーは発生せず、成功したように見えるが。)

これらの点について、VI PowerShellのヘルプでは下記のように注意書きされている。

Moving a virtual machine in a cluster is only possible if the virtual machine is in a resource pool in that cluster.

実際の挙動を確認した限りは下記が正解に近いのではないだろうか。

クラスタの有無にかかわらず、VMotionの移行先にはリソースプールだけが指定できます。また、クラスタ内では(たとえESXのルートリソースプールを指定したとしても)ESX間の移行はできません。

なお、確認はESX3.0.3 / VC 2.0.3および、ESX 3.5 Update1 / ESXi 3.5 Update1 / VC 2.5 Update1で実施した。

2009年10月29日追記

VI PowerShell のメジャーバージョンアップである vSphere PowerCLI 4.0とvCenter 4.0の組み合わせでは、下記でのVMotionに成功した。
ESXは4.0でも3.5 Update4でも可能だった。残念ながら、vSphere PowerCLI 4.0でも、vCenter 2.5に対しては使用できなかった。

Move-VM -VM (Get-VM "vm-name") -Destination (Get-VMHost "host-name")

なお、この制限はVI API / vSphere APIそのものにあるわけではない。.Net上に実装され、VI PowerShellのバックグラウンドで透過的に動いているSDK for .Netを使用すると、バージョンに関係なくVMotionが可能である。こちらについては下記の記事にまとめた。
vSphere PowerCLIとvSphere SDK for .Netの関係

0 Comments Permalink
3

VMware ESXの大きな特徴の1つに、標準機能で柔軟なNICチーミングが実現できることがあげられる。

NICチーミングと言えば、冗長性の確保と負荷分散による帯域の有効活用の2つの目的があるが、自動での負荷分散については3つのアルゴリズムを選択できる。このアルゴリズムの選択と物理スイッチ側のLink Aggregationの設定には関連性がある。具体的には、IPハッシュベースの場合は物理スイッチ側でLink Aggregationが必須であり、MACハッシュベースおよびポートIDベースの場合にはLink Aggregation禁止となっている。特に後者は「禁止」という点が重要だ。(http://kb.vmware.com/kb/1001938)

禁止の理由は「リバースチーミング(Reverse Teaming)」と呼ばれる実装。これはポートIDベースやMACハッシュベースの場合にはLink Aggregationされていないことを前提に、マルチキャストとブロードキャストがチーミングされた複数のNICから重複して仮想マシンに到達することを防ぐために、仮想マシンが送信に使用している物理NIC以外からのパケットをドロップするという機能。これは物理ネットワークにおけるReverse Path Forwardingと呼ばれるマルチキャストの重複転送を防ぐ機能を参考にした機能で、万一Link Aggregationされていると、ドロップすべき物理NICからのみパケットが受信され、結局仮想マシンには届かないという事態が発生しうる。

ここまでは物理スイッチでLink Aggregationを有効にするか無効にするかというだけの話だが、それでは、同じ仮想スイッチ(同じNICチーミング)を使用する複数のポートグループで負荷分散のアルゴリズムを分けて併用したい場合はどうすればよいだろうか。本来は、Link Aggregation必須と禁止のグループが共存することはできないはずだが、一つだけ抜け穴がある。それは、リバースチーミングを無効にしてしまうこと。リバースチーミングのオフは、ESXの詳細設定(Advanced Settings)のNet.ReversePathFwdCheckを0に設定することで実現できる。もちろん、この場合にはアルゴリズムに関わらず物理スイッチ側ではLink Aggregationが必須になる。さもなければ、ブロードキャストやマルチキャストは、チーミングを構成する物理NICの枚数だけ複製され、重複して仮想マシンに届くことになる。

なお、この設定が正式サポートである可能性は低いと思われる。

3 Comments 0 References Permalink
Click to view kkomatsu's profile Member since: Jul 29, 2007

このblogは小松康二の個人的なメモですのでサポート外の設定や勘違い等が含まれている可能性があります

View kkomatsu's profile

Communities