##はじめに
クラウド基盤の構築している2年目のインフラエンジニアです。
最近、vSphere HAについて深く勉強したので、得たものをまとめたいと思います。
今回初投稿なので不明点や不備があれば教えていただけると嬉しいです。
vSphere HAとはどういう機能か
ESXiホストに障害が発生したときにもVMの稼働を最大化する機能がvSphere HAです。
クラスタを新規作成または編集するときに、vSphere HAを「オンにする」にチェックを入れることでこの機能を有効にすることができます。
例えば、あるESXiホストで障害が発生し通信が遮断してしまった場合、vSphere HAを有効にしていればその上で稼働していたVMは自動的にクラスタ内で別の正常なESXiホスト上で再起動させることができます。
##vSphere HA有効にしていたのに障害時発動しない?
###障害の概要
今回、ESXiのストレージ側のNICを両系unusedにし、ストレージと通信ができなくなった障害が発生したという仮定の下、ESXiホスト上のVMはどのような挙動をするのか検証しました。
・vSphereのバージョンは、6.0
・クラスタのvSphere HAは有効にしデフォルトの設定のまま
・クラスタ内のESXiは3台(1台のみ障害発生)
上記の条件下だと障害が発生したESXi上のVMはvSphere HAによって別の正常なESXiホストに移動しませんでした。
vmware基盤を構築する身にとっては、障害発生時にvSphere HAが発動せず、VMの稼働が停止してしまう状態は回避したい・・・。
##解決方法
###VMCP 障害応答の設定を変更する
####VMCPとはどのような機能か
vSphereのバージョンが6.0以降の場合、**VMCP(VM Component Protection)**というデータストアのアクセス障害を検出し、VMの自動リカバリを実行する機能が搭載されているようです。
以下の2つの障害を検知します。
・APD(All Path Down):ストレージがホストに一時的にアクセス不能、全デバイスのパスが使用不可
・PDL(Parmanent Device Loss):永続的にデバイスが損失されている状態
####APD発生時の設定を有効
今回は、ストレージと全く通信できない状態なので、APDに関する設定を変更しました。
私はAPDが発生した場合、「仮想マシンをパワーオフして再起動: 標準的な再起動ポリシー」するように設定変更しました。
設定変更は以下の手順で行います。
VMCP応答の構成
####設定変更後の挙動
このように設定変更し、再度ESXiのストレージ側のNICを両系unusedにしました。
その結果、ストレージアクセス障害を検知し、VMはクラスタ内の別ESXiホスト上で再起動ことが確認できました。
しかし、別ESXiホスト上で再起動するまでに要した時間は、ping応答で確認したところ4分であり、この反応の遅さが懸念事項として残りました。
####障害検知に要する時間変更
そこで、APDのオプションのデフォルト値を変更してみました。
変更した値は、以下2つです。
Apdtimeout:140s → 20s
APD待機時間:3分 → 0
ストレージAPDのタイムアウト制限の変更
その結果、4分かかっていたのが2分半程度まで削減することができました。
元々APD状態を検知後、一旦待機して復旧しなければHAする機能のようです。
##まとめ
・vSphere HAはデフォルト設定のままだとデータストアのアクセス障害を検知しない。
・VMCPはvSphere6.0以降に搭載されているので、vSphere HAを有効にするときは設定をカスタマイズする必要がある。
・VMがフェイルオーバーし、再起動するまでの時間も設定変更することができる。