以前の投稿で 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 を設定してみる話でした。