在 vSphere 6.x vSAN 数据存储上使用 Oracle RAC (2126079)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2126079
Purpose
VMware vSAN 会阻止多个虚拟机以读写模式打开同一个虚拟磁盘 (VMDK),此问题与 VMFS 和 NFS 数据存储相关。 这是为了防止存储在虚拟磁盘上的数据由于大多数客户机操作系统所使用的非群集感知文件系统上出现多个写入器而受到损坏。
要启用客户机内系统(利用具有分布式写入(即多写入器)功能的群集感知文件系统),我们必须为所有适用的虚拟机和 VMDK 显式启用多写入器支持。
本文概述了创建驻留在 VMware vSAN 上的可共享 VMDK 和启用多写入器模式的过程。 这样可允许多个虚拟机以读写模式访问同一个 VMDK,从而使客户机内共享存储群集解决方案(例如 Oracle RAC)可用。
注意: 启用多写入器模式会导致部分虚拟机操作和 vSphere 功能变得不受支持。 有关启用多写入器模式时的操作/功能可支持性,请参见以下列表:
支持和不支持的操作或功能
操作或功能 | 支持 | 不支持 | 注释 |
打开和关闭虚拟机电源以及重新启动虚拟机 | √ | | |
将虚拟机挂起 | | × | |
热添加虚拟磁盘 | √ | | 仅适用于现有适配器 |
热移除设备 | √ | | |
热扩展虚拟磁盘 | | × | |
连接和断开设备 | √ | | |
快照 | | × | 虚拟备份解决方案通过 vStorage API 利用快照;例如,VMware Data Recovery 和 vSphere Data Protection。 这些解决方案也不受支持。 |
包含独立持久磁盘的虚拟机的快照 | √ | | 只有共享磁盘必须处于独立持久模式 |
克隆 | | × | |
Storage vMotion | | × | |
更改块跟踪 (CBT) | | × | |
vSphere Flash Read Cache (vFRC) | | × | 失效的写入会导致数据丢失和/或损坏 |
vMotion | √ | | 仅受 ORAC 支持,并且仅限于 8 个 ESX/ESXi 主机 |
用例:
- Oracle RAC,其中的应用程序可确保从两个或更多不同虚拟机发出的写入不会导致数据丢失
- 此配置已经过测试,并且仅在 vSphere 6.x 上受支持。
限制和要求:
- 由于 VMware vSAN 不支持原始设备映射 (RDM),因此本文档仅适用于驻留在 vSAN 数据存储上的虚拟磁盘。
- 当使用多写入器模式时,虚拟磁盘必须是快速置零厚置备磁盘。 有关详细信息,请参见 A virtual machine fails to power on with the error: Thin/TBZ disks cannot be opened in multiwriter mode. VMware ESX cannot open the virtual disk for clustering. (1033570)。
- 在多写入器模式下,最多只能与 vSAN 共享 8 个 ESXi/ESX 6.x 主机。 对于只读访问(也就是 View、链接克隆和快速置备等用例),您仍可与 32 个主机共享虚拟磁盘
- 热添加虚拟磁盘会移除多写入器标记。 有关详细信息,请参见 Hot adding a virtual disk in ESXi 5.5 removes the multi-writer flag (2078540)。
Resolution
概述
创建每个 RAC 群集时,必须为该群集执行一次以下过程:在 vSAN 数据存储上配置 Oracle RAC 群集。 此过程需要执行以下步骤:
- 创建虚拟机存储策略,以将其应用到用作集群共享存储的虚拟磁盘。
- 以快速置零模式创建共享虚拟磁盘。
- 当前版本的 vSphere Web Client 缺少所需的配置选项。 这要求在 vSAN 群集中的相关 ESXi 主机上使用 CLI 或 PowerCLI。
注意: 使用 PowerCLI 可减少几个步骤,因此建议采用此方法。
- 当前版本的 vSphere Web Client 缺少所需的配置选项。 这要求在 vSAN 群集中的相关 ESXi 主机上使用 CLI 或 PowerCLI。
- 将共享磁盘附加到一个或多个虚拟机
- 使用 ESXi 命令行,为虚拟机和磁盘启用多写入器模式。
- 当前版本的 vSphere Web Client 缺少所需的配置选项。 这要求在相关 ESXi 主机上使用 CLI。
- 将虚拟机存储策略应用到共享磁盘。
警告: 继续操作之前,所有将成为 Oracle RAC 节点的虚拟机都必须处于关闭电源状态。
创建虚拟机存储策略
根据虚拟机的设计规范,您需要定义虚拟机存储策略以将其应用到 RAC 共享磁盘。 创建类似于下图的存储策略:
注意:
- 在本示例中,我们将虚拟机存储策略命名为“RAC”
- 对象空间预留: 100%,此设置会在磁盘上预先分配所有对象的组件。
- 允许的故障数: 默认设置是 1,可在另一个 vSAN 节点上提供镜像副本。 此设置可对主机/硬件组件故障提供 RAID 1 保护。 如对话框所示,这样将在 vSAN 数据存储上占用两倍的存储空间。
- 每个对象的磁盘带数: 默认 vSAN 策略为 1。 请为此策略选择所需的磁盘带宽度。 这与 RAID 0 相似。 在本示例中,我们使用值 2。
有关存储策略配置选项的详细信息,请参见 VMware vSAN 文档。
将存储控制器添加到 Oracle RAC 虚拟机
注意: 在每个 Oracle RAC 虚拟机上,创建类型相同并处于相同位置(SCSI 地址)的控制器。
- 在 vSphere Web Client 中右键单击虚拟机,然后选择编辑设置。
- 在后续窗口的底部,从新设备: 下拉菜单中选择 SCSI 控制器,然后单击添加。
- 展开新的 SCSI 控制器条目。
- 使总线共享模式保持为“无”,然后选择所需的类型(LSI Parallel、LSI SAS 或 Paravirtual)。
注意: 一般建议将准虚拟控制器类型用于 RAC 共享磁盘。 - 单击确定
- 对其余 RAC 虚拟机重复以上过程。
创建快速置零磁盘 (PowerCLI)
- 启动 PowerCLI 并使用 Connect-VIServer 连接到 vCenter。
有关 PowerCLI 约定和登录等的更多指导,请参见 VMware vSphere PowerCLI Documentation。
- 使用以下格式的 New-HardDisk cmdlet 创建新硬盘:
New-HardDisk -VM <VM name> -CapacityGB <size> -Datastore <VSAN datastore name> -StorageFormat EagerZeroedThick -Controller <controller name> -Persistence IndependentPersistent
例如,要在附加到数据存储“vsanDatastore”上的“SCSI Controller 1”的“RAC_0”虚拟机上创建一个大小为 10 GB 的磁盘,请使用以下命令:
New-HardDisk -VM “RAC_0” -CapacityGB 10 -Datastore “vsanDatastore” -StorageFormat EagerZeroedThick -Controller “SCSI Controller 1” -Persistence IndependentPersistent
The name of the storage controller will match the name of the device we added to the VMs in the previous section.
- 对要创建的其余共享磁盘重复以上过程。
创建快速置零磁盘(ESXi 命令行)
注意: 您必须启用对主机的本地 ESXi shell 或 SSH 访问并以特权 (root) 用户身份登录才能完成以下过程。
- 导航到 Oracle RAC 群集中第一个虚拟机的目录:
cd /vmfs/volumes/<vsan datastore>/<VM_Name>
例如:
cd /vmfs/volumes/vsanDatastore/RAC_0
- 使用以下 vmkfstools 命令创建要共享的快速置零厚置备虚拟磁盘:
vmkfstools -c <size> -W vsan -d eagerzeroedthick `pwd`/<vmdk-file-name>
例如:
vmkfstools -c 12G –W vsan –d eagerzeroedthick `pwd`/RAC_0_1.vmdk
- 对要创建的所有共享磁盘重复步骤 2。
将共享磁盘添加到一个或多个虚拟机 (vSphere Web Client)
创建快速置零磁盘后,您需要将其添加到其余 RAC 虚拟机。 您可以通过 vSphere Web Client 或 PowerCLI 执行此操作。 本节概述了 vSphere Web Client 方法。
虚拟磁盘应添加到每个虚拟机上的相同 SCSI 位置。 如果某个磁盘位于一个虚拟机上的位置 1:0,则在 RAC 群集中,该磁盘应位于所有虚拟机上的位置 1:0。
- 右键单击相应的虚拟机,然后选择编辑设置…。
- 在后续窗口中,从新设备下拉菜单中选择现有硬盘,然后单击添加。
- 导航到适当的目录,然后选择所需的磁盘。
- 单击确定。
- 展开新硬盘条目,然后适当地修改虚拟设备节点。
- 在共享下拉菜单中,选择多写入器选项。
注意:该选项只在 vSphere Web Client 6.0 Update 1 及更高级版本中才可用。对于 6.0 GA (没有任何更新),则需要手动编辑,操作步骤请见下文“使用 ESXi shell 为虚拟机和磁盘启用多写入器模式”部分。
- 将磁盘模式更改为独立持久。
- 单击确定以保存更改。
- 对其余虚拟机和共享磁盘重复以上过程。
将共享磁盘添加到一个或多个虚拟机 (PowerCLI)
创建快速置零磁盘后,您需要将其添加到其余 RAC 虚拟机。 您可以通过 vSphere Web Client 或 PowerCLI 执行此操作。 本节概述了 PowerCLI 方法。
- 启动 PowerCLI 并使用以下命令连接到 vCenter: Connect-VIServer。
- 使用以下格式的 New-HardDisk cmdlet 添加现有磁盘:
New-HardDisk -VM <VM Name> -DiskPath “[<datastore name>] <folder>/<disk file>” -Controller <controller name> -Persistence IndependentPersistent
例如:要将文件夹“RAC_0”中的数据存储“vsanDatastore”上的磁盘“RAC_0_1.vmdk”添加到虚拟机“RAC_1”并将其附加到“SCSI Controller 1”,请使用以下命令:
New-HardDisk -VM RAC_1 -DiskPath “[vsanDatastore] RAC_0/RAC_0_1.vmdk” -Controller “SCSI Controller 1” -Persistence IndependentPersistent
- 对其余虚拟机和共享磁盘重复以上过程。
使用 ESXi shell 为虚拟机和磁盘启用多写入器模式
在 6.0 Update 1 之前的 vSphere Web Client 版本中,无法添加多写入器标记。如果没有安装 vSphere 6.0 Update 1 或更高级版本,则要使用 ESXi shell 来在适用的虚拟机和磁盘上启用多写入器模式。
注意: 由于此过程涉及修改和加载虚拟机配置,因此建议向同一个 ESXi 主机注册所有 RAC 虚拟机以进行这些更改,从而不必登录到多个主机。 进行这些更改后,虚拟机可以分布到整个 vSphere 群集。
- 要为特定磁盘启用 SCSI 总线共享,请运行以下命令:
echo ‘scsi<N>:<D>.sharing = “multi-writer”’ >> <path to VMX file>
例如:要为数据存储“vSAN Datastore”上的虚拟机“RAC_0”的 SCSI 设备 1:0 启用多写入器,请使用以下命令:
echo ‘scsi1:0.sharing = “multi-writer”’ >> /vmfs/volumes/vsanDatastore/RAC_0/RAC_0.vmx
- 为所有适用的磁盘和虚拟机完成步骤 2,并适当地修改 SCSI 位置。 例如,要共享四个磁盘,我们应将以下条目全部添加到 VMX 文件:
scsi1:0.sharing = "multi-writer"
scsi1:1.sharing = "multi-writer"
scsi1:2.sharing = "multi-writer"
scsi1:3.sharing = "multi-writer"
- 刷新虚拟机配置以使更改生效。 我们必须先识别虚拟机才能进行刷新。 请使用以下命令:
vim-cmd vmsvc/getallvms |grep -i <VM name>
例如:要列出所有向主机注册的名称包含“RAC”的虚拟机,请运行以下命令:
vim-cmd vmsvc/getallvms |grep -i RAC
生成的输出将显示虚拟机注册,并在最左端的列中显示 VMID。 VMID 是一个简单的整数编号。
- 刷新配置以使更改生效:
vim-cmd vmsvc/reload <VMID>
例如: 如果其中一个 RAC 虚拟机的 VMID 是“24”,则应使用以下命令:
vim-cmd vmsvc/reload 24
- 重新加载所有适用的虚拟机。
将虚拟机存储策略应用到共享磁盘。
请注意,创建磁盘并将其添加到所有虚拟机后,我们必须应用为 RAC 共享磁盘创建的存储策略。 该策略必须应用到所有 RAC 虚拟机上所有适用的磁盘。
- 在 vSphere Web Client 中,右键单击虚拟机,然后选择编辑设置…。
- 展开相应的硬盘条目。
- 从下拉列表中选择所需的虚拟机存储策略。
- 验证磁盘模式是否为独立持久。
- 单击确定。
- 对所有适用的虚拟机和磁盘重复以上过程。
注意: 如果要在以后将其他存储策略应用到 RAC 共享磁盘,您必须对所有共享磁盘 以及所有共享该磁盘的虚拟机执行策略更改。