日々是仮想化

日々是仮想化

仮想化技術に関する情報などなど・・・

MENU

EVCモードの不一致でvMotionが失敗する

f:id:furuyamas:20200711191455p:plain

 

先日、こんなトラブルに遭遇しました。

Issue

【構成および前提】

・1-4号機の4台によるvSAN構成

・4台ともEnhanced vMotion Compatibility(EVC)はL6(Haswell世代)にて有効

・ESXiバージョンは6.7U3

 ※ただし、1号機のみ別問題対応にて、6.7U3クリーンインストール

【現象】

1号機をメンテナンスモードにしようとした際、複数のVMが2-4号機にvMotionできず失敗となった。なお、一部のVMは、1号機から2-4号機へvMotionできていたことを確認した。

【切り分け】

・手動で1号機から2号機へvMotion実施(メンテナンスモード移行時に失敗したVM

 →EVCの不一致エラーで失敗

・2号機から1号機へvMotion実施(メンテナンスモード移行時に成功したVM

 →vMotion成功

・テストVMを1号機で起動し、2号機へvMotion実施

 →vMotion失敗(同じエラー)

・テストVMを2号機で起動し、1号機へvMotion実施(その後3、4号機へvMotion)

 →vMotion成功

ここまでで、どうやら1号機で起動したVMは、2-4号機へvMotionできないことが分かった。1号機だけクリーンインストールを実施したことで、何かしら差異があるのだと仮定して、ホストプロファイルの見直し、EVC含むその他設定なども見直したが、あたりがつかず・・・。

 

仮想マシン単位のEVCをテストVMでwestmere世代まで落として1号機で起動

 →1号機で起動し、2-4号機へvMotion成功

んー・・ますますわからん・・・^^;

本番環境なので、安易に再起動などできない上に、、そもそもメンテナンスモードに移行できないし・・・。

というわけで、いったん主なログやconfigを取得し、調査開始。

 

Resolution

1号機と2-4号機で、CPUに関する差異があることはなんとなくわかった。

そこで、configの見直しを実施。

 

結論から言うと・・

--/etc/vmware/config
featMask.evc.cpuid.MDCLEAR = "Val:1"

こいつだった。

 

この「MDCLEAR」というのは、Intel CPUのマイクロコードに関する脆弱性に関連しており、その緩和策としてこの値が「無効」になっていたということになる。

www.vmware.com

1号機のみESXi6.7u3をクリーンインストールしたことで、この値の差異が生まれてしまったということが原因だった。

はっきりとしたことはわからないが、脆弱性に対応したバージョンにアップデートした後、なんらかの原因でこの値が正しく有効にならないケースがあるようだ。

2-4号機では、MDCLEAR機能が有効になっていなかった状況が確認できた。(そのためにvMotion時に行われるMDCLEARのチェックがエラーとなっていた)

 

本来であれば、6.7P01へアップデートした際に、有効となっていなければならなかったようだ。おそらくは、BIOSレベルの設定であるため、ハードリセットが必要であったと考えられる。(物理サーバを完全にパワーオフ→パワーオンの動作)

 

今回は、2-4号機についてもすでに6.7U3へアップデート済みのため、下記対応を実施。

2-4号機について、1台ずつ

1.メンテナンスモードへ移行

2.ESXiをシャットダウン

3.サーバをパワーオフ

4.サーバをパワーオン

5.ESXi起動後、メンテナンスモード解除

下記、コマンドでMDCLEARが有効になったことを確認

 

# vim-cmd hostsvc/hostconfig|grep -A 2 MDCLEAR

 

これが
key = "cpuid.MDCLEAR",
featureName = "cpuid.MDCLEAR",
value = "0"

 

こうなっていればOK

key = "cpuid.MDCLEAR",
featureName = "cpuid.MDCLEAR",
value = "1"

 

2-4号機すべて完了した後、手動でvMotionを実施

→成功

1号機をメンテナンスモード移行

→成功

 

というわけで、トラブルシューティングを完了できました。