LoginSignup
10
5

More than 5 years have passed since last update.

vSphere EVCを有効化する場合のCPU世代に気をつける件

Last updated at Posted at 2017-11-25

仮想環境を導入しているところでも、ハードウェアのリース切れ保守切れから老朽化などで、ホストを入れ換えるということはままある事態だと思われ。

フェールオーバーとCPUの関係

仮想環境の強みは「ホストに異常が生じても、その上で稼働中のVMは自動的にフェールオーバー」だと思ってるんですが、
vSphereだとホストをクラスタでまとめておくことと、それらのホストのCPUが同一世代であることが条件なわけですね。(他の環境でも同じだと思うけど)

理由は「CPUの命令セットが世代ごとに異なるから」なんですが、
基本的に後方互換性があるので、2世代以上のCPUが混在していても、
新世代CPUホスト上の仮想マシンを旧世代CPUホスト上にフェールオーバーさせるのは(無論、仮想化命令が使えるのが前提の旧世代ですよ!)いけるんですけど、
普通逆だろと。ホストがヤバくなるのは一般的には古い方からだろと。

そこで、vSphereにはクラスタに設定するEnhanced VMotion Compatibility(EVC)という機能が搭載されております。

vSphereのEVC機能と制限

これは有り体に言えば
クラスタ内に存在する全ホストのCPU(の命令セット)世代を、一番古い世代に統一することによって、
新世代CPUか旧世代CPUかの区別なくvMotion(フェールオーバー)させることができるようにしちゃおうという、
ホスト入れ替え時に大変ありがたい機能となっております。

が、この機能、
当たり前のことですがvSphereのバージョンによって選べるCPU世代が決まってましてね?
特にvSphere Clientを頑なに使っているそこの会社のインフラ担当の方、
vSphere Clientは5.0の機能のまま時が止まっているため、
最新バージョンでも選択できるCPU世代はIntelで言うところのSandy Bridgeまでとなります。次の世代のIvy Bridgeもアウトです、Haswellなんて夢のまた夢です。
vSphere5.5の場合、WebクライアントからだとIvy Bridgeならワンチャンあります。

で、今稼働中のホストで一番古い世代のCPUよりもEVCモードで選択できるCPU世代が古いとどうなるかというと、
「EVCをオンにするときに稼働中の仮想マシン再起動が必要になる」ということです…

EVCをオンにしていない場合、ざっくりと
1.EVCオンのクラスタを同じDC内に作成
2.元のクラスタのホストのうち、どれか1つのホストの稼働中VMをvMotionで他のホストに移動する
3.稼働中VMのなくなったホストをメンテナンスモードに切り替え
4.メンテナンスモードのホストをEVCオンのクラスタに移動
5.メンテナンスモードを切る
6.移動し終わったホストにVMをvMotionで戻す
7.他のホストも同じように移動

という手順になるんですが、この手順6.で「新世代CPUのホストから旧世代CPUのホストに移動」という、前の方に書いた「できない話」になってしまうのですね。
当然、エラーが発生します。

斯くなる上は、皆様が長期休暇中に出勤して、
VM停止→再起動を繰り返しながら作業するしか無くなります。
ホスト入れ替え時にはEVCの適用条件と、あとvSphereのアップグレードの話もお忘れなく…(今回はギリギリ良くても、ホスト入れ替えた次回困るかも知れない…VCサーバも入れ替えだろという話もあるが)

この話、日本語では書いてるWeb上の記述見たことないので書き残すことにしました。
いずれどなたかの何かのヒントになれば幸いです。N年後の自分だったりしてな。

10
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5