仮想環境を導入しているところでも、ハードウェアのリース切れ保守切れから老朽化などで、ホストを入れ換えるということはままある事態だと思われ。
#フェールオーバーと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年後の自分だったりしてな。