Daydreaming in Brookline, MA

VMwareのvSAN検証環境を作ってみました

1 はじめに

vSANを動作検証するために、HDDしか持たないサーバー上にnested ESXiを作るところから始めて検証環境を作ってみました。いくつかはまりポイントがあったので覚書用に残しておきます。

2 Overview

2.1 vSAN

VMware vSANは複数のESXiで作るSDS (Software Defined Storage)です。冗長化されているので、ホストESXiが1台ダウンしてもデータが消えたりアクセスできなくなることがありません。

vSANには古いOSA (Original Storage Architecture)とvSphere8以降のESA (Express Storage Architecture)があります。前者はSSDとHDDのハイブリッド、後者はNVMe専用です。SSD無しの構成はありませんが、検証環境はOSAを使い、HDDをSSDに見せかけます。

2.2 nested ESXi

vSANは通常3台以上のESXiホストが必要なのですが、そんなにサーバーがありません。そこで、1台のESXi上に3台のESXi VMsを作ってなんとかします。nested ESXiは意外と癖があって、簡単には動きませんでした。

3 nested ESXiを作る

nested ESXiについて検索していたらとてもよいサイトを見つけました。 https://changineer.info/vmware/hypervisor/vmware_nested_esxi.html

インストーラーの入手から説明されていて、とても丁寧です。基本的にこの手順に沿って作ってみました。 CPUの「ハードウエアアシストによる仮想化をゲストOSに公開」設定は普通なら見過ごしてしまうところです。助かります。

(外側の)ESXiにログインしてVMを選び、Edit > CPUを展開して Expose hardware assisted virtualization to the guest OS をチェックします。

この手順に無くてはまったポイントだけ簡単に説明します。

3.0.1 PSODの回避

まず、いきなりESXiのインストーラーが起動せずにPSOD (Purple Screen of Death)画面が出ました。"Exception 13"が出ていたのでそれで検索したところ回避策が見つかりました。 https://www.virten.net/2022/11/esxi-7-and-8-installation-fails-with-fatal-cpu-mismatch-on-feature/

私の環境では、ESXiのブートオプションをつけてやる必要がありました。インストーラーが起動しはじめた瞬間に Shift+O キーを押すとブートオプションが付けられます。タイミングが割りとシビアなのでぐずぐずしているとPSODを拝むことになります。追加したブートオプション:

cpuUniformityHardCheckPanic=FALSE ignoreMsrFaults

ESXiのsshをenableにして、次のコマンドで追加オプションを永続化してやるまでPSODが出てしまうリスクがあります。

esxcli system settings kernel set -s cpuUniformityHardCheckPanic -v FALSE
esxcli system settings kernel set -s ignoreMsrFaults -v TRUE

3.0.2 外側のESXiで、ネットワークのpromiscuous設定が必要だった

nested ESXi上にLinuxのVMを作ったのですが、自分とホストESXi以外にpingが通りません。もちろん外からもだめです。ESXiの仮想スイッチやポートグループを疑っていろいろ設定をいじった挙げ句、vCenterから当該nested ESXiがdisconnectedになってしまいました。

結局のところ(nestedでない)外側のESXiで、ネットワーク設定を変えてpromiscuousモードとforged trasmitsをacceptにしてやる必要がありました。 https://williamlam.com/2013/11/why-is-promiscuous-mode-forged.html

外側のESXiからnested ESXiのVMを選び、Hardware configuration > click Front-end Network > Edit settings > expand Security > accept Promiscuous mode & Forged transmits > Save

4 vSAN datastoreの構築

nested ESXiを使ってvSANを構築する手順を説明しているよいサイトを見つけたので、ほぼそのままの手順で構築しました。 https://changineer.info/vmware/hypervisor/vmware_vsan_basic.html

HDDをSSDに見せかけるやり方も丁寧に説明されているので、はまりポイントはありませんでした。

nested ESXiのVMに8GBくらいの小さなストレージを割り当て、nested ESXiにsshしてそれをSSDに見せかけます。

cd /vmfs/volumes/datastore1/<VM名> > viで <VM名>.vmx を編集して以下の行を追加します。SCSI番号(0:3)はその8GBストレージの番号です。

scsi0:3.virtualSSD = 1

4.0.1 vCLSを起動させる

しかし、翌日になってvCenterのタスク履歴を見たところ、vSAN用の(?)vCLS VMが起動しないエラーが大量に出ていることに気が付きました。エラーメッセージを見ると、MWAITが無いと文句を言っているようです。これで検索して回避策を見つけました。 https://kb.vmware.com/s/article/83076

vCLS VMのEVCを無効にするのですが、そのためにはvCLSが乗っているESXi(vCenterからでなく)にログインしてvCLSのcompatibilityをESXi 6.7に「アップグレード」する必要があります(8 → 6.7なので下げているのですが)。するとvCenter上でvCLSのconfigメニューにdisable EVC項目が現れるので無効化します。

一つvCLSが上がると、次のvCLSが起動しようとして同じエラーになるので、これにも同じことをします。計3回やることになります。

VMwareのページから手順を引用。

  1. Locate the 1st powered off vCLS VM in vCenter and open the Configure tab. Notice that "VMware EVC" is not offered as an option.
  2. Identify the ESXi host where the 1st vCLS resides.
  3. Open the ESXi Host Client for this ESXi and login as root .
  4. Right click the vCLS VM within the host, and select "Upgrade VM Compatibility". Select "ESXi 6.7 virtual machine" to change the virtual hardware version to 14, and click on [Upgrade].
  5. Confirm the VM Compatibility Upgrade (click on [YES]).
  6. Return to the vCLS VM in vCenter and click one the Configure tab for the VM. Notice that "VMware EVC" is now an option. Edit EVC. Refresh vCenter if "Edit" is greyed out.
  7. Disable EVC for the vCLS vm (this is temporary as EVC will actually then re-enable as Intel "Cascade Lake" Generation…for the purposes of satisfying the MWAIT error, this is an acceptable workaround).
  8. Another vCLS will power on the cluster note this.

本当はESXiのBIOSでMonitor/MWAITを有効化するのが正しい対処方法みたいですが、こちらは試していません。

5 終わりに

というわけで、何とかvSAN検証環境が出来ました。これから少しvSANで遊んでみたいと思います。

Tech Tech