Skip navigation
2018

vRealize Network Insight(vRNI)は NSX や vSphere などで

ネット―ワーク仮想化された環境を可視化するツールです。

 

vRNI では過去の特定の時点にさかのぼって情報を確認することができます。

ネットワーク構成や、トラフィックに関するメトリックだけでなく、

実は仮想マシン(VM)の構成情報なども確認できたりします。

 

たとえば、

「仮想マシンで設定ミスがあって修正はしたものの、

 ある事件があった時点での構成はどうだったか確認したい」ようなケースがあるとします。

 

今回は、下記の構成を変更した環境を例として vRNI を見てみます。

  • 複数ある vNIC に、間違って同じポートグループを設定していたものを修正した。
  • 仮想マシンに設定している OS の種類を、事情により
    「Red Hat Enterprise Linux 7」から「Oracle Linux 7」に変更した。

 

vRNI では、NSX のネットワーク構成だけでなく、

上記のような VM 自体についての構成情報も確認することができます。

 

vRNI で VM の構成情報を確認してみる。

例として「db11」という VM を検索して、その構成情報を表示してみました。

この状態は すでに設定を変更して、期待どおりの状態です。

vrni-vm-check-01.png

 

たとえば、3時間前の VM の構成情報はどうだったのか確認したいということであれば、

「Now」のあたりをクリックしてタイム スライダーを表示し、カーソル(今は 7:55)を3時間前に移動します。

vrni-vm-check-02.png

 

そうすると、その時間にさかのぼって・・・

vrni-vm-check-02a.png

 

3時間前(3 hr ago)の情報を確認することができます。

この時間では、まだ OS が「Red Hat Enterprise Linux ~」で、

2 つの vNIC が間違って同じネットワーク(ポートグループ)に接続されていたことがわかります。

vrni-vm-check-03.png

 

vROps で VM の構成情報を確認してみる。

一方、同様の情報を確認できるツールとして vRealize Operations Manager (vROps)もあります。

 

vROps でも同様に、VM「db11」の情報を検索して表示してみます。

 

たとえば下記のように VM の情報を表示したり・・・

vrops-vm-check-01.png

 

VM に関連するオブジェクトを表示したりできます。

(今回のケースでの、接続ポートグループの情報はあります)

vrops-vm-check-02.png

 

しかし vROps では過去にさかのぼった構成情報を確認するのが困難なケースがあります。

環境構成を可視化をするという点では、やはり可視化専用ツールというだけあり vRNI の方が見やすいと思います。

 

ただし vRNI / vROps はどちらも、全く時差がなく情報が反映されるわけではなく、

おなじ VM についての情報でも、パラメータごとに反映への時差があることもあります。

そのため厳密な調査にはイベント情報やログの参照が必要になるとは思いますが、

それでも環境確認やトラブルシュートをするうえでは便利ではないかと思います。

 

以上、vRNI で過去の VM 構成を見てみる話でした。

vSAN には、iSCSI Target を提供する機能があります。

これは物理マシンにブロック デバイスを提供する目的の機能のようで、

下記の KB によると、物理マシンの Oracle RAC でも利用してよいようです。

 

vSAN 6.5 iSCSI デバイスを使用するためのベスト プラクティス (2151966)

https://kb.vmware.com/s/article/2151966

 

そこで、ためしに Oracle Linux 7 から vSAN の iSCSI Target に接続してみました。

今回は機能確認のために仮想マシンの Linux から接続していますが、

現状では、仮想マシンの Oracle RAC は vSAN iSCSI Target のサポート対象外です。

vSAN で仮想マシンで RAC を構築する場合は、以前に投稿した(下記)ように、

共有ディスクは VMDK ファイルを共有する方式になります。(厳密な手順ではありませんので、参考まで)

PowerCLI で vSphere / vSAN 環境での Oracle RAC むけ VM を設定してみる。(2 Node 構成)

 

それでは iSCSI Target を構成して、Linux OS から接続してみます。

 

vSAN iSCSI Target の準備。

iSCSI Target は vSphere Web Client で構成できますが、今回も PowerCLI 10.0(Linux の)を利用します。

 

クラスタでは vSAN / iSCSI Target のサービスを有効にします。

デフォルトのポートは vmk1 を設定しています。

PS /home/gowatana> Get-VsanClusterConfiguration vsan-cluster-02 | Set-VsanClusterConfiguration -IscsiTargetServiceEnabled:$true  -DefaultIscsiNetworkInterface vmk1

 

iSCSI Target のサービスが有効になりました。

PS /home/gowatana> Get-Cluster vsan-cluster-02 | Get-VsanClusterConfiguration | select VsanEnabled,IscsiTargetServiceEnabled | fl

 

VsanEnabled               : True

IscsiTargetServiceEnabled : True

 

 

iSCSI Target を作成します。

PS /home/gowatana> Get-Cluster vsan-cluster-02 | New-VsanIscsiTarget -Name vsan-rac-target-01

 

IQN は、今回は自動生成されたものを使用します。LUN はまだゼロです。

PS /home/gowatana> Get-VsanIscsiTarget -Cluster vsan-cluster-02 -Name vsan-rac-target-01 | select IscsiQualifiedName,NetworkInterface,NumLuns | fl

 

IscsiQualifiedName : iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

NetworkInterface   : vmk1

NumLuns            : 0

 

 

今回の環境では、iSCSI Initiator は vSAN クラスタに所属している ESXi ホストの vmk1 の IP アドレス宛に接続することになります。

PS /home/gowatana> Get-Cluster vsan-cluster-02 | Get-VMHost | Get-VMHostNetworkAdapter -Name vmk1 | select Name,VMHost,IP,SubnetMask | Sort-Object VMHost

 

Name VMHost           IP             SubnetMask

---- ------           --             ----------

vmk1 hv-n11.go-lab.jp 192.168.51.211 255.255.255.0

vmk1 hv-n12.go-lab.jp 192.168.51.212 255.255.255.0

vmk1 hv-n13.go-lab.jp 192.168.51.213 255.255.255.0

 

 

Target に LUN を作成します。今回は 3つ作成します。

PS /home/gowatana> New-VsanIscsiLun -Target vsan-rac-target-01 -Name lun0 -CapacityGB 30

PS /home/gowatana> New-VsanIscsiLun -Target vsan-rac-target-01 -Name lun1 -CapacityGB 30

PS /home/gowatana> New-VsanIscsiLun -Target vsan-rac-target-01 -Name lun2 -CapacityGB 30

 

Target の LUN 数が 3になりました。

PS /home/gowatana> Get-VsanIscsiTarget -Cluster vsan-cluster-02 -Name vsan-rac-target-01 | select IscsiQualifiedName,NetworkInterface,NumLuns | fl

 

IscsiQualifiedName : iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

NetworkInterface   : vmk1

NumLuns            : 3

 

 

iSCSI Initiator Group を作成して、Target への接続を許可する Initiator の IQN を追加します。

今回は、iSCSI Initiator (クライアントとなる Linux 側)の IQN をあらかじめ決定しておきます。

PS /home/gowatana> Get-Cluster vsan-cluster-02 | New-VsanIscsiInitiatorGroup -Name iqn-rac-group-01

PS /home/gowatana> Get-Cluster vsan-cluster-02 | Get-VsanIscsiInitiatorGroup -Name iqn-rac-group-01 | Set-VsanIscsiInitiatorGroup -AddInitiator iqn.1988-12.com.oracle:db11

PS /home/gowatana> Get-Cluster vsan-cluster-02 | Get-VsanIscsiInitiatorGroup -Name iqn-rac-group-01 | Set-VsanIscsiInitiatorGroup -AddInitiator iqn.1988-12.com.oracle:db12

 

Initiator Group に IQN が登録されました。

PS /home/gowatana> Get-Cluster vsan-cluster-02 | Get-VsanIscsiInitiatorGroup -Name iqn-rac-group-01 | select InitiatorName

 

InitiatorName

-------------

{iqn.1988-12.com.oracle:db11, iqn.1988-12.com.oracle:db12}

 

 

Target に Initiator Group を関連付けます。

PS /home/gowatana> Get-Cluster vsan-cluster-02 | Get-VsanIscsiTarget -Name vsan-rac-target-01 | New-VsanIscsiInitiatorGroupTargetAssociation -InitiatorGroup iqn-rac-group-01

 

vSphere Web Client で見ると、下記のように設定してきた内容が反映されています。

Target には、作成したとおりの LUN が接続されています。

今回はふれていませんが、GUI から見ると仮想マシンと同様にストレージ ポリシーを利用できることもわかりやすいと思います。

vsan-iscsi-01.png

 

Initiator Group も Target に割り当てられています。

vsan-iscsi-02.png

 

iSCSI Target に接続するクライアント。

今回は、物理マシンのかわりに(製品としてはサポート外ですが)仮想マシンから接続してみます。

 

Oracle Linux 7 のゲストを 2台用意しています。

PS /home/gowatana> Get-VM db1? | Get-VMGuest | select VM,State,OSFullName | Sort-Object VM

 

VM     State OSFullName

--     ----- ----------

db11 Running Oracle Linux 7 (64-bit)

db12 Running Oracle Linux 7 (64-bit)

 

 

vNIC はネットワークセグメントごとに 1つずつ用意しています。

Linux では Bondig を構成していません。

PS /home/gowatana> Get-VM db1? | Get-NetworkAdapter | select Parent,Name,NetworkName | Sort-Object Parent,Name

 

Parent Name              NetworkName

------ ----              -----------

db11   Network adapter 1 dvpg-vds01-vlan-1011

db11   Network adapter 2 dvpg-vds01-vlan-0041

db11   Network adapter 3 dvpg-vds01-vlan-0051

db12   Network adapter 1 dvpg-vds01-vlan-1011

db12   Network adapter 2 dvpg-vds01-vlan-0041

db12   Network adapter 3 dvpg-vds01-vlan-0051

 

 

ゲスト OS です。

[root@db11 ~]# cat /etc/oracle-release

Oracle Linux Server release 7.4

 

それぞれ、iSCSI 接続前は下記のようにディスクを認識しています。

[root@db11 ~]# lsscsi

[2:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[2:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[3:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

[root@db11 ~]# lsblk -l /dev/sd?

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda           8:0    0   16G  0 disk

sda1          8:1    0    1G  0 part /boot

sda2          8:2    0   15G  0 part

ol-root     249:0    0 13.4G  0 lvm  /

ol-swap     249:1    0  1.6G  0 lvm  [SWAP]

sdb           8:16   0   20G  0 disk

vg01-data01 249:2    0   20G  0 lvm  /u01

 

iSCSI Initiator の準備。(Linux OS)

 

iSCSI Initiator をインストールします。

[root@db11 ~]# yum install -y -q iscsi-initiator-utils

[root@db11 ~]# rpm -q iscsi-initiator-utils

iscsi-initiator-utils-6.2.0.874-4.0.1.el7.x86_64

 

IQN を Initiator Group に事前登録したものに変更しておきます。

[root@db11 ~]# cat /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.1988-12.com.oracle:89b502eafaa

[root@db11 ~]# echo 'InitiatorName=iqn.1988-12.com.oracle:db11' > /etc/iscsi/initiatorname.iscsi

[root@db11 ~]# cat /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.1988-12.com.oracle:db11

 

Initiator のサービスを起動しておきます。

(ただ、実は後で自動起動されます)

[root@db11 ~]# systemctl enable iscsid

Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service.

[root@db11 ~]# systemctl start iscsid

[root@db11 ~]# systemctl is-active iscsid

active

 

iSCSI Target への接続。

まず、vSAN クラスタ内のホストのうち 1台に接続してみます。

iSCSI Target のアドレスで discovery してから login します。

[root@db11 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.51.211

192.168.51.211:3260,257 iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

[root@db11 ~]# iscsiadm -m node -T iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2 -p 192.168.51.211 --login

Logging in to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.211,3260] (multiple)

Login to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.211,3260] successful.

 

vSAN による iSCSI の LUN がみえるようになります。

[root@db11 ~]# lsscsi

[2:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[2:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[3:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

[33:0:0:0]   disk    VMware   Virtual SAN      0001  /dev/sdc

[33:0:0:1]   disk    VMware   Virtual SAN      0001  /dev/sdd

[33:0:0:2]   disk    VMware   Virtual SAN      0001  /dev/sde

 

接続先ターゲットが 1ホストだけではそのホストの障害にたえられないため、

のこりの 2台のホストにも接続してみます。

[root@db11 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.51.212

192.168.51.212:3260,258 iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

[root@db11 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.51.213

192.168.51.213:3260,258 iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

[root@db11 ~]# iscsiadm -m node -T iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2 --login

Logging in to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.212,3260] (multiple)

Logging in to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.213,3260] (multiple)

Login to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.212,3260] successful.

Login to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.213,3260] successful.

 

この Target には LUN を3つ作成していて、3 経路で接続しているので

9 つのデバイス(/dev/sdc ~ /dev/sdc)として認識されました。

各行の末尾にある文字列を見ると、どのデバイスが同じ LUN なのか判別できます。

例では、実際の LUN は下記の 3つだけです。

  • 1VMware_VITDEVID3a37b75af079a90e5e1e0050568adec3
  • 1VMware_VITDEVID6737b75a3cc0733f381a0050568adec3
  • 1VMware_VITDEVID7d37b75afa00ba22f8ea0050568adec3

[root@db11 ~]# lsscsi -i

[2:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda   -

[2:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdb   -

[3:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0   -

[33:0:0:0]   disk    VMware   Virtual SAN      0001  /dev/sdc   1VMware_VITDEVID3a37b75af079a90e5e1e0050568adec3

[33:0:0:1]   disk    VMware   Virtual SAN      0001  /dev/sde   1VMware_VITDEVID6737b75a3cc0733f381a0050568adec3

[33:0:0:2]   disk    VMware   Virtual SAN      0001  /dev/sdh   1VMware_VITDEVID7d37b75afa00ba22f8ea0050568adec3

[34:0:0:0]   disk    VMware   Virtual SAN      0001  /dev/sdd   1VMware_VITDEVID3a37b75af079a90e5e1e0050568adec3

[34:0:0:1]   disk    VMware   Virtual SAN      0001  /dev/sdg   1VMware_VITDEVID6737b75a3cc0733f381a0050568adec3

[34:0:0:2]   disk    VMware   Virtual SAN      0001  /dev/sdi   1VMware_VITDEVID7d37b75afa00ba22f8ea0050568adec3

[35:0:0:0]   disk    VMware   Virtual SAN      0001  /dev/sdf   1VMware_VITDEVID3a37b75af079a90e5e1e0050568adec3

[35:0:0:1]   disk    VMware   Virtual SAN      0001  /dev/sdj   1VMware_VITDEVID6737b75a3cc0733f381a0050568adec3

[35:0:0:2]   disk    VMware   Virtual SAN      0001  /dev/sdk   1VMware_VITDEVID7d37b75afa00ba22f8ea0050568adec3

 

マルチパス デバイスの構成。(DM Multipath)

複数経路で LUN にアクセスしている iSCSI Initiator で /dev/sdX というデバイスのまま利用していると、

いずれかのパスで障害があったときに経路を切り替えることができません。

そこで、Linux での一般的な方法でマルチパス デバイスを構成してみます。

 

ここでは、Device Mapper Multipath(DM Multipath) を利用します。

device-mapper-multipath をインストールします。

[root@db11 ~]# yum install -y -q device-mapper-multipath

[root@db11 ~]# rpm -q device-mapper-multipath

device-mapper-multipath-0.4.9-111.el7_4.2.x86_64

 

そして構成&有効化します。

[root@db11 ~]# mpathconf --enable --with_multipathd y

[root@db11 ~]# systemctl is-active multipathd

active

[root@db11 ~]# mpathconf

multipath is enabled

find_multipaths is enabled

user_friendly_names is enabled

dm_multipath module is loaded

multipathd is running

 

マルチパスデバイス(/dev/mapper/mpatha ~ /dev/mapper/mpathc)が構成されました。

下記のように Virtual SAN(vSAN)の LUN による /dev/sdb ~ /dev/sdk が束ねられている様子が分かります。

[root@db11 ~]# multipath -ll

mpathc (1VMware_VITDEVID7d37b75afa00ba22f8ea0050568adec3) dm-5 VMware  ,Virtual SAN

size=30G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 33:0:0:2 sde 8:64  active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 34:0:0:2 sdi 8:128 active ready running

`-+- policy='service-time 0' prio=1 status=enabled

  `- 35:0:0:2 sdk 8:160 active ready running

mpathb (1VMware_VITDEVID6737b75a3cc0733f381a0050568adec3) dm-4 VMware  ,Virtual SAN

size=30G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 33:0:0:1 sdd 8:48  active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 34:0:0:1 sdg 8:96  active ready running

`-+- policy='service-time 0' prio=1 status=enabled

  `- 35:0:0:1 sdj 8:144 active ready running

mpatha (1VMware_VITDEVID3a37b75af079a90e5e1e0050568adec3) dm-3 VMware  ,Virtual SAN

size=30G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 33:0:0:0 sdc 8:32  active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 34:0:0:0 sdf 8:80  active ready running

`-+- policy='service-time 0' prio=1 status=enabled

  `- 35:0:0:0 sdh 8:112 active ready running

[root@db11 ~]#

 

iSCSI Target への接続。(Linux#2)

同様に、もう1台の Linux OS から iSCSI Target に接続します。

[root@db12 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.51.211

192.168.51.211:3260,257 iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

[root@db12 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.51.212

192.168.51.212:3260,258 iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

[root@db12 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.51.213

192.168.51.213:3260,258 iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2

[root@db12 ~]# iscsiadm -m node -T iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2 --login

Logging in to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.211,3260] (multiple)

Logging in to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.212,3260] (multiple)

Logging in to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.213,3260] (multiple)

Login to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.211,3260] successful.

Login to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.212,3260] successful.

Login to [iface: default, target: iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2, portal: 192.168.51.213,3260] successful.

[root@db12 ~]# mpathconf --enable --with_multipathd y

[root@db12 ~]#

 

iSCSI Target に接続すると、1台目とはそれぞれの LUN のデバイス名(/dev/sdb~/dev/sdk)が異なっていることが分かります。

[root@db12 ~]# multipath -ll

mpathc (1VMware_VITDEVID7d37b75afa00ba22f8ea0050568adec3) dm-5 VMware  ,Virtual SAN

size=30G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 33:0:0:2 sdi 8:128 active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 34:0:0:2 sdj 8:144 active ready running

`-+- policy='service-time 0' prio=1 status=enabled

  `- 35:0:0:2 sdk 8:160 active ready running

mpathb (1VMware_VITDEVID6737b75a3cc0733f381a0050568adec3) dm-4 VMware  ,Virtual SAN

size=30G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 33:0:0:1 sdf 8:80  active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 34:0:0:1 sdg 8:96  active ready running

`-+- policy='service-time 0' prio=1 status=enabled

  `- 35:0:0:1 sdh 8:112 active ready running

mpatha (1VMware_VITDEVID3a37b75af079a90e5e1e0050568adec3) dm-3 VMware  ,Virtual SAN

size=30G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 33:0:0:0 sdc 8:32  active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 34:0:0:0 sdd 8:48  active ready running

`-+- policy='service-time 0' prio=1 status=enabled

  `- 35:0:0:0 sde 8:64  active ready running

[root@db12 ~]#

 

LUN のデバイス名ずれの様子について。

/dev/sdX という名前は、接続した Linux OS ごとに異なる状態になります。

しかもそのままでは永続化されない(OS 再起動などで名前が変わる)ものです。

LUN の番号ごとに、接続パスをもとにした /dev/disk/by-path 配下のデバイス名を見てみます。

Target のアドレスと sdX のデバイス名をめやすに見ると、

ノードごとに認識している名前がずれていることが判別しやすいと思います。

 

まず Linux OS #1 での LUN とデバイス名の対応です。

[root@db11 ~]# ls -l /dev/disk/by-path/ip-* | grep lun-0

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.211:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-0 -> ../../sdc

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.212:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-0 -> ../../sdf

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.213:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-0 -> ../../sdh

[root@db11 ~]# ls -l /dev/disk/by-path/ip-* | grep lun-1

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.211:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-1 -> ../../sdd

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.212:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-1 -> ../../sdg

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.213:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-1 -> ../../sdj

[root@db11 ~]# ls -l /dev/disk/by-path/ip-* | grep lun-2

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.211:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-2 -> ../../sde

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.212:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-2 -> ../../sdi

lrwxrwxrwx. 1 root root 9  3月 25 16:04 /dev/disk/by-path/ip-192.168.51.213:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-2 -> ../../sdk

 

そして Linux OS #2 での LUN とデバイス名の対応です。

[root@db12 ~]# ls -l /dev/disk/by-path/ip-* | grep lun-0

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.211:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-0 -> ../../sdc

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.212:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-0 -> ../../sdd

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.213:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-0 -> ../../sde

[root@db12 ~]# ls -l /dev/disk/by-path/ip-* | grep lun-1

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.211:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-1 -> ../../sdf

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.212:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-1 -> ../../sdg

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.213:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-1 -> ../../sdh

[root@db12 ~]# ls -l /dev/disk/by-path/ip-* | grep lun-2

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.211:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-2 -> ../../sdi

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.212:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-2 -> ../../sdj

lrwxrwxrwx. 1 root root 9  3月 25 16:16 /dev/disk/by-path/ip-192.168.51.213:3260-iscsi-iqn.1998-01.com.vmware.52ecb04fd04ccfd2-0385259a575100b2-lun-2 -> ../../sdk

 

このような問題に対処するために、DM Multipath を利用します。

 

ほかにも、共有されたデバイスを識別しやすくするためにラベルを付与する仕組みがあったりします。

たとえば、Oracle RAC(で利用される自動ストレージ管理 / ASM)では ASMLib や ASM Filter Driver(ASMFD)

といったライブラリ / ドライバがあり、それらがラベルづけの機能も持ちます。

たとえば ASMFD では下記のようにラベルを付与でき、ノードをまたいでデバイス識別をしやすくします。

(イメージをお伝えするということで、いろいろ手順は省略しています。)

[root@db11 ~]# asmcmd afd_label DATA1 /dev/mapper/mpatha1 --init

[root@db11 ~]# asmcmd afd_label DATA2 /dev/mapper/mpathb1 --init

[root@db11 ~]# asmcmd afd_label DATA3 /dev/mapper/mpathc1 --init

[root@db11 ~]# asmcmd afd_lslbl '/dev/mapper/mpath*'

--------------------------------------------------------------------------------

Label                     Duplicate  Path

================================================================================

DATA1                                 /dev/mapper/mpatha1

DATA2                                 /dev/mapper/mpathb1

DATA3                                 /dev/mapper/mpathc1

[root@db11 ~]#

 

vSAN の iSCSI Target を利用する場合は、耐障害性 / 可用性を考慮すると

接続先として複数の(ESXi ホストの) IP アドレスを指定することになるはずなのです。

実際に利用するとなると Initiator 側では、マルチパス構成やノードをまたいだデバイス共有に対応する工夫が必要になりそうです。

 

以上、Linux から vSAN の iSCSI Target に接続してみる話でした。

vSphere 環境では、ゲスト OS に VMware Tools をインストールすると

VM のレイヤから、ゲスト OS に付与されている IP アドレスを確認することができます。

PowerCLI> Get-VM db01 | Get-VMGuest | select VM,ToolsVersion,IPAddress | fl

 

VM           : db01

ToolsVersion : 10.1.5

IPAddress    : {192.168.11.171, 192.168.11.170, 192.168.11.173, 192.168.41.171...}

 

 

実は現在の vSphere の機能では、vNIC と IP アドレスの対応も確認できるようになっています。

この VM には vNIC が 2つあり、それぞれ vNIC に複数の IP アドレスが付与されている様子がわかります。

(ちなみにこの VM は Oracle RAC を構成している Linux ゲストで VIP を複数もっています。)

PowerCLI> Get-VM db01 | Get-VMGuest | select -ExpandProperty ExtensionData  | select -ExpandProperty Net

 

Network        : dvpg-vds01-vlan-1011

IpAddress      : {192.168.11.171, 192.168.11.170, 192.168.11.173}

MacAddress     : 00:50:56:8a:fc:d4

Connected      : True

DeviceConfigId : 4000

DnsConfig      :

IpConfig       : VMware.Vim.NetIpConfigInfo

NetBIOSConfig  :

 

Network        : dvpg-vds01-vlan-4001

IpAddress      : {192.168.41.171, 169.254.131.137}

MacAddress     : 00:50:56:8a:89:e3

Connected      : True

DeviceConfigId : 4001

DnsConfig      :

IpConfig       : VMware.Vim.NetIpConfigInfo

NetBIOSConfig  :

 

 

IPv6 のアドレスを付与されている場合も、下記のようにアドレスが認識されています。

(ちなみにこの VM は vSAN Witness Appliance で、本来は vNIC1 / vNIC2 は別セグメントの IP を付与します。)

PowerCLI> Get-VM hv-n43w | Get-VMGuest | select -ExpandProperty ExtensionData  | select -ExpandProperty Net

 

Network        : dvpg-vds01-vlan-0000

IpAddress      : {192.168.1.13, fe80::250:56ff:fe8a:180a, 2400:4030:8c62:5400:250:56ff:fe8a:180a}

MacAddress     : 00:50:56:8a:18:0a

Connected      : True

DeviceConfigId : 4000

DnsConfig      :

IpConfig       : VMware.Vim.NetIpConfigInfo

NetBIOSConfig  :

 

Network        : dvpg-vds01-nested

IpAddress      : {192.168.1.14, fe80::250:56ff:fe8a:79a0, 2400:4030:8c62:5400:250:56ff:fe8a:79a0}

MacAddress     : 00:50:56:8a:79:a0

Connected      : True

DeviceConfigId : 4001

DnsConfig      :

IpConfig       : VMware.Vim.NetIpConfigInfo

NetBIOSConfig  :

 

 

ためしに、下記のようなスクリプトを作成してみました。

get_guest_ip.ps1 · GitHub

 

実行すると、下記のように IP アドレスごとに情報を取得できます。

powercli-vnic-ip-01.png

 

PowerCLI スクリプトなどで工夫することで、

取得する情報を vNIC ごとから IP アドレスごとにしたり・・・・

PowerCLI> .\get_guest_ip.ps1 -VMs hv-n43w

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4000

Mac          : 00:50:56:8a:18:0a

Portgroup    : dvpg-vds01-vlan-0000

Connected    : True

IpAddress    : 192.168.1.13

PrefixLength : 24

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4000

Mac          : 00:50:56:8a:18:0a

Portgroup    : dvpg-vds01-vlan-0000

Connected    : True

IpAddress    : fe80::250:56ff:fe8a:180a

PrefixLength : 64

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4000

Mac          : 00:50:56:8a:18:0a

Portgroup    : dvpg-vds01-vlan-0000

Connected    : True

IpAddress    : 2400:4030:8c62:5400:250:56ff:fe8a:180a

PrefixLength : 64

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4001

Mac          : 00:50:56:8a:79:a0

Portgroup    : dvpg-vds01-nested

Connected    : True

IpAddress    : 192.168.1.14

PrefixLength : 24

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4001

Mac          : 00:50:56:8a:79:a0

Portgroup    : dvpg-vds01-nested

Connected    : True

IpAddress    : fe80::250:56ff:fe8a:79a0

PrefixLength : 64

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4001

Mac          : 00:50:56:8a:79:a0

Portgroup    : dvpg-vds01-nested

Connected    : True

IpAddress    : 2400:4030:8c62:5400:250:56ff:fe8a:79a0

PrefixLength : 64

 

 

IPv4 のアドレスだけを取得したりできるようになります。

PowerCLI> .\get_guest_ip.ps1 -VMs hv-n43w -IPv4Only

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4000

Mac          : 00:50:56:8a:18:0a

Portgroup    : dvpg-vds01-vlan-0000

Connected    : True

IpAddress    : 192.168.1.13

PrefixLength : 24

 

VM           : hv-n43w

PowerState   : PoweredOn

ToolsState   : toolsOk

key          : 4001

Mac          : 00:50:56:8a:79:a0

Portgroup    : dvpg-vds01-nested

Connected    : True

IpAddress    : 192.168.1.14

PrefixLength : 24

 

 

IP アドレスごとにすることで、

下記のように IP アドレス特定を工夫しやすくなるのではないかと思います。

PowerCLI> .\get_guest_ip.ps1 -VMs db01 -IPv4Only | where {$_.key -eq 4001} | where {$_.IpAddress -like "192.168.*"} | select IpAddress

 

IpAddress

---------

192.168.41.171

 

 

たとえば、VM のテンプレート展開で DHCP を使用している場合に

vNICの番号(4000~)や ポートグループ名(Network)をもとに IP アドレスを特定して、

後続処理の自動化で利用したりすることができると思います。

 

ちなみに今回は vSphere 6.5 U1 + PowerCLI 10.0 環境でためしています。

 

以上、PowerCLI で vNIC と IP アドレスの対応を確認してみる話でした。

今回は、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> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostNetworkAdapter -Name vmk3 | Set-VMHostNetworkAdapter -VsanTrafficEnabled:$true -Confirm:$false

 

ESXi ホストのディスク構成を確認しておきます。

ここで、このラボでは各ホストで構成が若干違う(vmhba1:~ と vmhba2:~)ことがわかります。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostDisk | select VMHost,ScsiLun,TotalSectors | sort VMHost,ScsiLun

vsan1808m7-01.png

 

先程とは別の方法で、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

vsan1808m7-02.png

 

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

vsan1808m7-03.png

 

同様に 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」と表示されています。

vsan1808m7-02a.png

 

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 になっています。

vsan1808m7-04.png

 

vSAN Health でも「Storeched cluster」が緑になっています。

ハードウェア互換性に関連するエラーなどがありますが、HoL の仕様上ここでは無視します。

vsan1808m7-05.png

 

vSAN データストアに作成した VM「vm01」は、

データが格納される Component がそれぞれの Fault Domain(Preferred と Secondary)、

Witness が Witness ホストに配置されています。

(今回はデフォルトの仮想マシン ストレージ ポリシーのままです。)

vsan1808m7-06.png

 

vSphere Web Client で簡単に 2 Node vSAN を構成できますが、

PowerCLI を利用すると Fault Domain を手動作成したりするので

より理解を深められるのではないかと思います。

 

2 Node vSAN はリモートオフィス / ブランチオフィスへの配置をユースケースとしているようで

大量展開や省力化のためか自動化のサンプルが多くあります。

VMware Sample Exchange などにもサンプルが多いので、いろいろと挑戦してみたいところです。

vSAN Samples - Samples - VMware {code}

 

以上、PowerCLI で 2 Node vSAN を構成してみる話でした。

vSAN のセットアップには一般的 vSphere Web Client を使用しますが、PowerCLI でも同様の操作ができます。

PowerCLI での vSAN 設定を、 VMware Hands-on Labs(HoL)でためす方法を紹介します。

 

HoL には、vSAN 入門者むけの下記のラボがあります。

 

HOL-1808-01-HCI - vSAN v6.6 - Getting Started

http://labs.hol.vmware.com/HOL/catalogs/lab/3651

 

このラボには PowerCLI を使用するシナリオがあるのですが、

モジュール 1 での vSAN クラスタのセットアップは vSphere Web Client で実施しています。

今回は、その部分を操作を PowerCLI に置き換えてみます。

 

ちなみにラボのシナリオ(マニュアル)は公開されており、下記で確認できます。

 

VMware Hands-on Labs - HOL-1808-01-HCI

http://docs.hol.vmware.com/HOL-2018/Localization/manuals/ja/manualexport-hol-1808-01-hci.zip_html_en/

 

コマンドラインの実行方法について。

コマンドラインは「テキストの送信」を利用すると、HoL に対してコピー&ペーストができるようになります。

(ただし、逆の HoL からのコピーはできません。)

デスクトップにある「VMware PowerCLI」のアイコンから PowerCLI のウインドウを起動しておき、

「送信」をクリックする前に、フォーカスをあてておきます。

vsan-powercli-hol-01.png

 

ちなみに HoL の PowerCLI で実施できる vSAN 関連の操作は、

下記のようなコマンドラインで俯瞰することができます。

PowerCLI> gcm -Module VMware.VimAutomation.Storage | group Noun | select Count,Name,@{N="Verb";E={$_.Group.Verb -join ","}} | sort Name

 

PowerCLI での vSAN クラスタのセットアップをためす。

それでは、vSAN のセットアップをしていきます。

 

まず、vCenter に接続します。

HoL では、パスワードなしでログインできるように構成されています。

PowerCLI> Connect-VIServer vcsa-01a.corp.local

 

今回は、クラスタのオブジェクトを取得して変数「$c」に格納おきます。

HoL へのコピー&ペーストの都合上、短い変数名にしました。

PowerCLI> $c = Get-Cluster RegionA01-COMP01

 

下記のようなコマンドラインで、クラスタの情報を確認できます。

PowerCLI> $c

PowerCLI> $c | select *

PowerCLI> $c | select Name,VsanEnabled

 

クラスタに含まれる ESXi ホストを確認しておきます。

PowerCLI> $c | Get-VMHost | sort Name

 

それでは、vSAN を有効化します。

「-Confirm:$false」でコマンド実行の確認メッセージを抑止しています。

どうしても確認しつつコマンドラインを実行したい場合は、はこのオプションは不要です。

PowerCLI> $c | Set-Cluster -VsanEnabled:$true -Confirm:$false

PowerCLI> $c | Get-VsanClusterConfiguration | Set-VsanClusterConfiguration -SpaceEfficiencyEnabled:$true -AllowReducedRedundancy:$true -Confirm:$false

 

クラスタの vSAN 設定を確認します。

SpaceEfficiencyEnabled では、重複排除と圧縮が有効になっているか確認できます。

設定時の AllowReducedRedundancy は、設定反映時に一時的な冗長性の低下を許容するというオプションなので

ここでのクラスタの設定確認には含めません。

PowerCLI> $c | Get-VsanClusterConfiguration | select Cluster,VsanEnabled,SpaceEfficiencyEnabled

 

VMkernel ポートで vSAN トラフィックが有効化されているか確認しておきます。

PowerCLI> $c | Get-VMHost | Get-VMHostNetworkAdapter -VMKernel -Name vmk3 | select VMHost,Name,IP,VsanTrafficEnabled,PortGroupName | sort VMHost,Name | ft -AutoSize

 

クラスタに含まれるすべてのホストに対して、vSAN のディスク グループを作成します。

ホストに搭載されたディスクは、下記のようなコマンドラインで確認できます。

PowerCLI>  $c | Get-VMHost | Get-VMHostDisk | select VMHost,ScsiLun,TotalSectors | sort VMHost,ScsiLun

 

すべてのホストでハードウェア構成が揃っているので、

SsdCanonicalName と DataDiskCanonicalName  のデバイス名もすべてのホストで揃えられます。

今回はシナリオにあわせて、キャッシュ層として mpx.vmhba1:C0:T1:L0、

キャパシティ層として mpx.vmhba3:C0:T1:L0 と mpx.vmhba4:C0:T1:L0 を追加します。

PowerCLI> $c | Get-VMHost | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T1:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T1:L0,mpx.vmhba4:C0:T1:L0

 

vSAN のディスク グループにディスクが追加されたことを確認します。

PowerCLI> $c | Get-VMHost | %{$hv_name =$_.Name; $_ | Get-VsanDisk | select @{N="VMHost";E={$hv_name}},CanonicalName,IsCacheDisk,VsanDiskGroup} | sort VMHost

 

vSAN データストアの容量は、下記で確認できます。

クラスタの vSAN 設定が更新されているため、以前に取得した $c ではなく

Get-Cluster でクラスタのオブジェクトを取得しなおす必要があります。

PowerCLI> Get-Cluster RegionA01-COMP01 | Get-VsanSpaceUsage | select *

 

これで、モジュール 1 の完了時点と同様の vSAN 環境ができました。

 

このモジュールのシナリオにはありませんが、のこりのディスクで

追加のディスクグループを作成することもできます。

ディスクグループでコントローラを分割したほうがよいとは思いますが、

今回は HoL シナリオの都合上、下記のようにディスクを選択しています。

PowerCLI> $c | Get-VMHost | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T0:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T0:L0,mpx.vmhba4:C0:T0:L0

 

このように、vSphere Web Client での vSAN 操作のほとんどは PowerCLI でも実施できます。

作業を PowerCLI に置き換えることで、設定の効率化やミスの防止などをはかれるかもしれません。

 

また、PowerCLI で vSAN 環境を確認する方法については下記の投稿もどうぞ。

vSAN の情報を PowerCLI 6.5 R1 で見てみる。

 

以上、HoL を利用して PowerCLI による vSAN セットアップをためしてみる話でした。

以前の投稿で PowerCLI を利用して、vSAN 環境の Oracle RAC VM の情報を確認する方法を紹介しました。

PowerCLI で vSphere / vSAN 環境での Oracle RAC むけ VM の構成情報を取得してみる。

 

今回は、その VM を PowerCLI で作成する方法を紹介します。

vCenter 6.5 U1 / ESXi 6.5 U1 の vSAN 環境で、

PowerCLI は、あえて Oracle Linux 7 で使用してみました。

Linux で PowerCLI 10.0 をためしてみる。

 

VM の作成 / クローン。

今回は、db00-template というテンプレートの VM を用意しています。

テンプレート VM には、Oracle Linux 7 がインストールして、

rpm パッケージのアップデートなども済ませておくとよいと思います。

 

テンプレート VM をクローンします。

最初は Get-VM にしていますが、VM を「テンプレート」に変換している場合は Get-Template になります。

DRS を有効化している環境では、ESXi ではなく クラスタ / リソースプールを指定してクローンできます。

  • 今回のクローン先とし指定している リソースプール「rp-lab」は作成ずみです。
  • 仮想マシン フォルダ「vsan-oracle-rac」も作成ずみです。
  • クローン先のデータストアは vSAN データストア「vsanDatastore-01」です。
  • テンプレート VM には OS 領域の VMDK しかないので、Thin プロビジョニングにしています。

PS /home/gowatana> Get-VM db00-template | New-VM -ResourcePool rp-lab -Datastore vsanDatastore-01 -StorageFormat Thin -Location vsan-oracle-rac -Name db01

PS /home/gowatana> Get-VM db00-template | New-VM -ResourcePool rp-lab -Datastore vsanDatastore-01 -StorageFormat Thin -Location vsan-oracle-rac -Name db02

 

作成された VM です。

下記で見られる VM のスペックは、テンプレートの VM から引き継がれています。

PS /home/gowatana> Get-VM db0? | select Name,PowerState,NumCpu,MemoryGB,Version,GuestId,VMHost | Sort-Object Name | ft -AutoSize

 

Name PowerState NumCpu MemoryGB Version GuestId              VMHost

---- ---------- ------ -------- ------- -------              ------

db01 PoweredOff      2        8     v13 oracleLinux7_64Guest hv-i21.go-lab.jp

db02 PoweredOff      2        8     v13 oracleLinux7_64Guest hv-i21.go-lab.jp

 

 

vNIC の追加。

分散ポートグループの作成と、vNIC を追加します。

  • 今回の RAC では、Public(テンプレート VM にすでに作成ずみの vNIC#1)と Private(追加する vNIC#2)の NIC を使用する想定とします。
  • ASM 用のネットワークを分離できますが、今回は Private と兼用にします。
  • 共有ディスクは VMDK ファイルの共有で用意するので、NFS / iSCSI ネットワークも用意しません。
  • Private ネットワークむけに VLAN をわけたポートグループ作成して、vNIC はそこに接続します。
    ちなみに、この環境では分散仮想スイッチ(vDS)を利用しています。

 

まだ、それぞれの VM に vNIC は 1つだけです。

PS /home/gowatana> Get-VM db0? | Get-NetworkAdapter | select Parent,Name,Type,NetworkName,@{N="StartConnected";E={$_.ConnectionState.StartConnected}},@{N="Connected";E={$_.ConnectionState.Connected}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name                 Type NetworkName          StartConnected Connected

------ ----                 ---- -----------          -------------- ---------

db01   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

db02   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

 

 

分散ポートグループを作成します。

PS /home/gowatana> Get-VDSwitch vds01 | New-VDPortgroup -Name dvpg-vds01-vlan-4001 -VlanId 4001

 

vNIC#2 を追加します。

PS /home/gowatana> Get-VM db0? | New-NetworkAdapter -Type Vmxnet3 -Portgroup dvpg-vds01-vlan-4001 -StartConnected:$true 

 

vNIC#2 が追加されました。

PS /home/gowatana> Get-VM db0? | Get-NetworkAdapter | select Parent,Name,Type,NetworkName,@{N="StartConnected";E={$_.ConnectionState.StartConnected}},@{N="Connected";E={$_.ConnectionState.Connected}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name                 Type NetworkName          StartConnected Connected

------ ----                 ---- -----------          -------------- ---------

db01   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

db01   Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True     False

db02   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

db02   Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True     False

 

 

VMDK の追加。(ローカル ディスクむけ)

VM に、ローカル ディスク むけの VMDK を追加します。

これは、ソフトウェアをインストールする領域として利用します。

(いわゆる ORACLE_BASE / ORACLE_HOME / GRID_HOME...)

このディスクは、特にファイルシステムを分ける必要がない場合は不要ですが、

一般的にはファイルシステムを分割するのではないかと思います。

 

VM テンプレートでは VMDK#1 だけの状態でした。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | select Parent,Name,CapacityGB,Filename | Sort-Object Parent,Name

 

Parent Name        CapacityGB Filename

------ ----        ---------- --------

db01   Hard disk 1         16 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01.vmdk

db02   Hard disk 1         16 [vsanDatastore-01] cac6ab5a-1074-611f-a546-b8aeedea7a23/db02.vmdk

 

 

VMDK を追加します。

PS /home/gowatana> Get-VM db0? | New-HardDisk -Datastore vsanDatastore-01 -CapacityGB 40 -StorageFormat Thin

 

VMDK が追加されました。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | select Parent,Name,CapacityGB,Filename | Sort-Object Parent,Name

 

Parent Name        CapacityGB Filename

------ ----        ---------- --------

db01   Hard disk 1         16 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01.vmdk

db01   Hard disk 2         40 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_1.vmdk

db02   Hard disk 1         16 [vsanDatastore-01] cac6ab5a-1074-611f-a546-b8aeedea7a23/db02.vmdk

db02   Hard disk 2         40 [vsanDatastore-01] cac6ab5a-1074-611f-a546-b8aeedea7a23/db02_1.vmdk

 

 

VMDK の追加。(共有ディスクむけ / db01 側)

RAC の共有ディスクとして利用するための VMDK を追加します。

共有ディスクとして利用する VMDK ファイルの作成は、1台の VM(今回は db01)で実施します。

  • 共有ディスクむけの VMDK は、仮想 SCSI コントローラ(vSCSI Controller)を分けておきます。
  • EagerZeroed Thick にしておきます。
  • スナップショットの対象外になるように「-Persistence IndependentPersistent」にしておきます。

 

デフォルトでは、vSCSI Controller は 1つだけのはずです。

PS /home/gowatana> Get-VM db0? | Get-ScsiController | select Parent,Name,Type,BusSharingMode | Sort-Object Parent

 

Parent Name                     Type BusSharingMode

------ ----                     ---- --------------

db01   SCSI controller 0 ParaVirtual      NoSharing

db02   SCSI controller 0 ParaVirtual      NoSharing

 

 

VMDK と vSCSI Controller を追加します。

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent | New-ScsiController -Type ParaVirtual

 

これで、vSCSI Controllr と VMDK が同時に追加されます。

PS /home/gowatana> Get-VM db01 | Get-ScsiController | select Parent,Name,Type,BusSharingMode

 

Parent Name                     Type BusSharingMode

------ ----                     ---- --------------

db01   SCSI controller 0 ParaVirtual      NoSharing

db01   SCSI controller 1 ParaVirtual      NoSharing

 

 

PS /home/gowatana> Get-VM db01 | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity      Storage Policy    Status    Time Of Check

------      --------------    ------    -------------

Hard disk 1 vsan-policy-raid5 compliant 2018/03/16 18:45:07

Hard disk 2 vsan-policy-raid5 compliant 2018/03/16 21:21:45

Hard disk 3                   none

 

 

さらに VMDK を追加する場合は、ここで追加された 「SCSI controller 1」を指定します。

今回は、あと 5つ追加します。

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

 

結果的に、Controller 1001 の VMDK#3~#8 が追加されました。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,CapacityGB,@{N="Controller";E={$_.ExtensionData.ControllerKey}},StorageFormat,@{N="StoragePolicy";E={($_|Get-SpbmEntityConfiguration).StoragePolicy}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name        CapacityGB Controller    StorageFormat StoragePolicy

------ ----        ---------- ----------    ------------- -------------

db01   Hard disk 1         16       1000             Thin vsan-policy-raid5

db01   Hard disk 2         40       1000             Thin vsan-policy-raid5

db01   Hard disk 3         30       1001 EagerZeroedThick

db01   Hard disk 4         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 5         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 6         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 7         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 8         30       1001 EagerZeroedThick vsan-policy-raid5

 

 

VMDK ファイルは、すべて vSAN データストアに格納されています。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,Filename | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name        Filename

------ ----        --------

db01   Hard disk 1 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01.vmdk

db01   Hard disk 2 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_1.vmdk

db01   Hard disk 3 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

db01   Hard disk 4 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

db01   Hard disk 5 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

db01   Hard disk 6 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

db01   Hard disk 7 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

db01   Hard disk 8 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

 

 

仮想マシン ストレージ ポリシーの作成。

RAC の共有ディスクむけに、仮想マシン ストレージ ポリシーを作成します。

  • オブジェクト領域予約を 100% にします。
  • 許容される障害数(FTT)を 1 にします。
  • オブジェクトあたりのディスク ストライプ数は 2 にします。

PS /home/gowatana> $r1 = New-SpbmRule -Capability (Get-SpbmCapability -Name VSAN.proportionalCapacity) -Value 100

PS /home/gowatana> $r2 = New-SpbmRule -Capability (Get-SpbmCapability -Name VSAN.hostFailuresToTolerate) -Value 1

PS /home/gowatana> $r3 = New-SpbmRule -Capability (Get-SpbmCapability -Name VSAN.stripeWidth) -Value 2

PS /home/gowatana> $rs1 = New-SpbmRuleSet -AllOfRules $r1, $r2, $r3

PS /home/gowatana> New-SpbmStoragePolicy -Name vsan-policy-rac-01 -AnyOfRuleSets $rs1

 

ポリシーが作成されました。

PS /home/gowatana> Get-SpbmStoragePolicy -Name "vsan-policy-rac-01" | select -ExpandProperty AnyOfRuleSets | %{$name = $_.Name; $_ | select -ExpandProperty AllOfRules | select @{N="RuleName";E={$Name}},Capability,Value} | ft -AutoSize

 

RuleName   Capability                  Value

--------   ----------                  -----

Rule-Set 1 VSAN.proportionalCapacity     100

Rule-Set 1 VSAN.hostFailuresToTolerate     1

Rule-Set 1 VSAN.stripeWidth                2

 

 

VMDK へのポリシー割り当て。(db01)

共有ディスクむけの VMDK にポリシーを割り当てます。

接続されている vSCSI Controller を識別したほうがよいと思いますが、

今回は Persistence を IndependentPersistent にしている VMDK に対して割り当てます。

(見分けやすいので)

PS /home/gowatana> Get-VM db01 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | Set-SpbmEntityConfiguration -StoragePolicy vsan-policy-rac-01

 

vSCSI Controller 1(Key が 1001)の VMDK のポリシーが変更されました。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,CapacityGB,@{N="Controller";E={$_.ExtensionData.ControllerKey}},StorageFormat,@{N="StoragePolicy";E={($_|Get-SpbmEntityConfiguration).StoragePolicy}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name        CapacityGB Controller    StorageFormat StoragePolicy

------ ----        ---------- ----------    ------------- -------------

db01   Hard disk 1         16       1000             Thin vsan-policy-raid5

db01   Hard disk 2         40       1000             Thin vsan-policy-raid5

db01   Hard disk 3         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 4         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 5         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 6         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 7         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 8         30       1001 EagerZeroedThick vsan-policy-rac-01

 

 

VMDK の追加。(共有ディスクむけ / db02 側)

db02 に、仮想ディスクを接続します。

db01 の下記のディスクが対象になります。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | select Name,Filename

 

Name        Filename

----        --------

Hard disk 3 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

Hard disk 4 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

Hard disk 5 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

Hard disk 6 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

Hard disk 7 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

Hard disk 8 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

 

 

db02 の最初の共有 VMDK を接続するときに、あわせて vSCSI Controller を追加します。

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk" -Persistence IndependentPersistent | New-ScsiController -Type ParaVirtual

 

Type                 BusSharingMode       UnitNumber

----                 --------------       ----------

ParaVirtual          NoSharing                     4

 

 

残りの VMDK も接続します。

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

 

db01、db02 両方に同じパスの VMDK ファイルが接続された状態になりました。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | group Filename | select Count,@{N="VMs";E={($_.Group.Parent | Sort-Object)  -join ","}},Name | ft -AutoSize

 

Count VMs       Name

----- ---       ----

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

 

 

VMDK へのポリシー割り当て。(db02)

db02 では、まだ想定しているポリシーが割り当てられていません。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity      Storage Policy    Status    Time Of Check

------      --------------    ------    -------------

Hard disk 1 vsan-policy-raid5 compliant 2018/03/16 18:45:07

Hard disk 2 vsan-policy-raid5 compliant 2018/03/16 21:21:40

Hard disk 3                   none

Hard disk 4 vsan-policy-raid5 outOfDate 2018/03/17 2:11:59

Hard disk 5 vsan-policy-raid5 outOfDate 2018/03/17 2:12:15

Hard disk 6 vsan-policy-raid5 outOfDate 2018/03/17 2:12:32

Hard disk 7 vsan-policy-raid5 outOfDate 2018/03/17 2:12:48

Hard disk 8 vsan-policy-raid5 outOfDate 2018/03/17 2:13:05

 

 

ポリシーを割り当てます。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | Set-SpbmEntityConfiguration -StoragePolicy vsan-policy-rac-01

 

ポリシーが割り当てれました。少しまつと Compliant になります。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity      Storage Policy     Status    Time Of Check

------      --------------     ------    -------------

Hard disk 1 vsan-policy-raid5  compliant 2018/03/16 18:45:07

Hard disk 2 vsan-policy-raid5  compliant 2018/03/16 21:21:40

Hard disk 3 vsan-policy-rac-01 compliant 2018/03/17 2:26:09

Hard disk 4 vsan-policy-rac-01 compliant 2018/03/17 2:26:16

Hard disk 5 vsan-policy-rac-01 compliant 2018/03/17 2:26:25

Hard disk 6 vsan-policy-rac-01 compliant 2018/03/17 2:26:32

Hard disk 7 vsan-policy-rac-01 compliant 2018/03/17 2:26:39

Hard disk 8 vsan-policy-rac-01 compliant 2018/03/17 2:26:47

 

 

VMDK への multi-writer 設定。(db01 / db02 両方)

コマンドひとつで multi-writer フラグを設定できないようなので、下記のように設定します。

まず Hard disk 3 だけ設定変更します。

PS /home/gowatana> $vm = Get-VM db01

PS /home/gowatana> $disk = $vm | Get-HardDisk -Name "Hard disk 3"

PS /home/gowatana> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

PS /home/gowatana> $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec

PS /home/gowatana> $spec.deviceChange[0].operation = 'edit'

PS /home/gowatana> $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk

PS /home/gowatana> $spec.deviceChange[0].device = $disk.ExtensionData

PS /home/gowatana> $spec.deviceChange[0].device.Backing.Sharing = "sharingMultiWriter"

PS /home/gowatana> $vm.ExtensionData.ReconfigVM($spec)

 

設定されました。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,@{N="Sharing";E={$_.ExtensionData.Backing.Sharing}}

 

Parent Name        Sharing

------ ----        -------

db01   Hard disk 1 sharingNone

db01   Hard disk 2 sharingNone

db01   Hard disk 3 sharingMultiWriter

db01   Hard disk 4 sharingNone

db01   Hard disk 5 sharingNone

db01   Hard disk 6 sharingNone

db01   Hard disk 7 sharingNone

db01   Hard disk 8 sharingNone

 

 

煩雑なので、下記のような PowerShell のファンクションを作成します。

function Set-MultiWriterFlag ($vm_name, $vdisk_name) {

    $vm = Get-VM $vm_name

    $disk = $vm | Get-HardDisk -Name $vdisk_name

    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

    $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec

    $spec.deviceChange[0].operation = 'edit'

    $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk

    $spec.deviceChange[0].device = $disk.ExtensionData

    $spec.deviceChange[0].device.Backing.Sharing = "sharingMultiWriter"

    $vm.ExtensionData.ReconfigVM($spec)

}

 

ひたすら設定します。(db01)

PS /home/gowatana> function Set-MultiWriterFlag ($vm_name, $vdisk_name) {

>>     $vm = Get-VM $vm_name            

>>     $disk = $vm | Get-HardDisk -Name $vdisk_name

>>     $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

>>     $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec

>>     $spec.deviceChange[0].operation = 'edit'

>>     $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk

>>     $spec.deviceChange[0].device = $disk.ExtensionData

>>     $spec.deviceChange[0].device.Backing.Sharing = "sharingMultiWriter"

>>     $vm.ExtensionData.ReconfigVM($spec)

>> }

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 3"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 4"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 5"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 6"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 7"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 8"

 

のこりの db02 も設定します。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | % {Set-MultiWriterFlag $_.Parent.Name $_.Name}

 

設定されました。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | select Parent,Name,@{N="Sharing";E={$_.ExtensionData.Backing.Sharing}} | Sort-Object Parent,Name

 

Parent Name        Sharing

------ ----        -------

db01   Hard disk 1 sharingNone

db01   Hard disk 2 sharingNone

db01   Hard disk 3 sharingMultiWriter

db01   Hard disk 4 sharingMultiWriter

db01   Hard disk 5 sharingMultiWriter

db01   Hard disk 6 sharingMultiWriter

db01   Hard disk 7 sharingMultiWriter

db01   Hard disk 8 sharingMultiWriter

db02   Hard disk 1 sharingNone

db02   Hard disk 2 sharingNone

db02   Hard disk 3 sharingMultiWriter

db02   Hard disk 4 sharingMultiWriter

db02   Hard disk 5 sharingMultiWriter

db02   Hard disk 6 sharingMultiWriter

db02   Hard disk 7 sharingMultiWriter

db02   Hard disk 8 sharingMultiWriter

 

 

DRS ルールの作成。

クラスタで DRS を有効にしているので、DRS ルールも設定しておきます。

アンチ アフィニティ ルールで、db01 と db02 が別の ESXi ホストで稼働するようにします。

 

アンチ アフィニティ ルールを作成します。

PS /home/gowatana> Get-Cluster vsan-cluster-01 | New-DrsRule -KeepTogether:$false -Name drs-anti-affinity-rac-01 -VM db01,db02

 

ルールが作成されました。

PS /home/gowatana> Get-Cluster vsan-cluster-01 | Get-DrsRule -Name drs-anti-affinity-rac-01 | select Cluster,Name,Type,Mandatory,Enabled,@{N="VMs";E={($_.VMIds | %{(Get-VM -Id $_).Name}) -join ","}}

 

 

Cluster   : vsan-cluster-01

Name      : drs-anti-affinity-rac-01

Type      : VMAntiAffinity

Mandatory : False

Enabled   : True

VMs       : db01,db02

 

 

VM の起動。

ここで VM を起動します。

PS /home/gowatana> Get-VM db0? | Start-VM

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

db01                 PoweredOn  2        8.000

db02                 PoweredOn  2        8.000

 

 

Oracle RAC 構築。

Oracle Grid Infrastructure と Oracle Database をインストールして、RAC データベースを作成します。

(ここでは省略)

 

Oracle RAC のゲスト OS からみた VMDK の様子。

vSAN 上の VMDK ファイルによる仮想ディスクは、ゲスト OS から見ると VMFS にある仮想ディスクと同様に

「VMware Virtual disk」と認識されています。

[grid@db01 ~]$ cat /etc/oracle-release

Oracle Linux Server release 7.4

[grid@db01 ~]$ lsscsi

[2:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[2:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[3:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

[4:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sdc

[4:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdd

[4:0:2:0]    disk    VMware   Virtual disk     2.0   /dev/sde

[4:0:3:0]    disk    VMware   Virtual disk     2.0   /dev/sdf

[4:0:4:0]    disk    VMware   Virtual disk     2.0   /dev/sdg

[4:0:5:0]    disk    VMware   Virtual disk     2.0   /dev/sdh

[grid@db01 ~]$

 

共有ディスクとして追加した 30GB のディスクは下記です。

[grid@db01 ~]$ lsblk -l /dev/sd[c-h]

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sdc    8:32   0  30G  0 disk

sdd    8:48   0  30G  0 disk

sde    8:64   0  30G  0 disk

sdf    8:80   0  30G  0 disk

sdg    8:96   0  30G  0 disk

sdh    8:112  0  30G  0 disk

[grid@db01 ~]$

 

Oracle RAC の ASM で利用される Oracle ASM Filter Driver (ASMFD)では、

下記のようなラベルが付与されます。

[grid@db01 ~]$ asmcmd afd_lsdsk --all

node 'db01':

--------------------------------------------------------------------------------

Label                     Filtering   Path

================================================================================

DATA1                       ENABLED   /dev/sdf

DATA2                       ENABLED   /dev/sdg

DATA3                       ENABLED   /dev/sdh

GRID1                       ENABLED   /dev/sdc

GRID2                       ENABLED   /dev/sde

GRID3                       ENABLED   /dev/sdd

node 'db02':

--------------------------------------------------------------------------------

Label                     Filtering   Path

================================================================================

DATA1                       ENABLED   /dev/sdf

DATA2                       ENABLED   /dev/sdg

DATA3                       ENABLED   /dev/sdh

GRID1                       ENABLED   /dev/sdc

GRID2                       ENABLED   /dev/sde

GRID3                       ENABLED   /dev/sdd

[grid@db01 ~]$

 

/dev/sdc、/dev/sdd、/dev/sde で +GRID という ASM Disk Group、

/dev/sdf、/dev/sdg、/dev/sdh で +DATA という ASM Disk Group を構成してあります。

今回の例では微妙な感じになっていますが、/dev/sd? のデバイス名は永続的なものではないので、

Linux OS の再起動で別の名前に変わったりします。

仮想ハードディスクと ゲストOSのデバイス名をうまく対応させるには

最初にディスク認識させたときに識別して ASMFD のラベル付けをする必要があります。

[grid@db01 ~]$ export ORACLE_SID=+ASM1

[grid@db01 ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 12.2.0.1.0 Production on 日 3月 18 03:20:34 2018

 

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

 

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

SQL> set line 120

SQL> col label for a10

SQL> col path for a10

SQL> col DG_NAME for a10

SQL> select dg.NAME as DG_NAME,d.DISK_NUMBER,LABEL,PATH,d.TOTAL_MB from v$asm_disk d,v$asm_diskgroup dg where d.GROUP_NUMBER = dg.GROUP_NUMBER and d.TOTAL_MB > 0;

 

DG_NAME    DISK_NUMBER LABEL      PATH         TOTAL_MB

---------- ----------- ---------- ---------- ----------

GRID                 0 GRID1      AFD:GRID1       30720

GRID                 1 GRID2      AFD:GRID2       30720

GRID                 2 GRID3      AFD:GRID3       30720

DATA                 0 DATA1      AFD:DATA1       30720

DATA                 1 DATA2      AFD:DATA2       30720

DATA                 2 DATA3      AFD:DATA3       30720

 

6 rows selected.

 

SQL>

 

ちなみに、2 ノードでの 12c R2 RAC では下記のようなリソース構成になります。

[grid@db01 ~]$ crsctl stat res -t

--------------------------------------------------------------------------------

Name           Target  State        Server                   State details

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.ASMNET1LSNR_ASM.lsnr

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.DATA.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.GRID.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.LISTENER.lsnr

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.chad

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.net1.network

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.ons

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.proxy_advm

               OFFLINE OFFLINE      db01                     STABLE

               OFFLINE OFFLINE      db02                     STABLE

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.LISTENER_SCAN1.lsnr

      1        ONLINE  ONLINE       db01                     STABLE

ora.MGMTLSNR

      1        ONLINE  ONLINE       db01                     169.254.131.137 192.

                                                             168.41.171,STABLE

ora.asm

      1        ONLINE  ONLINE       db01                     Started,STABLE

      2        ONLINE  ONLINE       db02                     Started,STABLE

      3        OFFLINE OFFLINE                               STABLE

ora.cvu

      1        ONLINE  ONLINE       db01                     STABLE

ora.db01.vip

      1        ONLINE  ONLINE       db01                     STABLE

ora.db02.vip

      1        ONLINE  ONLINE       db02                     STABLE

ora.mgmtdb

      1        ONLINE  ONLINE       db01                     Open,STABLE

ora.orcl.db

      1        ONLINE  ONLINE       db01                     Open,HOME=/u01/app/o

                                                             racle/product/12.2.0

                                                             /dbhome_1,STABLE

      2        ONLINE  ONLINE       db02                     Open,HOME=/u01/app/o

                                                             racle/product/12.2.0

                                                             /dbhome_1,STABLE

ora.qosmserver

      1        ONLINE  ONLINE       db01                     STABLE

ora.scan1.vip

      1        ONLINE  ONLINE       db01                     STABLE

--------------------------------------------------------------------------------

[grid@db01 ~]$

 

このなかで、共有ディスクの ASM Disk Group (+DATA、+GRID)のリソースは下記の部分です。

[grid@db01 ~]$ crsctl stat res -w '(TYPE = ora.diskgroup.type)' -t

--------------------------------------------------------------------------------

Name           Target  State        Server                   State details

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.DATA.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.GRID.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

--------------------------------------------------------------------------------

[grid@db01 ~]$

 

以上、PowerCLI で Oracle RAC むけ VM を設定してみる話でした。

PowerCLI を利用して、Oracle RAC 用に構成した vSphere / vSAN 環境の VM の情報を確認してみます。

 

vSphere / vSAN 環境に Oracle RAC を構築する場合に、いくつか VM に RAC むけの設定をします。

RAC の構築目的によって具体的な設定値は変わりますが、たとえば下記のような設定です。

  • vNICの数や、接続するネットワークを揃える。
  • 仮想ハード ディスク の VMDK ファイルを複数の VM で共有する。
  • VMDK ファイルは EagerZeroed Thick にして「Multi Writer フラグ」を設定する。
    (参考: https://kb.vmware.com/kb/2121181
  • 共有ディスクむけに容量を 100%予約する「仮想マシン ストレージ ポリシー」を作成する。
  • Oracle RAC のクラスタに参加している VM 同士を DRS のアンチ アフィニティ ルールで分割配置する。

など・・・

 

VM の設定項目が多いため、私のラボでは何か忘れていないか気づきやすいように

PowerCLI を利用して設定確認しています。

 

下記のようなスクリプトを作成しています。

get_rac-vm_info.ps1 · GitHub

  • ファイルは UTF-8(with BOM)で保存すると無難かなとおもいます。
  • 実行するときは、PowerShell / PowerCLI のウィンドウ幅を 100 くらいにしておくとよいです。

 

今回は、Windows で PowerCLI 10.0 を利用しています。

PowerCLI> Get-Module VMware.* | select Version,Name | Sort-Object

 

Version        Name

-------        ----

10.0.0.7893910 VMware.VimAutomation.Sdk

10.0.0.7894167 VMware.VimAutomation.Storage

10.0.0.7893909 VMware.VimAutomation.Core

10.0.0.7893915 VMware.VimAutomation.Cis.Core

10.0.0.7893906 VMware.VimAutomation.Common

 

 

PowerCLI>

 

スクリプトの実行前に、vCenter に接続しておきます。

PowerCLI> Connect-VIServer vc-sv01.go-lab.jp -Force | Out-Null

 

私のラボの RAC (db01 / db02 で 2ノード構成)で情報取得してみると、下記のようになっています。

vmx-13 の仮想マシンなので、OSTyep は「Oracle Linux 7 (64-bit)」にしています。

ESXi 6.5 での Guest OS の細分化について。(Oracle Linux 7 など)

PowerCLI> .\get_rac-vm_info.ps1 db01,db02

==========================================================================================

vCPU / vRAM

 

VM   PowerState NumCpu MemoryGB HwVersion OSType

--   ---------- ------ -------- --------- ------

db01  PoweredOn      2        8 vmx-13    Oracle Linux 7 (64-bit)

db02  PoweredOn      2        8 vmx-13    Oracle Linux 7 (64-bit)

 

==========================================================================================

Cluster

 

Cluster     : vsan-cluster-01

VsanEnabled : True

HAEnabled   : True

DrsEnabled  : True

EVCMode     : intel-haswell

 

==========================================================================================

Host

 

VM   Cluster         ESXi

--   -------         ----

db01 vsan-cluster-01 hv-i22.go-lab.jp

db02 vsan-cluster-01 hv-i21.go-lab.jp

 

==========================================================================================

vNIC

 

VM   Name                 Type NetworkName          StartConnected Connected

--   ----                 ---- -----------          -------------- ---------

db01 Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True      True

db01 Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True      True

db02 Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True      True

db02 Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True      True

 

==========================================================================================

vSCSI Controller

 

VM   Name                     Type BusSharingMode UnitNumber ControllerKey

--   ----                     ---- -------------- ---------- -------------

db01 SCSI controller 0 ParaVirtual      NoSharing          3          1000

db01 SCSI controller 1 ParaVirtual      NoSharing          4          1001

db02 SCSI controller 0 ParaVirtual      NoSharing          3          1000

db02 SCSI controller 1 ParaVirtual      NoSharing          4          1001

 

==========================================================================================

vDisk

 

VM   Name        Controller GB    StorageFormat           Persistence Sharing

--   ----        ---------- --    -------------           ----------- -------

db01 Hard disk 1       1000 16             Thin            Persistent sharingNone

db01 Hard disk 2       1000 40             Thin            Persistent sharingNone

db01 Hard disk 3       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 4       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 5       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 6       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 7       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 8       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 1       1000 16             Thin            Persistent sharingNone

db02 Hard disk 2       1000 40             Thin            Persistent sharingNone

db02 Hard disk 3       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 4       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 5       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 6       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 7       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 8       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

 

==========================================================================================

Share vDisk

 

vDisk : Hard disk 3

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 4

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 5

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 6

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 7

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 8

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

VMs   : 2

VM    : db01,db02

 

==========================================================================================

VM Storage Policy

 

VM   vDisk       StoragePolicy      ComplianceStatus

--   -----       -------------      ----------------

db01 Hard disk 1 vsan-policy-raid5         compliant

db01 Hard disk 2 vsan-policy-raid5         compliant

db01 Hard disk 3 vsan-policy-rac-01        compliant

db01 Hard disk 4 vsan-policy-rac-01        compliant

db01 Hard disk 5 vsan-policy-rac-01        compliant

db01 Hard disk 6 vsan-policy-rac-01        compliant

db01 Hard disk 7 vsan-policy-rac-01        compliant

db01 Hard disk 8 vsan-policy-rac-01        compliant

db02 Hard disk 1 vsan-policy-raid5         compliant

db02 Hard disk 2 vsan-policy-raid5         compliant

db02 Hard disk 3 vsan-policy-rac-01        compliant

db02 Hard disk 4 vsan-policy-rac-01        compliant

db02 Hard disk 5 vsan-policy-rac-01        compliant

db02 Hard disk 6 vsan-policy-rac-01        compliant

db02 Hard disk 7 vsan-policy-rac-01        compliant

db02 Hard disk 8 vsan-policy-rac-01        compliant

 

==========================================================================================

Storage Policy Setting

 

StoragePolicy      Capability                                                 Value

-------------      ----------                                                 -----

vsan-policy-rac-01 VSAN.proportionalCapacity                                    100

vsan-policy-rac-01 VSAN.hostFailuresToTolerate                                    1

vsan-policy-rac-01 VSAN.stripeWidth                                               2

vsan-policy-raid5  VSAN.replicaPreference      RAID-5/6 (Erasure Coding) - Capacity

vsan-policy-raid5  VSAN.proportionalCapacity                                      0

 

==========================================================================================

DRS Affinity Rule

 

Cluster   : vsan-cluster-01

Name      : drs-anti-affinity-rac-01

Type      : VMAntiAffinity

Mandatory : False

Enabled   : True

VMs       : db01,db02

 

PowerCLI>

 

vSAN 環境に RAC を構築した場合でも VM の構成は VMFS データストアの場合とあまり変わりませんが、

VMDK は EagerZeroed Thick にして、さらに「仮想マシン ストレージ ポリシー」で

オブジェクトの容量予約を 100% にしておきます。

 

Oracle RAC では(ゲスト)OS の iSCSI Initiator から

直接接続した iSCSI デバイスを共有ディスクとして利用することもできます。

一方、vSAN に iSCSI Target を提供する機能がありますが、

現時点(2018年3月)では物理マシンでの RAC のみを対象としているようです。

そして vSAN では RDM には対応しないので

ゲスト OS で RAC を構築するときには VMDK 共有をすることになるはずです。

 

下記の KB に制限が記載されていました。

 

vSAN 6.5 iSCSI デバイスを使用するためのベスト プラクティス (2151966)

https://kb.vmware.com/kb/2151966

制限

  • 現在、Microsoft クラスタの実装ではサポートされていません。
  • 現在、他の vSphere ホストのターゲットとしての使用はサポートされていません。
  • 現在、サードパーティのハイパーバイザーでの使用はサポートされていません。
  • 現在、仮想マシンでの使用はサポートされていません。

 

また、VMware から vSAN + Oracle RAC についてのドキュメントも公開されているので、

本番環境(デモ/開発むけのラボ環境ではなく)での構築となる場合には確認しておくとよいと思います。

 

Oracle Real Application Clusters on VMware vSAN

https://storagehub.vmware.com/t/vmware-vsan/oracle-real-application-clusters-on-vmware-virtual-san/

 

以上、PowerCLI を利用した Oracle RAC VM の情報取得例でした。

前回、HCIBench の設定を Ansible で自動化してみる話を投稿しました。

HCIBench の設定を Ansible で自動化してみる。

 

今回は、設定後のテスト実行にコマンドライン / Ansible を利用してみます。

 

HCIBench のコマンドラインでのテスト実行。

HCIBench をコマンドラインで実行する方法については、

下記のブログで紹介されています。

Use HCIBench Like a Pro – Part 2 - Virtual Blocks

 

まず、HCIBench の Photon OS に SSH でログインします。

HCIBench の仮想アプライアンスは「hci-bench02.go-lab.jp」というアドレスで用意しています。

[gowatana@client01 ~]$ ssh -l root hci-bench02.go-lab.jp

############################################

#                                          #

#        Welcome to HCIBench 1.6.6         #

#                                          #

############################################

root@photon-HCIBench [ ~ ]#

 

今回は、HCIBench で使用する設定ファイルは配置ずみです。

root@photon-HCIBench [ ~ ]# cat /opt/automation/conf/perf-conf.yaml

vc: 'vc-sv01.go-lab.jp'

vc_username: 'hci-bench-connect'

vc_password: 'パスワード'

datacenter_name: 'dc01'

cluster_name: 'vsan-cluster-01'

network_name: 'dvpg-vds01-vlan-1012'

static_enabled: false

reuse_vm: false

datastore_name:

- 'vsanDatastore-01'

deploy_on_hosts: false

hosts:

host_username:

host_password:

vm_prefix: 'vdbench'

easy_run: false

clear_cache: false

number_vm: 2

number_data_disk: 2

size_data_disk: 1

self_defined_param_file_path: '/opt/tmp/tmp20180315144339'

output_path: 'TEST_vsan-cluster-01_case-101'

warm_up_disk_before_testing: 'NONE'

testing_duration:

cleanup_vm: false

root@photon-HCIBench [ ~ ]# file /opt/automation/vdbench-param-files/*

/opt/automation/vdbench-param-files/vdb-case-101: ASCII text

root@photon-HCIBench [ ~ ]#

 

Web UI にある「Varidate」ボタンにかわるスクリプトの実行してみます。

ちなみに出力結果をみると、テスト対象が 6 ノード vSAN クラスタだということもわかります。

※ここでのタイムスタンプは JST ではないので読みかえることになります。

root@photon-HCIBench [ ~ ]# /opt/automation/pre-validate-config.sh

2018-03-15 15:01:07 -0700: Validating VC IP and Crendetial...

2018-03-15 15:01:10 -0700: VC IP and Credential Validated

2018-03-15 15:01:10 -0700: Validating Datacenter dc01...

2018-03-15 15:01:11 -0700: Datacenter dc01 Validated

2018-03-15 15:01:11 -0700: Validating Cluster vsan-cluster-01...

2018-03-15 15:01:12 -0700: Cluster vsan-cluster-01 Validated

2018-03-15 15:01:12 -0700: Cluster vsan-cluster-01 has DRS mode: fullyAutomated

2018-03-15 15:01:12 -0700: Validating If Hosts in Cluster vsan-cluster-01 Could be Connected...

2018-03-15 15:01:25 -0700: All Hosts could be Connected

2018-03-15 15:01:25 -0700: Validating If Any Hosts in Cluster vsan-cluster-01 is in Maintainance Mode...

2018-03-15 15:01:26 -0700: All the Hosts in Cluster vsan-cluster-01 are not in Maitainance Mode

2018-03-15 15:01:26 -0700: Validating Network dvpg-vds01-vlan-1012...

2018-03-15 15:01:28 -0700: Network dvpg-vds01-vlan-1012 Validated

2018-03-15 15:01:28 -0700: Checking If Network dvpg-vds01-vlan-1012 is accessible from all the hosts of vsan-cluster-01...

2018-03-15 15:01:29 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i22.go-lab.jp

2018-03-15 15:01:30 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i25.go-lab.jp

2018-03-15 15:01:31 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i21.go-lab.jp

2018-03-15 15:01:31 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i24.go-lab.jp

2018-03-15 15:01:32 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i26.go-lab.jp

2018-03-15 15:01:33 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i23.go-lab.jp

2018-03-15 15:01:33 -0700: Network dvpg-vds01-vlan-1012 is accessible from all the hosts of vsan-cluster-01

2018-03-15 15:01:33 -0700: Validating Type of Network dvpg-vds01-vlan-1012...

2018-03-15 15:01:34 -0700: Network dvpg-vds01-vlan-1012 Type is DistributedVirtualPortgroup

2018-03-15 15:01:34 -0700: Validating cluster inter-connectivity...

2018-03-15 15:03:20 -0700: Cluster inter-connectivity validated

2018-03-15 15:03:23 -0700: Validating Datastore vsanDatastore-01...

2018-03-15 15:03:24 -0700: Datastore vsanDatastore-01 Validated

2018-03-15 15:03:24 -0700: Checking Datastore vsanDatastore-01 type...

2018-03-15 15:03:24 -0700: Datastore vsanDatastore-01 type is vsan

2018-03-15 15:03:24 -0700: Checking If Datastore vsanDatastore-01 is accessible from all the hosts of vsan-cluster-01...

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i22.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i25.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i21.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i24.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i26.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i23.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from all the hosts of vsan-cluster-01

2018-03-15 15:03:25 -0700: Validating If VSAN Enabled in Cluster vsan-cluster-01...

2018-03-15 15:03:30 -0700: VSAN is Enabled in Cluster vsan-cluster-01, the VSAN Datastore name is vsanDatastore-01, capacity is 5589 GB and freespace is 4238 GB, the default policy is vsan-policy-raid5

2018-03-15 15:03:31 -0700: Deploy on hosts: False. Skip validating hosts...

2018-03-15 15:03:31 -0700: Validating Vdbench binary and the workload profiles...

------------------------------------------------------------------------------

2018-03-15 15:03:32 -0700: All the config has been validated, please go ahead to kick off testing

------------------------------------------------------------------------------

Caution:

You have 2 VM Have the Same Prefix as vdbench, Please Make Sure the VMs are OK to be Deleted Otherwise Please Change the VM Name Prefix.

------------------------------------------------------------------------------

root@photon-HCIBench [ ~ ]#

 

ちょうどテスト VM がすでにあるという注意メッセージがあるので、

VM のクリーンアップをしてみます。

root@photon-HCIBench [ ~ ]# /opt/automation/cleanup-vm.sh

Starting Cleaning VDBench Guest VMs...

VDBench Guest VMs Deleted

root@photon-HCIBench [ ~ ]#

 

ベンチマーク テストを実行します。

コマンドラインを実行すると、プロンプトがすくに戻されます。

root@photon-HCIBench [ ~ ]# /opt/automation/start-testing.sh

root@photon-HCIBench [ ~ ]#

 

実行の様子は、下記のようにログファイルから確認できます。

root@photon-HCIBench [ ~ ]# tail -f /opt/automation/logs/test-status.log

Deployment Started.

Verifying If VMs are Accessible

Deployment Successfully Finished.

I/O Test Started.

Started Testing vdb-case-101

Done Testing vdb-case-101

I/O Test Finished.

Testing Finished

 

テストが終了すると、下記のようなログファイルが出力されています。

root@photon-HCIBench [ ~ ]# ls -ltr /opt/automation/logs/

total 44

drwxrwxr-x 2 root root  4096 Mar 15 15:01 prevalidation

-rw-rw-r-- 1 root root   390 Mar 15 15:20 vm-cleanup.log

-rw-rw-r-- 1 root root 16321 Mar 15 15:24 vc-vc-sv01.go-lab.jp-vs-vm-deploy-0.log

-rw-rw-r-- 1 root root   696 Mar 15 15:24 deploy.log

-rw-rw-r-- 1 root root  6379 Mar 15 15:31 io-test-vdb-case-101.log

-rw-rw-r-- 1 root root  1184 Mar 15 15:31 vdbench-testing.log

-rw-rw-r-- 1 root root   195 Mar 15 15:31 test-status.log

root@photon-HCIBench [ /opt/automation/logs ]#

 

テストの進行は Web ブラウザからでも確認できます。

URL は下記のようになっています。

http://  HCIBench のアドレス /hcibench_logs/test-status.log

hci-bench-start-testing-01.png

 

「Testing Finished」があると、ベンチマークが終了しています。

通常の Web UI からの実行時と同様に、レポートが生成されています。

hci-bench-start-testing-02.png

 

レポートは、下記のようにまとめて採取することもできます。

[gowatana@client01 work]$ scp -pr root@hci-bench02.go-lab.jp:/opt/output/results/TEST_vsan-cluster-01_case-101 .

[gowatana@client01 work]$ ls TEST_vsan-cluster-01_case-101/

vdb-case-101-1521152685  vdb-case-101-1521152685-res.txt

 

HCIBench の Ansible でのテスト実行。

Ansible でテストを実行する場合は、shell モジュールなどが利用できます。

ここでは、例として Ansible の Playbook に記載したコマンド ラインを実行してみます。

 

まず、HCIBench の ホスト(ホスト名か、アドレスか)を記載した

Ansible のインベントリファイルを用意しておきます。

[gowatana@client01 hci-bench-config]$ cat hosts

hci-bench01.go-lab.jp

 

そして、下記のような YAML ファイルを用意しています。

Playbook の内容はただ 1行のコマンドラインを実行するだけなので

これだけだと Ansible を利用する意義はありません。

しかし、すでに Ansible を活用していたり、HCIBench の設定にも Ansible を利用するような場合は

環境の構成管理からベンチマーク テストの実行までツールを一貫させることができると思います。

[gowatana@client01 hci-bench-config]$ cat start-testing.yml

---

- name: HCI Bench start testing

  hosts: all

  remote_user: root

 

  tasks:

  - name: start testing

    shell: /opt/automation/start-testing.sh

 

 

ansible-playbook コマンドを実行します。

[gowatana@client01 hci-bench-config]$ ansible-playbook -i hosts start-testing.yml

 

PLAY [HCI Bench start testing] *************************************************

 

TASK [Gathering Facts] *********************************************************

ok: [hci-bench01.go-lab.jp]

 

TASK [start testing] ***********************************************************

changed: [hci-bench01.go-lab.jp]

 

PLAY RECAP *********************************************************************

hci-bench01.go-lab.jp      : ok=2    changed=1    unreachable=0    failed=0

 

[gowatana@client01 hci-bench-config]$

 

今回の Playbook にはテストの進行確認は含めていないため、curl で確認してしまいます。

[gowatana@client01 hci-bench-config]$ curl -s http://hci-bench01.go-lab.jp/hcibench_logs/test-status.log

Deployment Started.

 

ベンチマークテストの進行状況はログ出力され・・・

[gowatana@client01 hci-bench-config]$ curl -s http://hci-bench01.go-lab.jp/hcibench_logs/test-status.log

Deployment Started.

Verifying If VMs are Accessible

Deployment Successfully Finished.

I/O Test Started.

 

「Testing Finished」が出力されれば終了です。

[gowatana@client01 hci-bench-config]$ curl -s http://hci-bench01.go-lab.jp/hcibench_logs/test-status.log

Deployment Started.

Verifying If VMs are Accessible

Deployment Successfully Finished.

I/O Test Started.

I/O Test Finished.

Testing Finished

 

HCIBench 自体は vSAN に限らず、vSphere(vCenter / ESXi)環境であれば利用できるので、

できるだけベンチマーク 環境を自動化しておくと便利ではないかなと思います。

また、このような仕組みを利用すれば、構築作業後の確認や

他のベンチマークツールとの連携などにも利用できそうかなと思います。

 

これまでの HCIBench 利用の工夫については、下記もどうぞ。

HCIBench の OVA を PowerCLI でデプロイする。

HCIBench の設定を Ansible で自動化してみる。

 

以上、HCIBench のベンチマーク テストの実行を工夫してみる話でした。

最近 PowerCLI 10.0 が公開されましたが、とうとう vmware/powerclicore の

Docker コンテナもイメージもアップデートされました。

PowerCLI Docker Image Updated - VMware PowerCLI Blog - VMware Blogs

 

PowerCLI 10.0 は Linux / macOS もサポートされるようになり、

少し前に Linux で実行してみた投稿をしてみましたが・・・

Linux で PowerCLI 10.0 をためしてみる。

 

今回は macOS で PowerCLI 10.0 の Docker コンテナを起動してみます。

 

実行環境。

普段あまり使っていない MacBook なのでバージョンは若干古いかもしれません。

 

macOS です。

gomac:~ gowatana$ sw_vers

ProductName: Mac OS X

ProductVersion: 10.13.2

BuildVersion: 17C205

 

Docker です。

gomac:~ gowatana$ docker version

Client:

Version:      17.09.1-ce

API version:  1.32

Go version:   go1.8.3

Git commit:   19e2cf6

Built:        Thu Dec  7 22:22:25 2017

OS/Arch:      darwin/amd64

 

Server:

Version:      17.09.1-ce

API version:  1.32 (minimum version 1.12)

Go version:   go1.8.3

Git commit:   19e2cf6

Built:        Thu Dec  7 22:28:28 2017

OS/Arch:      linux/amd64

Experimental: false

 

コンテナの起動。

コンテナのイメージは、vmware/powerclicore です。

https://hub.docker.com/r/vmware/powerclicore/

 

イメージを pull します。タグは特に指定せず latest です。

gomac:~ gowatana$ docker image pull vmware/powerclicore

Using default tag: latest

latest: Pulling from vmware/powerclicore

e9b1ffebdf09: Pull complete

1ca0671214e4: Pull complete

e2054d0e7b6e: Pull complete

9e5896375981: Pull complete

4fda4ed0aa8e: Pull complete

ae595f021807: Pull complete

2223c2963494: Pull complete

c0625c88535b: Pull complete

Digest: sha256:4c19d7f6e5b460cdcea403977f1e8491f5c28c81a60e84dddf9d65921ba3ac51

Status: Downloaded newer image for vmware/powerclicore:latest

 

コンテナを起動します。

事情により --dns でコンテナが参照する DNS サーバのアドレスを指定しています。

( macOS で利用している DHCP と自宅ラボの DNS サーバのアドレスがあっていないので・・・)

gomac:~ gowatana$ docker container run -it --rm --dns=192.168.1.254 vmware/powerclicore

PowerShell v6.0.1

Copyright (c) Microsoft Corporation. All rights reserved.

 

https://aka.ms/pscore6-docs

Type 'help' to get help.

 

PS /root>

 

コンテナは、Photon OS 2.0 をベースにされています。

PS /root> cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

 

自宅ラボの vCenter は証明書を入れ替えていないので、

証明書エラーを無視してしまいます。

PS /root> Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore -Confirm:$false

 

PowerShell モジュールの様子です。

Cmds 列は、それぞれのモジュールに含まれるコマンド数のはずです。

PS /root> Get-Module -ListAvailable | select @{N="Cmds";E={$_.ExportedCommands.Count}},Version,Name | Sort-Object Name

 

Cmds Version        Name

---- -------        ----

   1 0.0            apply-hardening

   3 0.0            Backup-VCSA

   9 0.0            ContentLibrary

   6 0.0            DatastoreFunctions

   1 0.0            Get-NewAndRemovedVMs

   1 0.0            Get-NICDetails

   1 0.0            Get-VMmaxIOPS

   1 0.0            Konfig-ESXi

   2 3.0.0.0        Microsoft.PowerShell.Host

  43 3.1.0.0        Microsoft.PowerShell.Management

   6 3.0.0.0        Microsoft.PowerShell.Security

103 3.1.0.0        Microsoft.PowerShell.Utility

   8 1.0.0.0        NSXT

  13 1.1.7.0        PackageManagement

300 3.0.1091       PowerNSX

  29 1.6.0          PowerShellGet

119 3.1.1          PowervRA

   7 0.0            ProactiveHA

  71 0.0            PSDesiredStateConfiguration

   6 1.2            PSReadLine

   1 0.0            PSvLIMessage

   1 0.0            Recommend-Sizing

   1 0.0            Set-CBT

   1 0.0            Start-UNMAP

  16 0.0            VAMI

   5 0.0            vCenter.Alarms

  10 0.0            vCenterManualMigration

   5 0.0            VCHA

  11 1.0            Vi-Module

   2 0.0            VMCPFunctions

   3 1.0.0.0        VMFSIncrease

  11 0.0            VMToolsManagement

   5 1.0.0          VMware-vCD-Module

   3 1.0.2          VMware-vCD-TenantReport

  27 6.5.2.7812840  VMware.DeployAutomation

  15 1.0.0.0        VMware.Hosted

  12 6.5.2.7812840  VMware.ImageBuilder

   0 10.0.0.7895300 VMware.PowerCLI

   3 10.0.0.7893915 VMware.VimAutomation.Cis.Core

106 10.0.0.7893901 VMware.VimAutomation.Cloud

   0 10.0.0.7893906 VMware.VimAutomation.Common

302 10.0.0.7893909 VMware.VimAutomation.Core

   1 6.5.4.7567193  VMware.VimAutomation.HA

   2 7.1.0.7547311  VMware.VimAutomation.HorizonView

   1 10.0.0.7893904 VMware.VimAutomation.License

   3 10.0.0.7893913 VMware.VimAutomation.Nsxt

   4 10.0.0.7893924 VMware.VimAutomation.PCloud

   2 10.0.0.7893910 VMware.VimAutomation.Sdk

   2 10.0.0.7893900 VMware.VimAutomation.Srm

  92 10.0.0.7894167 VMware.VimAutomation.Storage

   1 1.2.0.0        VMware.VimAutomation.StorageUtility

  32 10.0.0.7893903 VMware.VimAutomation.Vds

   5 10.0.0.7893902 VMware.VimAutomation.Vmc

  12 10.0.0.7893921 VMware.VimAutomation.vROps

  16 1.2.0          VMware.VMC

  19 1.0            VMware.VMEncryption

  19 6.5.1.7862888  VMware.VumAutomation

   3 0.0            vSphere_Hardening_Assess_VM_v1a

 

PS /root>

 

Dockerfile を見ると、PowerNSX と PowervRA もインストールされていることがわかります。

そして、vSAN むけのモジュールも PowerCLI に含まれています。

powerclicore/Dockerfile at master · vmware/powerclicore · GitHub

 

vCenter / NSX Manger に接続してみる。

それでは vCenter「vc-sv01.go-lab.jp」に接続します。

すでに InvalidCertificateAction の設定をしているので、エラーが抑止されています。

PS /root> Connect-VIServer vc-sv01.go-lab.jp

Specify Credential

Please specify server credential

User: gowatana

Password for user gowatana: **********

 

 

Name                           Port  User     

----                           ----  ----

vc-sv01.go-lab.jp              443   GO-LAB\gowatana

 

 

PS /root>

 

下記のように vSAN むけのコマンドも実行できます。

PS /root> Get-VsanClusterConfiguration | Sort-Object Cluster

 

 

Cluster              VsanEnabled  IsStretchedCluster   Last HCL Updated

-------              -----------  ------------------   ----------------

ha-cluster-01        False        False

ha-cluster-02        False        False

vsan-cluster-01      True         False                01/28/2018 12:01:23

vsan-cluster-02      True         False                01/28/2018 12:01:23

vsan-cluster-03      True         True                 01/28/2018 12:01:23

work-cluster-01      False        False

 

PS /root>

 

PowerNSX も含まれています。

NSX Manager に接続してみました。

PS /root> Connect-NsxServer -vCenterServer vc-sv01.go-lab.jp

 

PowerShell credential request

vCenter Server SSO Credentials

User: gowatana

Password for user gowatana: **********

 

Using existing PowerCLI connection to 192.168.1.95

 

 

Version             : 6.4.0

BuildNumber         : 7564187

Credential          : System.Management.Automation.PSCredential

Server              : 192.168.1.140

Port                : 443

Protocol            : https

UriPrefix           :

ValidateCertificate : False

VIConnection        : vc-sv01.go-lab.jp

DebugLogging        : False

DebugLogfile        : \PowerNSXLog-gowatana@-2018_03_15_11_10_47.log

 

 

PS /root>

 

macOS 自体に PowerShell / PowerCLI 10.0 をインストールすることも可能になりましたが、

Docker コンテナであれば PowerShell モジュールのインストールよりも、さらに手軽に実行できるはずです。

また、多くの PowerShell モジュールがインストールされてカオス環境になることを避けたり、

将来的に複数の PowerCLI バージョンをきれいに使い分けたり、といった使い方ができそうです。

 

以上、PowerCLI 10.0 の Docker コンテナを起動してみる話でした。

HCIBench の利用方法を模索しているなかで Ansible による設定自動化をこころみたので

アイデアを残しておこうと思います。

 

HCIBench は、仮想アプライアンスをデプロイしたあとに、Web UI からテスト対象の設定をしたり

内部で利用している vdbench のパラメータファイルを用意したりする必要があります。

 

HCIBench のデプロイについては

以前に PowerCLI で OVA をデプロイするアイデアを投稿したのでこちらもどうぞ。

HCIBench の OVA を PowerCLI でデプロイする。

 

デプロイ後の設定は、設定ファイルを直接編集することができます。

HCIBench の仮想アプライアンスの Photon OS にログインすると、

下記のようなファイルが配置されています。

  • 設定内容は適当なので、ここでは雰囲気をお伝えできればと・・・
  • 一度 Web UI で設定を完了すると、よい perf-conf.yaml のテンプレートが取得できると思います。

root@photon-HCIBench [ ~ ]# cat /opt/automation/conf/perf-conf.yaml

vc: 'vc-sv01.go-lab.jp'

vc_username: 'hci-bench-connect'

vc_password: 'パスワード'

datacenter_name: 'dc01'

cluster_name: 'vsan-cluster-01'

network_name: 'dvpg-vds01-vlan-1012'

static_enabled: true

reuse_vm: false

datastore_name:

- 'vsanDatastore-01'

deploy_on_hosts: false

hosts:

host_username:

host_password:

easy_run: false

clear_cache: false

number_vm: 2

number_data_disk: 2

size_data_disk: 10

self_defined_param_file_path: '/opt/tmp/tmp20180210190537'

output_path: 'Test_vsanDatastore-01_take01'

warm_up_disk_before_testing: 'NONE'

testing_duration:

cleanup_vm: false

 

このファイルの設定などを、Ansible に置き換えてみます。

 

Ansible 実行環境の準備。

私の自宅ラボでは、Linux に Ansible の環境を用意しています。

[gowatana@client01 ~]$ cat /etc/oracle-release

Oracle Linux Server release 7.4

[gowatana@client01 ~]$ ansible --version

ansible 2.3.1.0

  config file = /home/gowatana/.ansible.cfg

  configured module search path = Default w/o overrides

  python version = 2.7.5 (default, May 29 2017, 20:42:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

 

Ansible の Playbook の管理には、Git(GitHub の)を利用しています。

実際に利用しているものは荒れているので非公開にしていますが、下記のような感じのものです。

GitHub - gowatana/hci-bench-config-sample

 

ある程度の環境設定(vCenter の接続情報など)をもったブランチ(ここでは master を利用)

を用意して、テストごとにそこからさらにブランチを作成して利用しています。

[gowatana@client01 hci-bench-config]$ git branch

  ha-cluster-03-nvme

  ha-cluster-03-ssd

  ha-cluster-04-ssd-02

* master

  vsan-cluster-01

  vsan-cluster-02

  vsan-cluster-03_case-002

 

Ansaible で利用する Playbook やソフトウェアは、下記のように配置しています。

  • files/vdbench-param-files ディレクトリ配下に、vdbench のパラメータファイルを作成して配置します。
  • files/conf/perf-conf.yaml.j2 が、HCIBench の perf-conf.yaml のテンプレートになります。
  • oracle/ ディレクトリ配下には、vdbench のバイナリ(vdbench~.zip)を ORACLE のサイトからダウンロードして配置します。
    ORACLE の vdbench のバイナリも Playbook で配布しますが、Git のリポジトリからは除外しています。
    (ライセンスの都合上)
  • vars/vsphere.yml には、vCenter への接続情報などを記載しています。
    今回は HCIBench むけに hci-bench-connect というユーザを用意しています。
  • vCenter 接続用のパスワードは別に、vars/vault/pass_hci-bench-connect.yml に記載しています。
  • これらの変更したら、ディレクトリ直下にある setup.yml を編集します。
    この YAML ファイルを ansible-playbook コマンドで指定します。

[gowatana@client01 hci-bench-config-sample]$ LANG=C tree

.

|-- README.md

|-- files

|   |-- conf

|   |   `-- perf-conf.yaml.j2

|   `-- vdbench-param-files

|       |-- vdb-case-101

|       `-- vdb-case-102

|-- hosts

|-- oracle

|   |-- README

|   `-- vdbench50406.zip

|-- setup.yml

`-- vars

    |-- vault

    |   |-- README.md

    |   `-- pass_hci-bench-connect.yml

    `-- vsphere.yml

 

6 directories, 11 files

 

vars/vsphere.yml の内容は下記だけです。

[gowatana@client01 hci-bench-config-sample]$ cat vars/vsphere.yml

---

 

vc_address:    vc-sv01.go-lab.jp

vc_user:       hci-bench-connect

 

 

vCenter 接続用のパスワードの管理には、下記のように Ansible Vault を使用しています。

ふぃあるを編集する場合は、view ではなく「ansible-vault edit ~」といったコマンドラインになります。

[gowatana@client01 hci-bench-config-sample]$ ansible-vault view vars/vault/pass_hci-bench-connect.yml

Vault password: ★このYAMLファイルを作成した時のパスワードを入力

 

---

password: (パスワードを記載しておく)

 

 

vdbench のパラメータファイル のサンプル(vdb-case-101 など)も、

とりあえず HCIBench が動作するか確認するためだけに配置してあるので

一瞬で終了する適当なテスト パラメータになっています。

 

HCIBench 設定の実行イメージ。

Ansible での接続のために、HCIBench に SSH 公開鍵をコピーしておきます。

[gowatana@client01 ~]$ ssh-copy-id root@hci-bench02.go-lab.jp

 

接続確認です。

[gowatana@client01 ~]$ ansible -i hosts -u root -m ping hci-bench02.go-lab.jp

hci-bench02.go-lab.jp | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

[gowatana@client01 ~]$

 

Anaible 実行にかかわるファイルを配置します。

今回は、サンプルを GitHub をダウンロード(git clone)しています。

[gowatana@client01 ~]$ git clone https://github.com/gowatana/hci-bench-config-sample.git

[gowatana@client01 ~]$ cd hci-bench-config-sample/

 

新しいテスト実施の準備としてブランチを作成します。

[gowatana@client01 hci-bench-config-sample]$ git checkout -b vsan-cluster-01_case-101

Switched to a new branch 'vsan-cluster-01_case-101'

 

設定編集、パラメータファイルの追加、編集などを実施します。

vCenter のログインパスワードを指定するファイルも追加します。

vdbench ソフトウェアの zip ファイル、パラメータファイルなども配置します。

(ここでは、これらの手順記載は省略しています)

 

Ansible のインベントリ ファイルに HCIBench 仮想アプライアンスのホストを記載しておきます。

[gowatana@client01 hci-bench-config-sample]$ cat hosts

hci-bench02.go-lab.jp

 

HCIBench の設定ファイルなどを編集します。

最初のうちは Web UI で生成された perf-conf.yaml を scp などで取得して

それをもとに修正したほうがうまくいきます。

そして 適宜、git でファイル管理しておきます。

[gowatana@client01 hci-bench-config-sample]$ vi files/conf/perf-conf.yaml.j2

[gowatana@client01 hci-bench-config-sample]$ git add files/conf/perf-conf.yaml.j2

[gowatana@client01 hci-bench-config-sample]$ git commit -m "set test parameters."

[gowatana@client01 hci-bench-config-sample]$ git push origin vsan-cluster-01_case-101

 

下記のように、パラメータを変更していきます。

他にも VM 数、ディスク数、時間などを変更したり、 vdbench のパラメータ ファイルを追加、編集したりします。

https://github.com/gowatana/hci-bench-config-sample/commit/635d691963b02417a53d07b288c85d99afc0b023

 

それでは、HCIBench を設定します。

ここでは「--ask-vault-pass」をつけて、Ansible Vault のパスワードを入力します。

[gowatana@client01 hci-bench-config-sample]$ ansible-playbook -i hosts --ask-vault-pass setup.yml

 

実行の様子は下記のような感じです。

hci-bench-ansible-setting-01.png

 

HCIBench の Web UI にログインすると、すでに設定されている状態になります。

ただし、vdbench のパラメータ ファイルを複数指定していると、Web UI でも選択が必要です。

また、設定ファイルがうまく記載できていないと、デフォルト値や空欄の箇所があったりします。

テストを実行する前に「Save Configuration」と「Validate」をクリックしておきます。

hci-bench-ansible-setting-02.png

 

ここで、何か不足があったら コンフィグを修正して、再び ansible-playbook で修正します。

(状況によっては、Web UI で直接変更して、あとで Playbook に反映でも・・・)

その都度、Web ブラウザは更新したほうがよさそうです。

 

「Test」でテストを開始します。

hci-bench-ansible-setting-03.png

 

ファイルの編集個所やファイル管理の手順を精査することで

ベンチマーク テストの効率や安定性を向上させられるのではないかと考えられます。

また vSAN 環境ではクラスタあたりのデータストアが 1つに限定されていたりと構成に特徴があるので、

変数の管理にも、さらに工夫ができそうな気がします。

まだ試行錯誤の途中なので、ひきつづき工夫していきたいと思います。

 

以上、HCIBench の設定に Ansible を取り入れてみる話でした。

HCIBench は vSAN などのテスト自動化をするためには便利です。

 

HCIBench

https://labs.vmware.com/flings/hcibench

 

しかし、複数のテストを並行させたり、複数の環境設定を保持したりといった使い方には

あまり向かないように感じます。実際にベンチマーク テストを実行する場合には、

テストの目的や利用者ごとに HCIBench 仮想アプライアンス(OVA)を

デプロイするケースがあると思います。

 

そこで、少しでもデプロイ作業を簡略化すべく、

PowerCLI で HCIBench の OVA をデプロイしてみました。

ちょうど HCIBench v1.6.6 が公開されたのでデプロイしてみます。

 

OVA ファイルは、HCIBench_1.6.6.ova を利用します。

 

今回使用するコマンドの PowerCLI モジュールはバージョン 10.0 のものです。

PowerCLI> Get-Command Get-OvfConfiguration,Import-VApp | select Name,Module,Version

 

Name                 Module                    Version

----                 ------                    -------

Get-OvfConfiguration VMware.VimAutomation.Core 10.0.0.7893909

Import-VApp          VMware.VimAutomation.Core 10.0.0.7893909

 

 

コマンドライン実行での PowerCLI デプロイ。

Get-OvfConfiguration の実行のためには、まず vCenter に接続します。
「vc-sv01.go-lab.jp」は今回のデプロイ先 vCenter です。

PowerCLI> Connect-VIServer vc-sv01.go-lab.jp -Force

 

OVF を設定するための準備をします。

PowerCLI> $ovf_config = Get-OvfConfiguration -Ovf D:\VMware\HCIBench_1.6.6.ova

PowerCLI> $ovf_config

 

====================================

OvfConfiguration: HCIBench_1.6.6.ova

 

   Properties:

   -----------

   Common

   NetworkMapping

 

 

下記のようなパラメータが必要だとわかります。

PowerCLI> $ovf_config.Common

 

Public_Network_Gateway :

Public_Network_IP      :

DNS                    :

Public_Network_Netmask :

Public_Network_Type    :

System_Password        :

 

PowerCLI> $ovf_config.NetworkMapping | fl

 

Public_Network  :

Private_Network :

 

 

今回のデプロイで指定するオブジェクトが存在しているか、事前に確認しておきます。

対象のオブジェクトがあれば Ture、なければ False です。

必要に応じて、ESXi はメンテナンスモードが解除されているか、

他にも必要なオブジェクト(クラスタ、リソースプール、フォルダなど)が作成されているか

といった確認を追加するとさらに確実になります。

PowerCLI> Get-VMHost hv-d02.go-lab.jp -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

PowerCLI> Get-VMHost hv-d02.go-lab.jp | Get-VirtualPortGroup -Name "VM Network" -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

PowerCLI> Get-VMHost hv-d02.go-lab.jp | Get-VirtualPortGroup -Name "pg-vlan-1012" -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

PowerCLI> Get-VMHost hv-d02.go-lab.jp | Get-Datastore ds_hv-d02_01 -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

 

ここから、vSphere Web Client からのデプロイでは下記のように指定していたパラメータを

PowerCLI で指定していきます。

hci-bench-powercli-deploy-00.png

 

OVF のパラメータを設定します。

PowerCLI> $ovf_config.NetworkMapping.Public_Network.Value = "VM Network"

PowerCLI> $ovf_config.NetworkMapping.Private_Network.Value = "pg-vlan-1012"

PowerCLI> $ovf_config.Common.DNS.Value = "192.168.1.254"

PowerCLI> $ovf_config.Common.Public_Network_Gateway.Value = "192.168.1.1"

PowerCLI> $ovf_config.Common.Public_Network_IP.Value = "192.168.1.119"

PowerCLI> $ovf_config.Common.Public_Network_Netmask.Value = "255.255.255.0"

PowerCLI> $ovf_config.Common.Public_Network_Type.Value = "Static"

PowerCLI> $ovf_config.Common.System_Password.Value = "VMware1!"

 

パラメータがひととおり設定されたことを確認できます。

PowerCLI> $ovf_config.Common

 

Public_Network_Gateway : 192.168.1.1

Public_Network_IP      : 192.168.1.119

DNS                    : 192.168.1.254

Public_Network_Netmask : 255.255.255.0

Public_Network_Type    : Static

System_Password        : VMware1!

 

PowerCLI> $ovf_config.NetworkMapping | fl

 

Public_Network  : VM Network

Private_Network : pg-vlan-1012

 

 

OVA をデプロイします。

hci-bench02 という名前で、ESXi「hv-d02.go-lab.jp」のデータストア「ds_hv-d02_01」にデプロイします。

PowerCLI> Import-VApp -Name hci-bench02 -OvfConfiguration $ovf_config -Source $ovf_config.Source -VMHost hv-d02.go-lab.jp -Datastore ds_hv-d02_01 -StorageFormat Thin

 

デプロイが完了したら HCIBench を起動します。

PowerCLI> Get-VM hci-bench02 | Start-VM

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

hci-bench02          PoweredOn  8        8.000

 

 

このあと、Web ブラウザでアクセスして・・・

hci-bench-powercli-deploy-01.png

 

HCIBench の Web UI での設定にすすみます。

hci-bench-powercli-deploy-02.png

 

Web UI からの設定は、vExpert の kawaman さんの投稿がとても参考になります。

https://community.emc.com/people/kawaman/blog/2017/12/17/hcibench-vsan-performancetest

 

デプロイ スクリプトのサンプル。

ここまでのコマンドラインをスクリプトにまとめておくと、

同環境や、類似した環境での 2度目以降のデプロイを簡略化できるようになります。

 

今回は、下記のようなスクリプトを作成してみました。

※自宅ラボむけに目的を絞って簡易的に作成しています。

deploy_hci-bench-ova.ps1 · GitHub

# HCIBench OVA Deploy Script.

#

# Public_Network_Type は "Static" で固定。

# vCenter に接続するが、デプロイ先は ESXi を指定する。

# Usage:

#   PowerCLI> .\deploy_hci-bench-ova.ps1

 

# ------------------------------

# Setting

$ova_file_path           = "D:\VMware\HCIBench_1.6.6.ova"

$vm_name                 = "hci-bench02"

$target_vc               = "vc-sv01.go-lab.jp"

$target_esxi             = "hv-d02.go-lab.jp"

$target_pg_public        = "VM Network"

$target_pg_private       = "pg-vlan-1012"

$target_datastore        = "ds_hv-d02_01"

 

$public_network_ip       = "192.168.1.119"

$public_network_netmask  = "255.255.255.0"

$public_network_gateway  = "192.168.1.1"

$dns                     = "192.168.1.254"

 

$ova_root_password       = "VMware1!"

 

# ------------------------------

# connect VC & get OVF config.

Connect-VIServer $target_vc -Force

$ovf_config = Get-OvfConfiguration -Ovf $ova_file_path

 

# ------------------------------

# Pre Check

$pre_check = "ok"

$hv = Get-VMHost $target_esxi -ErrorAction:SilentlyContinue

$hv | Out-Null; echo $?

if($? -ne $true){"デプロイ先 ESXi を確認して下さい。"; $pre_check = "NG"}

$hv | Get-VirtualPortGroup -Name $target_pg_public -ErrorAction:SilentlyContinue | Out-Null; echo $?

if($? -ne $true){"デプロイ先 Public PG を確認して下さい。"; $pre_check = "NG"}

$hv | Get-VirtualPortGroup -Name $target_pg_private -ErrorAction:SilentlyContinue | Out-Null; echo $?

if($? -ne $true){"デプロイ先 Private PG を確認して下さい。"; $pre_check = "NG"}

$hv | Get-Datastore $target_datastore -ErrorAction:SilentlyContinue | Out-Null; echo $?

if($? -ne $true){"デプロイ先 Datastore を確認して下さい。"; $pre_check = "NG"}

 

if($pre_check -ne "ok"){"デプロイを実行せず終了します。"; exit 1}

 

# ------------------------------

# Configure & Deploy

$ovf_config.Common.Public_Network_Type.Value = "Static"

$ovf_config.NetworkMapping.Public_Network.Value = $target_pg_public

$ovf_config.NetworkMapping.Private_Network.Value = $target_pg_private

$ovf_config.Common.Public_Network_IP.Value = $public_network_ip

$ovf_config.Common.Public_Network_Netmask.Value = $public_network_netmask

$ovf_config.Common.Public_Network_Gateway.Value = $public_network_gateway

$ovf_config.Common.DNS.Value = $dns

$ovf_config.Common.System_Password.Value = $ova_root_password

 

Import-VApp -OvfConfiguration $ovf_config -Source $ovf_config.Source `

    -Name $vm_name `

    -VMHost $target_esxi `

    -Datastore $target_datastore -StorageFormat Thin |

    select Name,PowerState

 

Get-VM $vm_name | Start-VM | select Name,PowerState

 

Disconnect-VIServer $target_vc -Confirm:$false

 

そして、下記のように実行すると、以前のコマンドラインと同じデプロイが実施できます。

PowerCLI> .\deploy_hci-bench-ova.ps1

 

OVA のデプロイ作業の記録をテキスト形式で残せるようになるので、

作業内容の確認もしやすくなるかもしれません。

 

以上、HCIBench を PowerCLI でデプロイしてみる話でした。

vCenter Server Appliance(VCSA) 6.0 から、仮想アプライアンスを

vSphere Client / vSphere Web Clinet 経由ではなく専用のインストーラでデプロイするようになりました。

そして CLI ベースのインストーラも提供されています。

 

VCSA 6.5 でも、引き続き CLI デプロイができます。

vCenter Server Appliance および Platform Services Controller アプライアンスの CLI デプロイ

 

以前に VCSA 6.0 で、vCenter と Platform Services Controller(PSC) を

別サーバとして CLI デプロイする投稿をしましたが・・・

VCSA 6.0 を CLI Install してみる。(External PSC + vCenter)

 

同一サーバに配置することのほうが多いかなと思い今回は embedded PSC 構成です。

 

今回の構成。

今回は、VCSA 6.5 を CLI デプロイしてみました。

  • VCSA 6.5 U1e を使用します。
  • PSCは、vCenter と同じ VM に配置します。(embedded PSC)
  • パスワードはデプロイ時に手入力するようにしてみました。
    (しかし JSON に記載して、デプロイ後に変更したほうが楽かもしれません。)
  • デプロイは Windows 10 の PowerShell のウインドウから実行しています。

 

CLI デプロイの環境準備。

今回は MyVMware からダウンロードした下記のファイルを使用しました。

VMware-VCSA-all-6.5.0-7515524.iso

 

デプロイを実行する Windows にインストーラの ISO イメージファイルを

E: ドライブとしてマウントしています。

インストーラに含まれる下記のあたりのファイルをコピー&編集して、

実際にデプロイで使用する JSON ファイルを作成します。

PS C:\> ls E:\vcsa-cli-installer\templates\install | select Name

 

Name

----

PSC_first_instance_on_ESXi.json

PSC_first_instance_on_VC.json

PSC_replication_on_ESXi.json

PSC_replication_on_VC.json

embedded_vCSA_on_ESXi.json

embedded_vCSA_on_VC.json

vCSA_on_ESXi.json

vCSA_on_VC.json

 

 

JSON ファイルの作成では下記に注意します。

CLI デプロイ用の JSON 構成ファイルの準備

 

特に下記のあたりが要注意かなと思います。

  • UTF-8 で保存する。
  • JSON ファイルのパスは、ASCII 文字だけにする。(日本語や記号を使わないようにする)

 

JSON ファイルの内容。

今回は、下記のような JSON ファイル「C:\work\vc-sv02.json」を作成しました。

  • vCenter 経由ではなく、ESXi に直接デプロイします。最初の 1台として ESXi にデプロイすることが多いかなと思ったため。
  • デプロイ先として指定しているオブジェクトは構築ずみです。
    • デプロイ先の ESXi「hv-d01.go-lab.jp」
    • 標準ポートグループ「VM Network」
    • データストア「ds_ssd-nvme_hv-d01_01」
  • ESXi と vCenter の FQDN (~.go-lab.jp)は、DNS サーバに登録して、vCenter やデプロイ先のホストから名前解決できるようにしてあります。
  • vCenter「vc-sv02」は、最小スペック(tiny)で、Thin プロビジョニングにしています。
  • SSH のアクセスは有効化。
  • CEIP は無効化。

 

vc-sv02.json · GitHub

{

    "__version": "2.3.0",

    "__comments": "vCSA65 with an Embedded-PSC on an ESXi host.",

    "new.vcsa": {

        "esxi": {

            "hostname": "hv-d01.go-lab.jp",

            "username": "root",

            "password": "",

            "deployment.network": "VM Network",

            "datastore": "ds_ssd-nvme_hv-d01_01"

        },

        "appliance": {

            "thin.disk.mode": true,

            "deployment.option": "tiny",

            "name": "vc-sv02"

        },

        "network": {

            "ip.family": "ipv4",

            "mode": "static",

            "ip": "192.168.1.96",

            "dns.servers": [

                "192.168.1.254",

                "192.168.1.253"

            ],

            "prefix": "24",

            "gateway": "192.168.1.1",

            "system.name": "vc-sv02.go-lab.jp"

        },

        "os": {

            "password": "",

            "ssh.enable": true

        },

        "sso": {

            "password": "",

            "domain-name": "vsphere.local",

            "site-name": "site-vc-sv02"

        }

    },

    "ceip": {

        "settings": {

            "ceip.enabled": false

        }

    }

}

パラメータについては、下記に説明があります。

デプロイ構成パラメータ

 

デプロイ。

vcsa-deploy.exe が配置されているフォルダに移動しておきます。

PS C:\> cd E:\vcsa-cli-installer\win32

PS E:\vcsa-cli-installer\win32>

 

まず、JSON ファイルの内容を確認しておきます。

タイムスタンプが表示されていますが、これは JST ではなく UTC になるようです。

PS E:\vcsa-cli-installer\win32> .\vcsa-deploy.exe install --verify-only C:\work\vc-sv02.json

Run the installer with "-v" or "--verbose" to log detailed information

Execution Details:

[1] Result and Log File Information

[2] Template Syntax Validation

[3] Template Verification

[4] Gather Requirements

[5] Prechecks

[6] OVF Tool Parameter Verification

=========== [1] Result and Log File Information started at 15:50:41 ===========

Following result and log files will be generated...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\generated_install.json

============== [2] Template Syntax Validation started at 15:50:41 ==============

Validating json template syntax...

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'esxi', 'password': ★デプロイ先 ESXi のパスワードを入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'os', 'password': ★VCSA の root ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'sso', 'password': ★SSO(PSC)の Administrator ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

CEIP is not enabled because the template key 'ceip.enabled' in section 'ceip',

subsection 'settings' was set to 'false'.

Template syntax validation completed successfully.

================ [3] Template Verification started at 15:50:56 ================

Verifying template...

If an untrusted SSL certificate is installed on 'hv-d01.go-lab.jp', secure

communication cannot be guaranteed. Depending on your security policy, this

issue might not represent a security concern.

The SHA1 thumbprint of the certificate is

'9A:10:B0:B5:43:F6:A8:9D:CD:0E:95:AC:E0:A0:AB:8D:19:C2:76:B6'

Do you accept the thumbprint?

1: Accept and continue.

2: Do not accept and exit.

1 ★1を入力。

Template verification completed successfully.

=================================== 15:50:59 ===================================

Starting vCenter Server Appliance installer to deploy "vc-sv02"...

This appliance is a vCenter Server instance with an embedded Platform Services

Controller.

================= [4] Gather Requirements started at 15:50:59 =================

Gathering Requirements...

Gathering requirements completed successfully.

=================================== 15:50:59 ===================================

Generating template...

====================== [5] Prechecks started at 15:50:59 ======================

Performing prechecks...

Check target thumbprint: PASS

Check target credentials: PASS

Check Target vCenter Server appliance name: PASS

Check system type: PASS

Check target ESXi host or vCenter version: PASS

Check for OVA property availability: PASS

Check the host's configurations against the vCSA's CPU, memory and datastore

size requirements: PASS

Check VC management status of ESXi containers: PASS

Check target datastore free space: PASS

Check Single Sign-On Server identity: PASS

Check Single Sign-On Server credentials: PASS

Check whether the Platform Services Controller (PSC) is external: PASS

 

 

The following warnings were returned from the prechecks:

DRS Warning:

 

The target ESXi host 'hv-d01.go-lab.jp' is managed by vCenter Server

'192.168.1.95'.

 

If any of these hosts are in a cluster, and DRS is enabled, vMotion can take

effect and adversely impact the installation, upgrade, or migration processes.

It is recommended that you use the *_on_VC.json template file for the target

ESXi host if it is managed by a vCenter Server, and ensure the ESXi hosts you

have specified are not members of clusters with DRS set to Fully Automated

during the installation, upgrade, or migration processes.

 

Basic verification completed successfully.

=========== [6] OVF Tool Parameter Verification started at 15:51:04 ===========

Running OVF Tool parameter verification...

OVF Tool: Opening OVA source:

E:\vcsa-cli-installer\win32\..\..\vcsa\VMware-vCenter-Server-Appliance-6.5.0.14000-7515524_OVF10.ova

OVF Tool:  The manifest does not validate

OVF Tool:  Opening VI target: vi://root@hv-d01.go-lab.jp:443/

OVF Tool:  Supported disk provisioning:

OVF Tool:    monolithicSparse

OVF Tool:    monolithicFlat

OVF Tool:    thin

OVF Tool:    thick

OVF Tool:    flat

OVF Tool:    seSparse

OVF Tool:    eagerZeroedThick

OVF Tool:  Connected networks:

OVF Tool:    VM Network

OVF Tool:  Deploying to VI: vi://root@hv-d01.go-lab.jp:443/

OVF Tool: Transfer Completed

OVF Tool:  Completed successfully

OVF Tool verification completed successfully.

Verification completed successfully.

=================================== 15:51:07 ===================================

Result and Log File Information...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\generated_install.json

PS E:\vcsa-cli-installer\win32>

 

特にエラーがなければ、デプロイを実行します。

実際にデプロイする場合は「--accept-eula」が必要です。

PS E:\vcsa-cli-installer\win32> .\vcsa-deploy.exe install --accept-eula C:\work\vc-sv02.json

Run the installer with "-v" or "--verbose" to log detailed information

Execution Details:

[1] Result and Log File Information

[2] Template Syntax Validation

[3] Template Verification

[4] Gather Requirements

[5] Prechecks

[6] OVF Tool Execution

[7] Service Installation

[8] vCenter Service Configuration

[9] vCenter Server Deployment Summary

=========== [1] Result and Log File Information started at 15:52:57 ===========

Following result and log files will be generated...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\generated_install.json

============== [2] Template Syntax Validation started at 15:52:57 ==============

Validating json template syntax...

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'esxi', 'password': ★デプロイ先 ESXi のパスワードを入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'os', 'password': ★VCSA の root ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'sso', 'password': ★SSO(PSC)の Administrator ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

CEIP is not enabled because the template key 'ceip.enabled' in section 'ceip',

subsection 'settings' was set to 'false'.

Template syntax validation completed successfully.

================ [3] Template Verification started at 15:53:12 ================

Verifying template...

If an untrusted SSL certificate is installed on 'hv-d01.go-lab.jp', secure

communication cannot be guaranteed. Depending on your security policy, this

issue might not represent a security concern.

The SHA1 thumbprint of the certificate is

'9A:10:B0:B5:43:F6:A8:9D:CD:0E:95:AC:E0:A0:AB:8D:19:C2:76:B6'

Do you accept the thumbprint?

1: Accept and continue.

2: Do not accept and exit.

1 ★1を入力。

Template verification completed successfully.

=================================== 15:53:15 ===================================

Starting vCenter Server Appliance installer to deploy "vc-sv02"...

This appliance is a vCenter Server instance with an embedded Platform Services

Controller.

================= [4] Gather Requirements started at 15:53:15 =================

Gathering Requirements...

Gathering requirements completed successfully.

=================================== 15:53:15 ===================================

Generating template...

====================== [5] Prechecks started at 15:53:15 ======================

Performing prechecks...

Check target thumbprint: PASS

Check target credentials: PASS

Check Target vCenter Server appliance name: PASS

Check system type: PASS

Check target ESXi host or vCenter version: PASS

Check for OVA property availability: PASS

Check the host's configurations against the vCSA's CPU, memory and datastore

size requirements: PASS

Check VC management status of ESXi containers: PASS

Check target datastore free space: PASS

Check Single Sign-On Server identity: PASS

Check Single Sign-On Server credentials: PASS

Check whether the Platform Services Controller (PSC) is external: PASS

 

 

The following warnings were returned from the prechecks:

DRS Warning:

 

The target ESXi host 'hv-d01.go-lab.jp' is managed by vCenter Server

'192.168.1.95'.

 

If any of these hosts are in a cluster, and DRS is enabled, vMotion can take

effect and adversely impact the installation, upgrade, or migration processes.

It is recommended that you use the *_on_VC.json template file for the target

ESXi host if it is managed by a vCenter Server, and ensure the ESXi hosts you

have specified are not members of clusters with DRS set to Fully Automated

during the installation, upgrade, or migration processes.

 

Basic verification completed successfully.

================== [6] OVF Tool Execution started at 15:53:19 ==================

Running OVF Tool to deploy the OVF...

OVF Tool: Opening OVA source:

E:\vcsa-cli-installer\win32\..\..\vcsa\VMware-vCenter-Server-Appliance-6.5.0.14000-7515524_OVF10.ova

OVF Tool:  The manifest does not validate

OVF Tool:  Opening VI target: vi://root@hv-d01.go-lab.jp:443/

OVF Tool:  Deploying to VI: vi://root@hv-d01.go-lab.jp:443/

OVF Tool: Disk progress: 99%

OVF Tool: Transfer Completed

OVF Tool:  Powering on VM: vc-sv02

OVF Tool: Task progress: 0%

OVF Tool: Task Completed

OVF Tool:  Completed successfully

================= [7] Service Installation started at 15:57:28 =================

Installing services...

Service Installation: Progress: 5% Setting up storage

Service Installation: Progress: 50% Installing RPMs

Service Installation: Progress: 54% Installed

VMware-unixODBC-2.3.2.vmw.2-6.5.0.x86_64.rpm

Service Installation: Progress: 56% Installed

vmware-afd-6.5.0.2570-7130183.x86_64.rpm

Service Installation: Progress: 61% Installed

vmware-dns-server-1.0.0-7130192.x86_64.rpm

Service Installation: Progress: 78% Installed

VMware-mbcs-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 80% Installed

vmware-virgo-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 84% Installed

vmware-imagebuilder-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 90% Installed

vmware-vsm-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 95% Configuring the machine

vCenter Server Service installations succeeded.

============ [8] vCenter Service Configuration started at 16:08:02 ============

Configuring services for first time use...

vCenter Service Configuration: Progress: 2% Starting VMware Authentication

Framework...

vCenter Service Configuration: Progress: 5% Starting VMware Identity Management

Service...

vCenter Service Configuration: Progress: 8% Starting VMware Single Sign-On User

Creation...

vCenter Service Configuration: Progress: 17% Starting VMware Component

Manager...

vCenter Service Configuration: Progress: 20% Starting VMware License Service...

vCenter Service Configuration: Progress: 22% Starting VMware Platform Services

Controller Client...

vCenter Service Configuration: Progress: 25% Starting VMware Service Control

Agent...

vCenter Service Configuration: Progress: 28% Starting VMware vAPI Endpoint...

vCenter Service Configuration: Progress: 31% Starting VMware Service Lifecycle

Manager API...

vCenter Service Configuration: Progress: 34% Starting VMware Appliance

Management Service...

vCenter Service Configuration: Progress: 45% Starting VMware Postgres...

vCenter Service Configuration: Progress: 51% Starting VMware vCenter-Services...

vCenter Service Configuration: Progress: 54% Starting VMware Message Bus

Configuration Service...

vCenter Service Configuration: Progress: 58% Starting VMware vSphere Web

Client...

vCenter Service Configuration: Progress: 59% Starting VMware vSphere Web

Client...

vCenter Service Configuration: Progress: 61% Starting VMware vSphere Client...

vCenter Service Configuration: Progress: 62% Starting VMware vCenter Server...

vCenter Service Configuration: Progress: 65% Starting VMware Content Library

Service...

vCenter Service Configuration: Progress: 68% Starting VMware ESX Agent

Manager...

vCenter Service Configuration: Progress: 71% Starting VMware vSphere Auto Deploy

Waiter...

vCenter Service Configuration: Progress: 74% Starting VMware vSphere

Profile-Driven Storage Service...

vCenter Service Configuration: Progress: 77% Starting VMware Update Manager...

vCenter Service Configuration: Progress: 82% Starting VMware vSphere

Authentication Proxy...

vCenter Service Configuration: Progress: 85% Starting VMware VSAN Health

Service...

vCenter Service Configuration: Progress: 88% Starting VMware vService Manager...

vCenter Service Configuration: Progress: 91% Starting VMware Image Builder

Manager...

vCenter Service Configuration: Progress: 97% Starting VMware Performance

Charts...

First time configuration succeeded.

========== [9] vCenter Server Deployment Summary started at 16:16:27 ==========

Deployment Summary

=================================== 16:16:28 ===================================

vCenter Server Appliance installer finished deploying "vc-sv02".

This appliance is a vCenter Server instance with an embedded Platform Services

Controller.

    System Name: vc-sv02.go-lab.jp

    Log in as: Administrator@vsphere.local

Finished successfully.

=================================== 16:16:28 ===================================

Result and Log File Information...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\generated_install.json

PS E:\vcsa-cli-installer\win32>

 

ESXi に、VCSA の仮想アプライアンスがデプロイされました。

vcsa65-cli-deploy-01.png

 

Web ブラウザで vCenter にアクセスできるようになります。

※URL は「https://vCenter のアドレス/ui」もしくは「https://vCenter のアドレス/vsphere-client」です。

vcsa65-cli-deploy-02.png

 

沢山 vCenter をデプロイするようなときには便利ではないかなと思います。

 

ちなみに、何度も同じ名前で vCenter をデプロイしていると Chrome / Microsoft Edge で

証明書のエラーになり HTML5 Client / vSphere Web Client にアクセスできなくなることがありますが、

その場合はデプロイした VCSA の CA 証明書を(Firefox などアクセスできるブラウザで何とかダウンロードして)

インストールするとアクセス可能になります。

※その場合、証明書は「https://vCenterのアドレス/certs/download.zip」からダウンロードできます。

 

以上、VCSA 6.5 を CLI でデプロイしてみる話でした。

 

最近、PowerCLI 10.0 がリリースされました。

New Release: VMware PowerCLI 10.0.0 - VMware PowerCLI Blog - VMware Blogs

 

とうとう macOS や Linux でも PowerCLI がサポートされるようです。

そこで Linux OS で PowerCLI をためしてみました。

 

今回は、Oracle Linux 7 を利用しています。

[root@vm01 ~]# cat /etc/oracle-release

Oracle Linux Server release 7.4

 

PowerShell のインストール。

まず、PowerShell をインストールします。

Oracle Linux では、ORACLE の Public Yum サーバから PowerShell をインスト―ルできます。

 

まず、Yum リポジトリの参照先が記載されている .repo ファイルを最新化します。

[root@vm01 ~]# curl http://yum.oracle.com/public-yum-ol7.repo -o /etc/yum.repos.d/public-yum-ol7.repo

 

Oracle Linux の PowerShell は、ol7_developer リポジトリにあります。

http://yum.oracle.com/repo/OracleLinux/OL7/developer/x86_64/

 

「--enablerepo」でリポジトリを有効にしつつインストールします。

[root@vm01 ~]# yum install -y --enablerepo=ol7_developer powershell

 

PowerCLI のインストール。

PowerShell を起動します。Linux では「pwsh」です。

[root@vm01 ~]# pwsh

PowerShell v6.0.1

Copyright (c) Microsoft Corporation. All rights reserved.

 

https://aka.ms/pscore6-docs

Type 'help' to get help.

 

PS /root>

 

PowerCLI をインストールします。

インストール元になる PowerShell Gallery がまだ信頼されていないと確認されるので

「Y」と入力して Enter キーをおすと、ひたすらモジュールがインストールされます。

PS /root> Install-Module -Name VMware.PowerCLI -Scope CurrentUser

 

Untrusted repository

You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy

value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?

[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y

PS /root>

 

警告抑止のため、VMware の Customer Experience Improvement Program (CEIP) の

参加についての設定をしておきます。

ここでは $false にしておきます。(自宅ラボでは基本的に CEIP に参加していますが・・・)

PS /root> Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false

 

PowerCLI 10.0.0 がインストールできています。

PS /root> Get-PowerCLIVersion

WARNING: The cmdlet "Get-PowerCLIVersion" is deprecated. Please use the 'Get-Module' cmdlet instead.

 

PowerCLI Version

----------------

   VMware PowerCLI 10.0.0 build 7895300

---------------

Component Versions

---------------

   VMware Cis Core PowerCLI Component PowerCLI Component 10.0 build 7893915

   VMware VimAutomation VICore Commands PowerCLI Component PowerCLI Component 10.0 build 7893909

 

 

 

PS /root>

 

WARNING にあるように、最近は Get-Module でバージョン確認するほうが

良いようなので、ついでに確認しておきます。

PS /root> Get-Module -ListAvailable -Name VMware.* | select Version,Name

 

Version        Name

-------        ----

6.5.2.7812840  VMware.DeployAutomation

6.5.2.7812840  VMware.ImageBuilder

10.0.0.7895300 VMware.PowerCLI

10.0.0.7893915 VMware.VimAutomation.Cis.Core

10.0.0.7893901 VMware.VimAutomation.Cloud

10.0.0.7893906 VMware.VimAutomation.Common

10.0.0.7893909 VMware.VimAutomation.Core

6.5.4.7567193  VMware.VimAutomation.HA

7.1.0.7547311  VMware.VimAutomation.HorizonView

10.0.0.7893904 VMware.VimAutomation.License

10.0.0.7893913 VMware.VimAutomation.Nsxt

10.0.0.7893924 VMware.VimAutomation.PCloud

10.0.0.7893910 VMware.VimAutomation.Sdk

10.0.0.7893900 VMware.VimAutomation.Srm

10.0.0.7894167 VMware.VimAutomation.Storage

1.2.0.0        VMware.VimAutomation.StorageUtility

10.0.0.7893903 VMware.VimAutomation.Vds

10.0.0.7893902 VMware.VimAutomation.Vmc

10.0.0.7893921 VMware.VimAutomation.vROps

6.5.1.7862888  VMware.VumAutomation

 

 

PS /root>

 

PowerCLI を使用してみる。

vCenter に接続してみます。

  • 今回の vCenter のアドレスは vc-sv01.go-lab.jp です。
  • 証明書エラー回避のため「 -Force」をつけています。

PS /root> Connect-VIServer vc-sv01.go-lab.jp -Force

 

 

Specify Credential

Please specify server credential

User: gowatana

Password for user gowatana: **************

 

 

Name                           Port  User

----                           ----  ----

vc-sv01.go-lab.jp              443   GO-LAB\gowatana

 

 

PS /root> $global:DefaultVIServer | Format-List Name,Version,Build,ProductLIne

 

 

Name        : vc-sv01.go-lab.jp

Version     : 6.5.0

Build       : 7515524

ProductLine : vpx

 

 

PS /root>

 

まだ Windows 版ほどの完成度ではないようですが、

基本的に Windows 版と同様のコマンドレットがあるようで vSAN 系のものも含まれています。

PS /root> Get-Cluster vsan-cluster-* | Get-VsanClusterConfiguration | Sort-Object Cluster

 

Cluster              VsanEnabled  IsStretchedCluster   Last HCL Updated

-------              -----------  ------------------   ----------------

vsan-cluster-01      True

vsan-cluster-02      True

vsan-cluster-03      True         True                 2018/01/28 12:01:23

 

 

PS /root> Get-Cluster vsan-cluster-01 | Get-VsanRuntimeInfo | Sort-Object VMHost | ft -AutoSize

 

Cluster         VMHost           ResyncTrafficMbps

-------         ------           -----------------

vsan-cluster-01 hv-i21.go-lab.jp                 0

vsan-cluster-01 hv-i22.go-lab.jp                 0

vsan-cluster-01 hv-i23.go-lab.jp                11

vsan-cluster-01 hv-i24.go-lab.jp                 4

vsan-cluster-01 hv-i25.go-lab.jp                 5

vsan-cluster-01 hv-i26.go-lab.jp                 5

 

 

PS /root>

 

また、PowerCLI の Linux 対応以前に

Linux 環境での PowerShell の使い方にも注意が必要そうです。

 

たとえば以前の投稿で使用したスクリプト「get_vsan_summary.ps1」を実行してみると、

「sort」でエラーになってしまいました。

PowerCLI で vSAN クラスタの概要を見てみる。

 

下記のような感じになったりします。

Linux の sort コマンドを実行しようとしてしまったりするようです。

PS /root> Get-Cluster | sort name

/usr/bin/sort: cannot read: name: そのようなファイルやディレクトリはありません

 

これについては、エイリアスの「sort」ではなく

ちゃんと Sort-Object とするとこの問題は回避できます。

PS /root> Get-Cluster | Sort-Object Name

 

 

Name                           HAEnabled  HAFailover DrsEnabled DrsAutomationLevel

                                          Level

----                           ---------  ---------- ---------- ------------------

ha-cluster-01                  False      1          False      FullyAutomated

ha-cluster-02                  True       1          True       FullyAutomated

ha-cluster-03                  False      1          False      FullyAutomated

vsan-cluster-01                True       1          True       FullyAutomated

vsan-cluster-02                True       1          True       PartiallyAutomated

vsan-cluster-03                False      1          False      FullyAutomated

work-cluster-01                False      1          False      FullyAutomated

 

 

以前の投稿の get_vsan_summary.ps1 スクリプトだと

下記のような感じの置換ですみましたが・・・

これまでの PowerShell / PowerCLI のバージョンアップよりも

修正箇所が多くなりそうな予感がします。

PS /root> sed -i "s/sort/Sort-Object/g" ./get_vsan_summary.ps1

 

私の場合、PowerShell のエイリアスを利用していたり、

ちょっと癖のあるスクリプトを作成したりすることがあるので

シンプルなコマンドライン / スクリプト作成を心掛けつつ

Linux 版 PowerCLI も徐々に利用していこうと思います。

 

以上、PowerCLI 10.0 を Linux で使用してみる話でした。