天天看点

干货分享之vSphere Oracle RAC集群虚拟机存储迁移

作者:青荷露尖520

注:本文翻译自VMware官方博客的文章

Storage vMotion for Oracle RAC Workloads within same vSphere Cluster - Virtualize Applications

在业务关键型应用程序领域,尤其是 IO 密集型 Oracle 工作负载,始终需要根据要求苛刻的工作负载配置文件进行存储迁移。

例如–

  • 将 Oracle 数据库存储从存储阵列中的一个层迁移到存储阵列中的另一个层,由同一 vSphere 群集访问
  • 将 Oracle 数据库存储从一个阵列迁移到另一个阵列(数据中心内和数据中心之间),以实现相同的数据存储类型 [ VMFS .NFS、iSCSI、vVOL 、vSAN],由同一 vSphere Cluster 访问
  • 跨不同的数据存储类型将 Oracle 数据库存储从一个阵列迁移到另一个阵列(数据中心内和数据中心之间) [ VMFS .NFS, iSCSI , vVOL , vSAN] ,由同一 vSphere Cluster 访问

存储迁移在各种排列和组合之间无缝实现,只需使用 vmdk,这是上述所有 VMware 数据存储的虚拟机存储的共同点。

本文介绍如何为在 VMware vSphere 上运行的 Oracle 数据库以及任何类型的底层存储执行存储迁移。迁移是使用两种关键技术的组合完成的,具体取决于数据库部署模型

  • VMware Storage vMotion
  • Oracle 自动存储管理 (ASM)。

在介绍此技术之前,我们首先回顾一些关键概念,包括 Oracle 在 vSphere 上的部署模型和 Storage vMotion 的基础知识。

本博客重点介绍了我们如何 存储 vMotion Oracle RAC 集群 ,从一个数据存储到存储阵列内的另一个数据存储,或者在 2 个存储阵列之间,由同一个 vSphere 集群访问,没有任何停机时间。

关键要点

  • Oracle RAC 集群从一个数据存储迁移到另一个数据存储,在存储阵列内或 VMware SDDC 上的 2 个存储阵列之间迁移具有挑战性,因为 Oracle RAC VM 将共享的 vmdk/s 用于 RAC 数据库。并且不能单独使用 VMware Storage vMotion,如下所述。VMware Storage vMotion 将迁移所有 vmdk,包括 Oracle 数据库 ASM 磁盘、操作系统和 Oracle 二进制文件 vmdk,但不会存储 vMotion 集群 vmdk,它只能用于非共享 vmdk 的 [KB 1034165]Oracle 自动存储管理 (ASM) 技术将仅迁移 Oracle 数据库 ASM 磁盘,但不会迁移操作系统或 Oracle 二进制文件 vmdk。
  • 本博客重点介绍如何在不停机的情况下存储 vMotion Oracle RAC 集群。
  • 我们部署了一个两步流程,该流程结合了Oracle ASM和存储vMotion技术,如上所述使用 Storage vMotion 技术迁移 RAC VM 的操作系统和 Oracle 非集群 vmdk – RAC VM 的操作系统和 Oracle 二进制文件 vmdk 现在可以从一个数据存储迁移到现有阵列上或 2 个阵列之间的新数据存储使用 Oracle ASM 技术迁移集群数据库数据 – RAC 数据库可以从一个数据存储迁移到现有阵列上的新数据存储,也可以在两个阵列之间迁移

在介绍此技术之前,我们首先回顾一些关键概念,包括 Oracle 在 vSphere 上的部署模型和 Storage vMotion 的基础知识。

vSphere 上的 Oracle 布局

有 3 种主要的 Oracle 数据库部署模型,所有这些模型都受支持,并且可以部署在 VMware SDDC 堆栈上。

  • 甲骨文单实例
  • Oracle RAC集群
  • Oracle RAC one node(使用与多写入器标志共享 vmdk 的相同概念)

vmdk 共享模式有 3 个值

  • 未指定
  • 无共享
  • 多写入器 – 用于群集
干货分享之vSphere Oracle RAC集群虚拟机存储迁移

一个Oracle RAC集群将有多个虚拟机,每个虚拟机都有2种类型的vmdk:

  • 非数据库 VMDK 的容纳根文件系统的操作系统磁盘 (/)Oracle 二进制文件 vmdk,包含 Oracle 二进制文件(Grid 和 RDBMS 二进制文件)/u01)
  • 共享数据库 VMDK 的使用多写入器属性

VMware Storage vMotion

借助 VMware Storage vMotion 技术,我们可以将虚拟机迁移到虚拟机,以便在虚拟机打开电源时将虚拟机和虚拟磁盘的配置文件从一个数据存储重新定位到另一个数据存储。

vSphere 文档详细介绍了存储 vMotion 要求和限制

多写入器磁盘和存储 vMotion 的注意事项

用于在虚拟机之间共享vmdk的多写入器功能在VMware SDDC上的Oracle RAC部署中起着重要作用。

VMFS 是一个群集文件系统,默认情况下禁止多个虚拟机打开和写入同一虚拟磁盘(.vmdk 文件)。这可以防止多个虚拟机无意中访问同一个 .vmdk 文件。

多写入器选项允许多个虚拟机共享 VMFS 支持的磁盘。此选项可用于禁用对某些群集感知应用程序的保护,例如Oracle Clusterware,其中应用程序确保来自两个或多个不同VM的写入不会导致数据丢失,并确保数据一致性和并发性。

使用多写入器功能的共享 vmdk 不支持的操作包括

  • Storage vMotion
  • 快照
  • 更改块跟踪 (CBT)

尝试 RAC 虚拟机的存储 vMotion 将导致错误:

干货分享之vSphere Oracle RAC集群虚拟机存储迁移

使用多写入器属性的支持和不支持的操作/功能可以在知识库1034165中找到。

干货分享之vSphere Oracle RAC集群虚拟机存储迁移

请参阅博客 为Oracle RAC ASM / OCFS2在线添加共享vmdk,而无需停机,了解如何将带有多写入器标志的共享vmdk在线添加到Oracle RAC集群。

了解 Oracle 存储迁移方法

有几种方法可以将 Oracle 工作负载存储从一个数据存储迁移到另一个数据存储,在现有阵列内或在 2 个单独的阵列之间迁移。

  1. Oracle 自动存储管理 (ASM) 技术,用于将 Oracle 数据块从数据存储上的一个 vmdk 迁移到相同/不同数据存储上的新 vmdk

该过程是将新磁盘添加到现有 ASM 磁盘组并从同一 ASM 磁盘组中删除旧磁盘,同时数据库继续访问磁盘组中的文件。在磁盘组中添加或删除磁盘时,Oracle ASM 会自动重新分发文件内容,并在重新分发内容时无需停机。删除磁盘时,将通过将所有文件扩展数据块从丢弃的磁盘移动到磁盘组中的其他磁盘来重新平衡磁盘组。

有关详细信息,请参阅从磁盘组中删除磁盘。

电源设置参数ASM_POWER_LIMIT确定再平衡操作发生的速度。值的范围是 0 到 1024。默认值为 1。值为 0 将禁用重新平衡。较高的数值使重新平衡操作能够更快地完成,但可能会导致更高的 I/O 开销和更多的重新平衡过程。使用此参数,DBA 能够控制迁移吞吐量,从而避免在生产高峰时段造成潜在性能

Oracle ASM 迁移方法使用 Oracle ASM 技术在 ASM 磁盘和 ASM 磁盘之间迁移 Oracle 块

  • 将仅迁移 Oracle 数据库 ASM 磁盘不会迁移操作系统 vmdk 或 Oracle 二进制文件 vmdk

使用 Oracle ASM 技术进行存储的步骤是将 Oracle 数据库存储从一个数据存储迁移到现有阵列上或两个阵列之间的新数据存储

  • 将新数据存储(现有或新阵列)中的新 vmdk/s 添加到虚拟机使用适当的分区偏移量对新设备进行分区如果使用 ASMLIB 则需要,而 Linux udev 则不需要在新磁盘上创建 ASM 设备将新的 ASM 磁盘添加到现有 ASM 磁盘组从现有 ASM 磁盘组中删除旧的 ASM 磁盘删除磁盘时,通过将删除的磁盘中的所有文件扩展数据块移动到磁盘组中的其他磁盘来重新平衡磁盘组从虚拟机中删除旧的 vmdk/s

在此步骤结束时

  • 数据库 vmdk 位于新数据存储上但是,操作系统和Oracle二进制文件VMDK仍然在旧的数据存储上。

2. 使用 VMware Storage vMotion 方法将 vmdk 从一个数据存储移动到新数据存储

VMware Storage vMotion

  • 将迁移所有 vmdk,包括 Oracle 数据库 ASM 磁盘、操作系统 vmdk 和 Oracle 二进制文件 vmdk只能用于非共享 vmdk 的 [KB 1034165]

任何基于存储的迁移(无论是存储 vMotion 还是基于阵列的迁移)都比 Oracle ASM 添加、删除和重新平衡磁盘的方法更快。但是,迁移速度不受管制或控制。这可能会导致生产高峰时段的潜在性能。

要从现有阵列迁移到新阵列,必须在 vSphere 群集上挂载两个阵列中的数据存储

还有其他迁移存储的方法,这些方法也需要时间来设置和切换,超出了本博客的范围

  • 将目标 Oracle RAC 作为源 Oracle RAC 集群的物理备用数据库
  • 使用数据泵 / RMAN / 金门 / 第三方复制产品在源数据库和新创建的目标 RAC 数据库之间移动数据

Oracle RAC prac19c 的测试设置

Below is a setup of a 2 node Oracle RAC prac19c with 2 RAC Instances prac19c1 and prac19c2. Th Operating system is OEL 7.9 with Grid Infrastructure and RDBMS 19.8 with Oracle ASM with ASMLIB.

Both RAC VM’s prac19c1 and prac19c2 storage is on a FC datastore on Pure Storage.

Details of Oracle RAC VMs prac19c1 and prac19c2 are as follows:

  • 12 vCPUs with 128GB RAM
  • Oracle SGA set to 96GB with traditional HugePages and PGA set to 6GB
  • VM hosts both Oracle Grid and RDBMS 19.8 multi-tenant production database vvol19c with a pluggable database pdb1
  • For sake of simplicity and illustration, one ASM disk group was created called DATA_DG which houses all the data files, control files, redo log files , archive log files, crs and vote disks. Recommendation is to create separate ASM disk groups for the RAC and Database components as a best practice. Refer to Oracle VMware Hybrid Cloud High Availability Guide for more information
  • VM prac19c1 public network adapter is connected to port group APPS-1614 and assigned an IP address 172.16.14.191. The private network adapter is connected to port group APPS-1605 and assigned an IP address 192.168.14.191
  • VM prac19c2 public network adapter is connected to port group APPS-1614 and assigned an IP address 172.16.14.192. The private network adapter is connected to port group APPS-1605 and assigned an IP address 192.168.14.192
干货分享之vSphere Oracle RAC集群虚拟机存储迁移

Oracle RAC prac19c VM 的 VMDK 如下所示。所有 SCSI 控制器都设置为 VMware Paravirtual SCSI 控制器类型:

  • 两个非共享 VMDK硬盘 1 80GB 用于具有磁盘模式的操作系统 取决于硬盘 1 80GB 用于 Oracle 网格基础设施和 RDBMS 二进制文件,磁盘模式取决于
  • 一个共享 VMDK (500 GB),具有多写入器属性和磁盘模式 RAC 群集的独立-持久

共享的 vmdk 是在 1 个 RAC 虚拟机上创建的,所有其他 RAC 虚拟机只需引用/指向它

具有多写入器标志和磁盘模式独立-持久模式的共享 VMDK 的详细信息如下所示:

干货分享之vSphere Oracle RAC集群虚拟机存储迁移

让我们看一下 RAC prac19c1 和 prac19c2 VM 的 .vmx 文件,看看共享的 vmdk 是如何连接到 SCSI 2:0 插槽的。

[root@sc2esx09:/vmfs/volumes/5faa0685-b4cf32fa-c4e4-e4434b2d2ca8/prac19c1] cat prac19c1.vmx | grep -i vmdk scsi0:0.fileName = “prac19c1.vmdk” scsi0:1.fileName = “prac19c1_1.vmdk”

scsi2:0.fileName = “prac19c1_3.vmdk

[root@sc2esx09:/vmfs/volumes/5faa0685-b4cf32fa-c4e4-e4434b2d2ca8/prac19c1

[root@sc2esx09:/vmfs/volumes/5faa0685-b4cf32fa-c4e4-e4434b2d2ca8/prac19c2] cat prac19c2.vmx | grep -i vmdk scsi0:0.fileName = “prac19c2.vmdk” scsi0:1.fileName = “prac19c2_1.vmdk” scsi2:0.fileName = “/vmfs/volumes/5faa0685-b4cf32fa-c4e4-e4434b2d2ca8/prac19c1/prac19c1_3.vmdk” <– 请参阅 VM prac19c1 vmdk [root@sc2esx09:/vmfs/volumes/5faa0685-b4cf32fa-c4e4-e4434b2d2ca8/prac19c2]

Oracle RAC 集群的存储迁移

问题,我们现在如何将RAC集群从一个数据存储迁移到另一个数据存储,访问到同一个vSphere集群,而不会造成任何停机?

请记住,Oracle RAC VM共享了用于RAC数据库的vmdk/s。如上所述

  • Oracle 自动存储管理 (ASM) 技术将仅迁移 Oracle 数据库 ASM 磁盘不会迁移操作系统 vmdk 或 Oracle 二进制文件 vmdk
  • VMware Storage vMotion将迁移所有 vmdk,包括 Oracle 数据库 ASM 磁盘、操作系统和 Oracle 二进制文件 vmdk只能用于非共享 vmdk 的 [KB 1034165]

我们有解决方案吗?

解决方案:一个两步过程,将 Oracle ASM 和存储 vMotion 技术结合在 RAC 群集中。

在不停机的情况下对 Oracle RAC 集群进行存储迁移的高级步骤

  1. 源数据存储是纯存储 FC 数据存储 OraPure,目标数据存储是纯存储 FC 数据存储 SC2-纯模板
  2. 仅从源数据存储 OraPure 执行存储 vMotion RAC 虚拟机的“prac19c1”和“prac19c2 非共享 vmdk”到目标数据存储 SC2-Pure-Templates,而无需迁移共享 vmdk。
  3. 将目标数据存储 SC2 纯模板中具有多写入器属性的新共享 vmdk 添加到 RAC VM 的“prac19c1”和“prac19c2”。
  • 执行步骤,将目标数据存储 SC2 纯模板中的新共享 vmdk 添加到 ASM 磁盘组DATA_DG
  • 从 Oracle ASM 中删除旧的 ASM 磁盘以进行DATA_DG
  • 然后从 RAC VM 的 'rac19c1' 和 'rac19c2' 中删除旧的 vmdk
  • 现在,用于DATA_DG的 RAC 数据库共享 vmdk 位于目标数据存储 SC2 纯模板上

步骤 1 – Storage vMotion 以迁移 RAC VM 的 prac19c1 和 prac19c2 的操作系统和 Oracle vmdk

将非集群操作系统和适用于 RAC VM 的 Oracle vmdk 从一个数据存储迁移到现有阵列或 2 个阵列之间的新数据存储的步骤与存储 vMotion 任何虚拟机的步骤相同。

步骤如下所示。源数据存储是纯存储 FC 数据存储 OraPure,目标数据存储是纯存储 FC 数据存储 SC2-纯模板

干货分享之vSphere Oracle RAC集群虚拟机存储迁移
干货分享之vSphere Oracle RAC集群虚拟机存储迁移

作为存储vMotion的一部分,我们可以选择要为单个vmdk放置vmdk的数据存储,我们选择此选项

干货分享之vSphere Oracle RAC集群虚拟机存储迁移
干货分享之vSphere Oracle RAC集群虚拟机存储迁移
干货分享之vSphere Oracle RAC集群虚拟机存储迁移

在此步骤结束时,RAC VM 的 prac19c1 和 prac19c2 的操作系统和 Oracle 二进制文件 vmdk 现在位于新的数据存储上

干货分享之vSphere Oracle RAC集群虚拟机存储迁移

500GB 共享 vmdk 仍位于源数据存储 OraPure 上。

干货分享之vSphere Oracle RAC集群虚拟机存储迁移

步骤 2 – 使用 Oracle ASM 技术迁移群集数据库数据

使用 Oracle ASM 技术进行存储的步骤是将 Oracle RAC 数据库存储从一个数据存储迁移到现有阵列或两个阵列之间的新数据存储

  • 在 RAC VM prac19c1 上 – 创建具有多写入器属性的新快速零厚 (EZT) vmdk,以便从目标数据存储 SC2 纯模板共享
  • 在 RAC VM prac19c2 上 – 将 RAC VM 的 prac19c1 上新添加的相同 vmdk 添加到具有多写入器属性的相同 SCSI 位置上的 RAC VM 的 prac19c2 以进行共享(添加现有硬盘选项)
  • RAC VM 的 prac19c1 和 prac19c2 现在都可以看到从目标数据存储 SC500 纯模板中雕刻出的相同的新 vmdk 2GB
  • 仅在 RAC VM prac19c1 上 – 使用适当的分区偏移量对新的 vmdk 设备进行分区,如果使用 ASMLIB 则需要,Linux udev 不需要
  • 在 RAC VM prac19c2 上 – 扫描 SCSI 总线以查看新的磁盘分区
  • 在 RAC VM prac19c1 上 – 在新磁盘上创建新的 ASM 设备
  • 在 RAC VM prac19c2 上 – 运行“oracleasm scandisks”命令
  • 在 RAC VM prac19c1 上 – 将新的 ASM 磁盘添加到现有 ASM 磁盘组
  • 在 RAC VM prac19c1 上 – 从现有 ASM 磁盘组中删除旧的 ASM 磁盘,并在有/没有电源选项的情况下执行 ASM 重新平衡。删除磁盘时,通过将删除的磁盘中的所有文件扩展数据块移动到磁盘组中的其他磁盘来重新平衡磁盘组
  • 在 RAC VM prac19c1 上 – 运行“oracleasm deletedisk XXX”,其中 XXX 是旧的 ASM 磁盘。
  • 在 RAC VM prac19vc2 上 – 运行“oracleasm scandisks”命令
  • 从 RAC VM 的 prac19c1 和 prac19c2 中删除旧的 vmdk
  • 现在,用于DATA_DG的 RAC 数据库共享 vmdk 位于目标数据存储 SC2 纯模板上

有关使用 ASM 重新平衡添加和删除 ASM 磁盘的详细步骤,请参阅博客 No 停机时间 Oracle RAC 集群的存储 vMotion 使用具有多写入器属性的共享 vmdk 从一个 vSAN 到另一个 vSAN 群集 使用 VMware HCI 网格

在此步骤结束时,在甲骨文上 RAC VM 的 prac19c1 和 prac19c2 (共享和非共享 vmdk)已从一个数据存储移动到另一个数据存储。

总结

  • Oracle RAC 集群从一个数据存储迁移到另一个数据存储,在存储阵列内或 VMware SDDC 上的 2 个存储阵列之间迁移具有挑战性,因为 Oracle RAC VM 将共享的 vmdk/s 用于 RAC 数据库。并且不能单独使用 VMware Storage vMotion,如下所述。VMware Storage vMotion 将迁移所有 vmdk,包括 Oracle 数据库 ASM 磁盘、操作系统和 Oracle 二进制文件 vmdk,但不会存储 vMotion 集群 vmdk,它只能用于非共享 vmdk 的 [KB 1034165]Oracle 自动存储管理 (ASM) 技术将仅迁移 Oracle 数据库 ASM 磁盘,但不会迁移操作系统或 Oracle 二进制文件 vmdk。
  • 本博客重点介绍如何在不停机的情况下存储 vMotion Oracle RAC 集群。
  • 我们部署了一个两步流程,该流程结合了Oracle ASM和存储vMotion技术,如上所述使用 Storage vMotion 技术迁移 RAC VM 的操作系统和 Oracle 非集群 vmdk – RAC VM 的操作系统和 Oracle 二进制文件 vmdk 现在可以从一个数据存储迁移到现有阵列上或 2 个阵列之间的新数据存储使用 Oracle ASM 技术迁移集群数据库数据 – RAC 数据库可以从一个数据存储迁移到现有阵列上的新数据存储,也可以在两个阵列之间迁移

结论

业务关键型应用程序(尤其是 IO 密集型 Oracle 工作负载)需要根据要求苛刻的工作负载配置文件,从存储阵列内或存储阵列之间的一层迁移到另一层。

通过结合Oracle ASM技术和VMware存储vMotion这两种技术,我们能够在VMware SDDC上成功迁移n节点Oracle RAC的存储,而无需任何停机时间或SLA,这是在VMware SDDC上迁移RAC集群的最快方法。

继续阅读