实施 OCI Block Volumes 复制

此实施使用 OCI Block Volumes 跨区域复制功能来复制块存储卷。

以下是实施 OCI Block Volumes 复制的优势:

  • 与其他复制案例一样,无需定期创建和运行脚本。设置复制后,它将由 Oracle Cloud Infrastructure 自动执行。
  • 它是一种通用解决方案,适用于任何计算实例(引导卷除外)的任何块存储卷。如果您有多个系统,则可以在所有系统中使用相同的方法。
  • 有关复制的块存储卷的信息是主块存储卷的精确副本;将复制块存储卷中的所有文件。

在使用 OCI Block Volumes 复制之前,请考虑以下事项:

  • 它需要在辅助系统中挂载复制的块存储卷。无法直接挂载块存储卷的副本;您首先必须激活它们才能创建可以挂载的克隆块存储卷。这在节点较少的系统中并不复杂,但当存在多个节点时,复杂性会增加。特别是对于在主数据库和备用数据库的可用性域中没有相同节点分布的系统。

    但是,您可以使用 Oracle Cloud Infrastructure Full Stack Disaster Recovery 服务来自动执行切换、故障转移和验证操作中的这些步骤,从而克服这一复杂性。

  • 对于许多系统来说,这项技术可能还不够。如果系统具有更多类型的存储(例如,共享 OCI File Storage 文件系统),则需要为其使用不同的副本技术。

OCI 块存储卷设置复制

要实施 OCI Block Volumes 复制,需要执行以下步骤:

  • 使用 OCI 控制台在主区域中定义卷组,对需要复制的块存储卷进行分组。

    一个卷组只能包含位于同一可用性域 (Availability Domain,AD) 中的块存储卷,组中的所有块存储卷仅复制到一个目标 AD。如果块存储卷位于多个 AD 中,则为源 AD 和目标 AD 的每个组合创建一个块存储卷组。

  • 将卷组中的副本启用到辅助区域的相应 AD。
  • 连接到辅助系统中的中间层主机并卸载将从主系统复制的块存储卷。
  • 使用 OCI 控制台分离和放弃将从主系统复制的所有块存储卷。它们将不再被使用。
  • 实施一种方法来管理块存储卷中驻留的站点特定信息,方法是在副本之后使用相应的信息对其进行更新。

此实施适用于除了引导卷以外的任何块存储卷。引导卷复制具有其他含义,因此不在此实现的范围内。

示例 1:使用 OCI Block Volumes 复制来复制中间层配置块存储卷

注意:

此示例适用于任何中间层系统。作为参考,本文介绍了如何复制包含 Oracle WebLogic Server for OCI 堆栈的 Oracle WebLogic 配置的块存储卷。但是,您可以按照相同的步骤在中间层系统中复制其他块存储卷(引导卷除外)。

下图是具有 OCI Block Volumes 跨区域副本的 Oracle WebLogic Server 系统示例。



wls-bv-cross-replica-oracle.zip

要为块存储卷设置跨区域副本,请执行以下步骤:

  1. 备份特定于每个站点的信息。

    块存储卷可以包含具有特定于每个站点的信息的文件,例如,与数据库或 LDAP 服务器的连接字符串。

    使用块存储卷副本时,复制的块存储卷是主块存储卷的精确副本;您无法跳过副本中的特定文件或文件夹。因此,您必须通过调整每个站点上的信息来管理这些差异。有多种方法:

    • 可以使用特定于站点的信息在文件中执行字符串搜索和替换。
    • 您可以在复制之前备份此信息,然后将其恢复。

    此时,在启用副本之前,请使用复制的块存储卷中驻留的特定于站点的信息来标识和备份任何文件。在不在复制的块存储卷下的位置创建备份副本;否则,将覆盖该副本。

    提示:

    Oracle WebLogic Server 示例

    例如,复制包含 WebLogic 域的块存储卷时,有一些文件包含连接到数据库的信息。此信息位于 TNS 管理文件夹中。检查 WebLogic 数据源中的 tns_admin 属性以标识该文件夹。本文档提供了用于管理此问题的脚本,具体取决于方案:

    • 如果系统连接到 Oracle Base Database Service 或 Oracle Exadata Database Service,则只需在切换和故障转移操作期间更新辅助中间层系统的 tnsnames.ora 文件中的数据库连接字符串即可。本文档为此提供了示例脚本。
    • 如果系统连接到 Oracle Autonomous Database,则 TNS 管理文件夹将包含更多对象(信任存储和密钥库)。它们在主数据库和备用数据库上是不同的,无法使用简单的字符串替换来更新。本文档提供了一个脚本,用于恢复 TNS 文件夹的备份副本。

    此时,您只需要对 TNS 文件夹信息执行备份。

  2. 确定主要中间层主机的块存储卷。
    1. 转到 OCI 控制台,选择区域,然后选择区间。
    2. 依次导航到 StorageBlock Volumes 。确定块存储卷和挂载点。
    3. 记下它们所在的 namesAD 、它们所连接的 host 以及挂载点。

    提示:

    Oracle WebLogic 示例

    例如,包含 Oracle WebLogic Server for OCIOracle SOA Suite on Marketplace 堆栈中的 WebLogic 域的块存储卷是数据块存储卷。它们的名称为:prefix-data-block-N(其中 N 是主机节点的编号),并在每个主机的 /u01/data 中挂载。

    主数据库中的块存储卷 AD 主机 装载点
    prefix-data-block-0 AD1 prefix-wls-0 /u01/data
    prefix-data-block-1 AD2 prefix-wls-1 /u01/data

    您可能有其他块存储卷来存储 Oracle 产品主目录。例如,在 Oracle WebLogic Server for OCI 堆栈中,计算还具有 /u01/app 中挂载的 prefix-mw-block-N 块存储卷。

    如果使用 WLS-HYDR 框架为主堆栈创建辅助文件,则它具有两个冗余的 OCI File Storage 文件系统来存储 Oracle 产品,而不是块存储卷。因此,对于产品,主卷使用块存储卷和辅助 OCI 文件存储。如果需要,还可以为 "mw" 块存储卷配置正在进行的复制。您只需在主数据库为其配置块存储卷副本,并排除该产品的 OCI 文件存储文件系统中的辅助数据库。但是,由于这些项包含 Oracle 产品主目录,因此不一定要持续复制这些项。有关详细信息,请参阅“中层文件构件”。

  3. 确定辅助中间层主机中的块存储卷。
    重复上一步中所述的步骤,获取辅助中间层主机的块存储卷的名称和可用性域 (Availability Domains,AD)。

    提示:

    Oracle WebLogic 示例

    如果使用 WLS-HYDR 框架创建辅助系统,则主机和块存储卷名称的后缀编号可能与主后缀编号不同。市场堆栈使用后缀 0,1,2,3,而使用 WLS-HYDR 框架创建的系统使用后缀 1,2,3,4。确保正确标识对等节点和卷。例如:

    块存储卷(辅助) AD 主机 装载点
    prefixBV1 AD1 prefixhost-1 /u01/data
    prefixBV2 AD2 prefixhost-2 /u01/data
  4. 在主数据库中创建块存储卷组并启用跨区域副本。
    在主卷中创建块存储卷组,以将要从特定 AD 复制到辅助卷中特定 AD 的所有块存储卷分组。副本在卷组级别启用,因此适用于该组中的所有块存储卷。一个卷组只能包含位于同一 AD 中的块存储卷,并且该组中的所有块存储卷将仅复制到一个目标 AD。因此,如果您的计算实例位于多个 AD 中,请为源 AD 和目标 AD 的每个组合创建块存储卷组

    执行以下步骤可创建块存储卷组并启用跨区域副本:

    1. 登录到主区域中的 OCI 控制台。
    2. 依次导航到 StorageVolume Groups
    3. 创建块存储卷组。
      例如:prefix-BVGroup-region1AD1-region2AD1
    4. 添加将在卷组中复制的块存储卷。

      注意:

      请勿添加引导卷。它们不会被复制。
    5. 在卷组中启用跨区域复制。
      • 目标区域:选择辅助区域。
      • 可用性域:选择将挂载复制卷的计算机所在的辅助区域中的 AD。
      • 卷组副本名称:输入副本块存储卷组的名称。为清楚起见,请使用与主卷相同的块存储卷组。
    6. 保存所做的更改。
  5. 验证是否在辅助区域中创建了副本。
    1. 在 OCI 控制台中,选择辅助区域。
    2. 导航到 Storage ,然后依次单击 Block StorageVolume Group Replicas
  6. 如果主计算实例位于多个 AD 中,请重复上述步骤来创建其他块存储卷组。

    提示:

    Oracle WebLogic 示例

    当主堆栈是 Marketplace 堆栈并且使用 WLS-HYDR 创建辅助堆栈时:

    Oracle WebLogic Server for OCIOracle SOA Suite on Marketplace 堆栈中:如果该区域具有多个可用性域 (3),则会在它们之间分配计算实例。For example, node0 in AD1, node1 in AD2, node2 in AD3, node3 in AD1.

    在由 WLS-HYDR 创建的系统中:如果该区域具有多个可用性域 (3),则用户可以选择是否在这些可用性域之间分配计算实例。如果是,则会在 2 个 AD 中分配计算实例。For example, node1 in AD1, node2 in AD2, node3 in AD1, node4 in AD2.

    您必须正确定义 BV 组,以便对复制到目标中的同一 AD 的块存储卷进行分组。一个卷组只能包含位于同一 AD 中的块存储卷,并且该组中的所有块存储卷只能复制到一个目标 AD。如果存在混合(同一源 AD 中存在 OCI 块存储卷,但目标 AD 不同,反之亦然),则您需要创建所需数量的块存储卷组来管理所有副本组合。下面是一些示例方案:

    • 示例 2,两个节点,主节点和辅助节点中只有 1 个 AD
      • 主区域:AD1 中的 node0,AD1 中的 node1
      • 次要区域:AD1 中的 node1,AD1 中的 node2

      解决方案:

      主卷中存在 1 个卷组,在辅助卷中复制到 1 个卷组

    • 示例 3,两个节点,主节点和辅助节点中的 AD 超过 1 个
      • 在主要区域:AD1 中的 node0,AD2 中的 node1
      • 在辅助区域中:AD1 中的 node1,AD2 中的 node2

      解决方案:

      主卷将具有以下卷组:

      • 卷组 AD1(带有 node0 的 BV)复制到辅助 AD1(对于辅助 node1)
      • 卷组 AD2(带有 node1 的 BV)复制到辅助 AD2(对于辅助 node2)
    • 示例 4:6 个节点,主节点和辅助节点中的 AD 超过 1 个
      • 在主区域中:node0 in AD1 、node1 in AD2 、node2 in AD3 、node3 in AD1 、node4 in AD2 、node5 in AD3
      • 在辅助区域中:AD1 中的 node1、AD2 中的 node2、AD1 中的 node3、AD2 中的 node4、AD1 中的 node5、AD2 中的 node6

      解决方案:

      主要需要多个卷组:(切换之后的另一种方式是相同的)

      • 带有 node0 的 BV 的 volume-group-reg1AD1-reg2AD1 复制到辅助 AD1 (对于辅助 node1)
      • 带有 node1 的 BV 的 volume-group-reg1AD2-reg2AD2 复制到辅助 AD2 (对于辅助 node2)
      • 带有 node2 的 BV 的 volume-group-reg1AD3-reg2AD1 复制到辅助 AD1 (对于辅助 node3)
      • 带有 node3 的 BV 的 volume-group-reg1AD1-reg2AD2 复制到辅助 AD2 (对于辅助 node4)
      • 带有 node4 的 BV 的 volume-group-reg1AD2-reg2AD1 复制到辅助 AD1 (对于辅助 node5)
      • 带有 node5 的 BV 的 volume-group-reg1AD3-reg2AD2 复制到辅助 AD2 (对于辅助 node6)
  7. 从辅助中间层主机分离原始块存储卷。

    注意:

    不能卸载或分离引导卷。

    对辅助主机中的每个中间层主机执行以下操作:
    1. 卸载从主数据库复制的数据块存储卷。
      确保没有运行 oracle 进程;否则,卸载将失败。
      例如:
      [opc@host ~]$ sudo umount /u01/data
    2. root 用户身份编辑 /etc/fstab 文件,并删除已卸载的块存储卷的条目。
      这会阻止它在下次重新引导时尝试挂载原始块存储卷。在 /u01/data 中挂载的卷的示例条目:
      ..
      #Remove this entry:
      #UUID=9e87cf72-a75c-4dff-9825-432f1668d8f9 /u01/data ext4 auto,defaults,_netdev,nofail 0 2
    3. 从 OCI 控制台分离块存储卷。
      依次转至每个块存储卷附加的实例从实例分离。OCI 控制台要求您在完成分离之前运行一些 ISCSI 命令。
    4. 在辅助节点中的所有中间层节点中重复这些步骤。
  8. 删除或重命名辅助中的分离的 OCI 块存储卷
    不再使用从辅助中间层主机分离的原始数据块存储卷。您可以立即删除它们,也可以稍后重命名和删除。
  9. 在辅助中间层主机中重新启动 systemd 守护进程。
    要刷新对以前挂载的设备的任何缓存引用,请运行以下命令:
    sudo systemctl daemon-reload
  10. 如果需要,准备脚本以替换特定于每个站点的信息。

    仅当块存储卷包含特定于每个站点的信息时,此操作才适用。否则,无需执行任何操作。

    根据您的特定要求创建脚本以替换本地站点信息。例如,执行搜索和替换,或恢复特定于站点的数据的备份副本。请确保将这些脚本存储在未复制的文件夹中。

    此时,请运行脚本。下次执行验证、切换或故障转移时,将使用这些脚本。

    提示:

    Oracle WebLogic 示例

    例如,复制包含 WebLogic 域的块存储卷时。在切换或故障转移期间,需要对配置执行替换以指向本地数据库。本文档提供了自动执行此替换的示例脚本。

    数据库类型 替换脚本和下载步骤 准备步骤
    Oracle Base Database Service 或 Oracle Exadata Database Service

    replacement_script_BVmodel.sh

    1. 转到 GitHub https://github.com/oracle-samples/maa 中的 MAA 存储库
    2. 下载 wls_mp_dr 目录中的所有脚本。

      该脚本位于文件夹 wls_mp_dr/Block_Volume_Replica_Method

    3. 复制到所有中间层主机。

    此脚本将替换数据库连接字符串。它还会清除 WebLogic 服务器(.lck.state)的状态文件以进行干净启动。

    通过为每个站点中的数据库提供本地和远程值,在每个主机中使用相应的值对其进行编辑和定制。

    请注意,这些值因站点而异。在 site1 主机中对其进行定制时,“LOCAL(本地)”值引用 site1 的值,“REMOTE(移动)”值引用 site2 的值。在 site2 主机中定制脚本时,“LOCAL(本地)”值将引用 site2,将“REMOTE(远程)”值引用到 site1。
    自治数据库

    fmwadb_switch_db_conn.sh

    1. 转到 GitHub https://github.com/oracle-samples/maa 中的 MAA 存储库
    2. 下载 app_dr_common 目录中的所有脚本。

      下载 fmw-wls-with-adb-dr 目录中的所有脚本。

    3. 复制到所有中间层主机。

      这些脚本相互调用。

    4. 将两个目录的所有脚本放置在同一文件夹中。

    您无需编辑脚本。文件夹和口令的值作为输入进行传递。

    要运行该脚本:
    ./fmwadb_switch_db_conn.sh WALLET_DIR WALLET_PASSWORD

    其中,WALLET_DIR 是包含要连接到本地数据库的 tnsnames.ora、密钥库和信任库文件的文件夹。

    确保副本中未覆盖 WALLET_DIR 文件夹。

    此时不要运行该脚本。

验证 OCI 块存储卷的复制

在切换或故障转移操作中,复制的信息在启动进程之前必须在备用站点中可用且可用。验证辅助系统时(通过在快照模式下打开备用数据库),这也是必需的。

此图显示了激活如何从副本创建可附加的 OCI 块存储卷。



activation-create-bv-oracle.zip

执行以下操作可使复制的卷在备用系统中可用:

  1. 激活备用站点中的副本。
    无法直接挂载 OCI Block Volumes 副本;必须先激活它们。激活块存储卷 (block volume,BV) 副本时,将创建“可连接”BV 作为复制的 BV 的克隆。然后,您可以将克隆的 BV 连接到计算实例。
    执行以下步骤在备用站点中激活副本:
    1. 在 OCI 控制台中,转到备用站点的区域。依次选择 Block StorageVolume Group Replicas
    2. 单击卷组副本,然后单击激活
    3. 命名由于此激活而创建的卷组。为了简单起见,请使用与主区域相同的名称。
    4. 对备用站点中的所有卷组副本重复相同的步骤。
  2. 将复制的块存储卷连接到备用站点中的中间层主机。
    1. 在 OCI 控制台中,依次选择存储块存储卷以查找在备用站点中激活后创建的可附加 OCI 块存储卷
    2. 将相应的块存储卷连接到相应的主机。依次单击块存储卷附加的实例附加到实例。要简化此过程,请选择使用 Oracle Cloud Agent 自动连接到 iSCSI 附加的卷
      云代理将自动运行 iSCSI 命令,因此您不必运行这些命令。要使用此功能,请确保在主机中启用块存储卷管理插件。
    3. 如果不使用 Oracle Cloud Agent,请手动运行 iSCSI 命令。单击连接的块存储卷的 ISCSI Commands & Information ,并在中间层主机中运行“用于连接的命令”中提供的 ISCSI 命令。
  3. 在备用主机中挂载复制的块存储卷。
    对每个块存储卷执行以下操作:
    1. 获取新连接的块存储卷的 UUID。
      块存储卷在主站点中的 UUID 相同。例如:
      [root@prefix-wls-0 opc]# sudo blkid
      /dev/sda3: UUID="974147f5-d731-41de-bba8-56ff78ed1c9c" TYPE="xfs"    PARTUUID="4a95c68a-bc70-4be9-bce8-b15e995fcf46"
      /dev/sda1: SEC_TYPE="msdos" UUID="593B-B893" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="c5ac3089-6a91-40e0-bcc1-212ba0b43418"
      /dev/sda2: UUID="9ca12daa-d7ea-44a2-8680-5b676488b054" TYPE="swap" PARTUUID="682a63d1-d3ec-4019-b372-43720aaae717"
      /dev/sdb: UUID="35e72262-979a-4d84-85ce-a6f91e3b1250" TYPE="ext4" 
      /dev/sdc: UUID="c293b5b5-005c-43e9-8c2f-02e873b76926" TYPE="ext4" 
    2. 如果尚未挂载,请在主机的 /etc/fstab 文件中添加要挂载的相应 UUID 的条目,并在重新引导后保留挂载。
      确保使用的文件系统格式(例如 ext4)与主站点中的格式相同。例如:
      UUID=c293b5b5-005c-43e9-8c2f-02e873b76926 /u01/data ext4  auto,defaults,_netdev,nofail
      每个复制的块存储卷的 UUID 保持相同的值。Oracle 建议将来将新添加的条目保留在 /etc/fstab 文件中。因此,在切换或故障转移操作期间,systemd 守护进程下次附加块存储卷时将自动挂载该块存储卷。
    3. 挂载附加的新块存储卷。如果附加设备时 /etc/fstab 文件中已存在相应的条目,则在附加后会自动挂载块存储卷。
      以下示例介绍如何挂载新的附加块存储卷。
      [root@prefix-wls-0 opc]# mount -a
      [root@prefix-wls-0 opc]# df -h| grep /u01/data
      /dev/sdb 49G 1.4G 46G 3% /u01/data
    4. 重复这些步骤以连接所有激活的块存储卷。
  4. 替换辅助中间层主机中特定于站点的信息。
    替换脚本将替换辅助中间层主机中特定于站点的信息。

    提示:

    包含 WebLogic 域的块存储卷的示例

    通过在所有备用中间层主机上运行替换脚本,将数据库连接信息更新为指向本地数据库:

    1. 如果系统使用 Oracle Base Database Service 或 Oracle Exadata Database Service ,则运行 replacement_script_BVmodel.sh 脚本。

      确保它使用适当的值。

    2. 如果系统使用 Oracle Autonomous Database ,则运行 fmwadb_switch_db_conn.sh 脚本。

      脚本需要辅助原始 wallet 的路径和 wallet 密码作为输入。

      如果 tns_admin 文件夹位于 DOMAIN_HOME/config 文件夹下,则只能在管理主机上运行该脚本。其余节点将在托管服务器启动时下载更新的 tnsnames.ora。否则,请在所有中间层主机上运行该脚本。

  5. 清除服务器的锁定文件。
    复制的块存储卷可能包含中间层进程的锁定文件,因为副本在主进程启动时运行。在辅助进程中启动这些进程之前,可能需要清除这些文件。否则,它们可能会阻止中间层进程启动

    提示:

    包含 WebLogic 域的块存储卷的示例

    主文件夹中可能有 ${DOMAIN_HOME}/servers/*/data/nodemanager 文件夹中的 .lck.pid.state 文件。在尝试启动节点管理器和服务器之前,请确保已清除这些文件。例如:

    rm -f ${DOMAIN_HOME}/servers/*/data/nodemanager/*.lck
    rm -f ${DOMAIN_HOME}/servers/*/data/nodemanager/*.state
    rm -f ${DOMAIN_HOME}/servers/*/data/nodemanager/*.pid
    

    您可以将此操作包含在替换脚本中,也可以作为 Oracle WebLogic 启动的上一步操作。

    激活将从副本创建可附加的块存储卷,如上图中所示。
  6. 切换或故障转移完成后,必须分离并删除具有备用角色的站点的块存储卷。在备用站点上完成验证(通过在快照模式下打开备用数据库)并希望将其还原为备用角色时,这也是必需的。
    1. 卸载备用站点中从主站点复制的所有块存储卷。
      [root@prefix-wls-0 opc]# umount /u01/data
    2. 分离备用块存储卷。
      使用 OCI 控制台 UI(或 API)将卸载的块存储卷与备用中间层主机分离,以便为将来做好准备。如果您使用 Oracle Cloud Agent 连接块存储卷,则代理会运行 iSCSI 命令以注销 iSCSI 目标。
    3. 删除备用数据库中的块存储卷和组。

      从备用中间层主机中删除或重命名分离的卷,以防止错误地挂载它们。

      删除备用站点中未使用的卷组。它们将不再被使用。

OCI 块存储卷执行持续复制

使用此实施时,请遵循以下关于正在进行的复制的建议:

  • OCI 自动在后台执行 OCI Block Volumes 复制。在系统的生命周期中,唯一需要做的就是确保具有主要角色的系统的卷组已启用跨区域副本。
  • 请考虑使用 OCI Full Stack Disaster Recovery 来自动执行切换和故障转移任务。只需单击一下 OCI 控制台,即可运行切换或故障转移计划。简化与块存储卷副本相关的所有任务的执行非常有用。
  • 复制功能是对备份功能的补充,而不是替代功能。确保为所复制的块存储卷启用备份策略。这将提供跨区域副本之外的数据保护,从而使您能够恢复到某个时间点。
  • 维护特定于每个站点的信息,并使其保持最新。 例如,如果文件系统包含包含要连接到 Oracle Autonomous Database 的对象的文件夹,请维护此文件夹的备份副本。在 wallet 中执行更新时,请确保更新文件夹的备份。这样,它将在后续的切换和故障转移中正确恢复。
  • 切换或故障转移操作后,更改副本方向。 为此:
    • 在新主站点的 OCI Block Volumes 组中启用副本到新备用站点。
    • 禁用原始主服务器的上一个复制,并删除未使用的块存储卷。