今回は、PowerCLI で 2 Node vSAN を構成してみます。
2 Node vSAN のセットアップも、通常の vSAN と同様に vSphere Web Client を使用できますが
PowerCLI でもセットアップすることができます。
以前に PowerCLI での vSAN セットアップを
VMware Hands-on Labs(HoL)でためす方法を投稿しましたが・・・
PowerCLI で vSAN セットアップをためしてみる。
今回も同様に、下記の HoL のモジュール 7 にあるシナリオを PowerCLI で実施してみます。
HOL-1808-01-HCI - vSAN v6.6 - Getting Started
http://labs.hol.vmware.com/HOL/catalogs/lab/3651
ESXi ホストの準備。
最初に、vCenter へ接続してクラスタを作成しておきます。
PowerCLI> Connect-VIServer vcsa-01a.corp.local
PowerCLI> Get-Datacenter RegionA01 | New-Cluster -Name 2-Node-Stretched-Cluster
esx-05a.corp.local と esx-06a.corp.local をクラスタに移動します。
PowerCLI> Get-VMHost esx-05a.corp.local,esx-06a.corp.local | Move-VMHost -Location 2-Node-Stretched-Cluster
クラスタに移動されたすべてのホストのメンテナンスモードを解除します。
PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Set-VMHost -State Connected
VMkernel ポートで、vSAN の準備ができていることを確認します。
VMkernel ポート「vmk3」ではすでに vSAN のトラフィックが有効化されています。
(vSAN Witness ホストの VMkernel ポートの設定は、後であらためて確認します。)
PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostNetworkAdapter -VMKernel | select VMHost,Name,IP,VsanTrafficEnabled | sort VMHost,Name
このラボではすでに vSAN トラフィックが有効化されていますが、
有効化する場合は下記のようなコマンドラインになります。
PowerCLI>
ESXi ホストのディスク構成を確認しておきます。
ここで、このラボでは各ホストで構成が若干違う(vmhba1:~ と vmhba2:~)ことがわかります。
PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostDisk | select VMHost,ScsiLun,TotalSectors | sort VMHost,ScsiLun
先程とは別の方法で、VMkernel ポートの設定を確認しておきます。
まだ vSAN Witness が有効化されていないことがわかります。
ここでは、Get-EsxCli により、PowerCLI から esxcli を実行しています。
esxcli で実行可能な作業であれば、このように PowerCLI を介して実行することも可能です。
ここでは、コマンドラインが簡潔な Get-EsxCli -V1 を利用しています。
PowerCLI> Get-VMHost esx-0[568]a.* | Get-VMHostNetworkAdapter -VMKernel | % {$vmk = $_.Name; $_ | select VMHost,Name,@{N="Tags";E={((($_.VMHost | Get-EsxCli).network.ip.interface.tag.get($vmk)).Tags | sort) -join ","}}} | sort VMHost,Name
ESXi ホスト「esx-05a.corp.local」の vmk0 に、未設定だった witness タグを付与してみます。
まだ vSAN Witness が有効化されていないことがわかります。
今度は先ほどとはことなり、Get-EsxCli -V2 で esxcli を実行しています。
Get-EsxCli -V2 ではオプション指定の方法が少し複雑になりますが、
かわりにオプションを指定しやすく(必須ではないオプションを省略しやすく)なっています。
PowerCLI> $esxcli = Get-VMHost esx-05a.corp.local | Get-EsxCli -V2
PowerCLI> $a = $esxcli.vsan.network.ipv4.add.CreateArgs()
PowerCLI> $a.interfacename = "vmk0"
PowerCLI> $a.traffictype = "witness"
PowerCLI> $esxcli.vsan.network.ipv4.add.Invoke($a)
そのまま下記のコマンド実行すると、設定されたことが確認できます。
PowerCLI> $esxcli.vsan.network.list.Invoke() | select VmkNicName,TrafficType
同様に ESXi ホスト「esx-06a.corp.local」の vmk0 に、witness タグを付与します。
(PowerCLI のプロンプトは省略しています。)
$esxcli = Get-VMHost esx-06a.corp.local | Get-EsxCli -V2
$a = $esxcli.vsan.network.ipv4.add.CreateArgs()
$a.interfacename = "vmk0"
$a.traffictype = "witness"
$esxcli.vsan.network.ipv4.add.Invoke($a)
$esxcli.vsan.network.list.Invoke() | select VmkNicName,TrafficType
VMkernel ポートの Tag 設定は下記のようになりました。
こちらでは witness は「VSANWitness」と表示されています。
vSAN クラスタのセットアップ。
それでは、2 Node vSAN のセットアップをしていきます。
vSAN Witness 仮想アプライアンス「esx-08a.corp.local」は、
このラボではすでにデプロイとネットワーク設定が実施されています。
クラスタで vSAN を有効化します。
PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Set-Cluster -VsanEnabled:$true -Confirm:$false
Fault Domain を 2 ノードそれぞれに作成します。
優先 Fault Domain は Preferred でセカンダリは Secondary としますが、
ここではまだその区別はありません。
PowerCLI> New-VsanFaultDomain -Name Preferred -VMHost esx-05a.corp.local
PowerCLI> New-VsanFaultDomain -Name Secondary -VMHost esx-06a.corp.local
ストレッチ クラスタを有効化します。
ここで Witness ホストと、優先 Fault Domain を指定します。
PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Set-VsanClusterConfiguration -StretchedClusterEnabled:$true -WitnessHost esx-08a.corp.local -WitnessHostCacheDisk mpx.vmhba1:C0:T2:L0 -WitnessHostCapacityDisk mpx.vmhba1:C0:T1:L0 -PreferredFaultDomain Preferred
つづけて、vSAN ディスク グループを作成します。
それぞれにホストに、2つずつ ディスクグループを作成します。
今回は各ホストでキャッシュ用 SSD のデバイス名が異なるので、ディスクグループごとにコマンドラインを実行します。
esx-05a.corp.local の ディスクグループ#1
PowerCLI> Get-VMHost esx-05a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T0:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T0:L0,mpx.vmhba3:C0:T1:L0
esx-06a.corp.local の ディスクグループ#1
PowerCLI> Get-VMHost esx-06a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba2:C0:T0:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T0:L0,mpx.vmhba3:C0:T1:L0
esx-05a.corp.local の ディスクグループ#2
PowerCLI> Get-VMHost esx-05a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T1:L0 -DataDiskCanonicalName mpx.vmhba4:C0:T0:L0,mpx.vmhba4:C0:T1:L0
esx-06a.corp.local の ディスクグループ#2
PowerCLI> Get-VMHost esx-06a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba2:C0:T1:L0 -DataDiskCanonicalName mpx.vmhba4:C0:T0:L0,mpx.vmhba4:C0:T1:L0
vSAN データストアの名前を確認します。デフォルトで「vsanDatastore」になります。
PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-Datastore | where {$_.Type -eq "vsan"}
vSAN データストアに VM を作成しておきます。
PowerCLI> New-VM -Name vm01 -Datastore vsanDatastore -StorageFormat Thin -ResourcePool esx-05a.corp.local
今回は省略しますが、あわせて必要に応じて「仮想マシン ストレージ ポリシー」によるローカルアフィニティや、
DRS ルールでのアフィニティ ルールを設定したりします。
セットアップした 2 Node vSAN の様子。
PowerCLI で構成したとおり、2 Node vSAN はストレッチ クラスタとなり、
Preferred と Secondary のうち、Preferred が優先 Fault Domain になっています。
vSAN Health でも「Storeched cluster」が緑になっています。
ハードウェア互換性に関連するエラーなどがありますが、HoL の仕様上ここでは無視します。
vSAN データストアに作成した VM「vm01」は、
データが格納される Component がそれぞれの Fault Domain(Preferred と Secondary)、
Witness が Witness ホストに配置されています。
(今回はデフォルトの仮想マシン ストレージ ポリシーのままです。)
vSphere Web Client で簡単に 2 Node vSAN を構成できますが、
PowerCLI を利用すると Fault Domain を手動作成したりするので
より理解を深められるのではないかと思います。
2 Node vSAN はリモートオフィス / ブランチオフィスへの配置をユースケースとしているようで
大量展開や省力化のためか自動化のサンプルが多くあります。
VMware Sample Exchange などにもサンプルが多いので、いろいろと挑戦してみたいところです。
vSAN Samples - Samples - VMware {code}
以上、PowerCLI で 2 Node vSAN を構成してみる話でした。