使用中心暂存位置实施 rsync

此实施使用 rsync 技术并遵循基于中央暂存位置的模型。在此模型中,有一个堡垒主机节点充当协调器。它连接到需要复制的每个主机,并将内容复制到公用暂存位置。

使用中央暂存位置实现 rsync 的优点包括:

  • 这是一个适用于任何中间层的通用解决方案,因此,如果您有多个系统,则可以在所有系统中都使用相同的方法。
  • 它不依赖于底层存储类型;它可用于复制位于块存储卷、NFS 等中的文件对象。
  • 存储可以保留在辅助节点中挂载。因此,在每次切换或故障转移操作中,无需执行其他步骤即可连接或挂载辅助存储。
  • 与点对点实施相比,维护更简单,因为有一个用于运行脚本的中心节点。

使用中央暂存位置实施 rsync 的注意事项包括:

  • 用户有责任为每个环境创建定制脚本并定期运行它们。
  • 用户有责任实施一种逆向复制方向的方法。
  • 此模型要求为中央暂存位置提供额外的主机和存储。

与点对点模型类似,rsync 脚本可以使用拉式模型或推式模型。在“拉取”模型中,脚本将文件从远程节点复制到本地节点。在“推送”模型中,脚本将文件从本地节点复制到远程节点。Oracle 建议使用拉式模型从主主机检索内容,因为它会使主节点从副本开销中卸载。

使用中央暂存设置 rsync 的复制

要实现具有中央暂存位置的 rsync,需要满足以下条件:

  • 与所有主机(主要主机和辅助主机)通过 SSH 连接的堡垒主机。
  • 堡垒主机中的暂存文件夹,具有足够的空间来存储所复制的中间层文件系统内容。
  • 使用 rsync 将中间层文件对象从此暂存文件夹复制至此暂存文件夹的脚本。rsync 脚本可以跳过副本中的某些文件夹(如锁定文件、日志、临时文件等)。
  • 一种管理站点特定信息的方法,从副本中排除该信息,或者在副本后使用相应的信息更新该信息。
  • 安排这些脚本定期运行。
  • 一种在切换或故障转移后更改副本方向的机制。此机制可以是标识站点角色的动态检查,也可以是切换或故障转移之后的手动更改(例如,禁用和启用相应的脚本)。
本文档提供了此模型的两个不同的实现示例:
  • 示例 1:使用 Oracle Fusion Middleware Disaster Recovery Guide 脚本
  • 示例 2:使用 WLS-HYDR 框架
示例 1:使用 Oracle Fusion Middleware Disaster Recovery Guide 脚本

注意:

此示例适用于任何中间层系统。作为参考,它使用 Oracle Fusion Middleware Disaster Recovery Guide 提供的脚本为 Oracle WebLogic DR 系统执行中间层副本:rsync_for_WLS.shrsync_copy_and_validate.sh。但是,这些脚本通常适用,并且提供了足够的灵活性来同步 OCI 中的中间层文件系统对象。

Oracle Fusion Middleware Disaster Recovery Guide 提供了 rsync 脚本以在中间层系统中执行远程副本。这些脚本对任何 rsync 模型都有效。此特定示例说明如何将它们用于中央分段模型。此实施分为两个步骤使用拉式操作:

  • 堡垒主机从所有主主机中提取内容并将其存储在中央暂存中。
  • 然后,所有辅助节点执行拉取操作以从中央回写收集内容。

要使用这些脚本设置中间层复制,请参见 Replicating the Primary File Systems to the Secondary Site in the Oracle Fusion Middleware Disaster Recovery Guide,特别是 Rsync Replication Approach 部分和 Using a Staging Location 步骤。



replica-rsync-scripts-oracle.zip

示例 2:使用 WLS-HYDR 框架

注意:

此示例适用于 Oracle WebLogic Server 系统。它使用 WLS-HYDR 框架的复制模块,但适用于任何 Oracle WebLogic Server DR 环境,而不管它是否使用 WLS-HYDR 框架创建。

在此模型中,中心主机节点充当总协调器,执行拉式和推式操作。它连接到需要复制的每个主机,并将内容复制到公用暂存位置。此节点还协调从暂存位置到目标主机的复制。此方法将单个节点从副本的开销中卸载。

WLS-HYDR 框架在 DR 设置期间使用此方法进行初始复制。然后,可以重复使用框架的复制模块来定期重复拉取和推送。有关指向 WLS-HYDR 框架和其他资源的链接,请参阅本手册中的“浏览更多”。

堡垒节点执行以下两个步骤来执行副本:

  • 提取操作,它连接到主主机并将文件系统内容复制到堡垒主机中的暂存文件夹。
  • 推送操作,它将内容从堡垒的暂存文件夹复制到所有辅助主机。

中心节点执行所有操作,因此调度、日志、维护等都集中在该节点上。当系统有许多节点时,与点对点模型或前面的示例相比,此方法更有效。



replica-wls-hydr-framework-oracle.zip

如果使用 WLS-HYDR 框架创建辅助系统,则堡垒主机已准备好执行副本。否则,此时可以对其进行配置。按照以下步骤设置副本:

  1. 准备堡垒。

    如果使用 WLS-HYDR 框架创建辅助系统,则堡垒主机已准备好执行副本。如果没有,请检查 WLS-HYDR 框架 GitHub 系统信息库中的自述文件以准备堡垒主机。

  2. 查看 WLS-HYDR 配置文件。
    确保 WLS-HYDR 配置文件(replication.propertiesoci.envprem.env)包含系统的正确信息。
  3. 运行 WLS-HYDR 复制模块。
    您可以使用框架的复制模块同步所有项(Oracle WebLogic Server 域和产品),也可以独立同步这些项。在所有情况下,完全同步包括两个操作:一个是拉取操作,从主服务器检索内容,另一个是推送操作,将内容复制到辅助服务器。

    注意:

    始终在 PUSH 之前运行 PULL 操作。否则,您将不会推送最新版本的内容。
    1. 要同步所有内容,请执行以下操作:
      • 将所有内容从主主机拉到堡垒主机的暂存:
        WLS-HYDR_BASE/lib/DataReplication.py pull
      • 要将堡垒主机的暂存中的所有内容推送到辅助主机:
        WLS-HYDR_BASE/lib/DataReplication.py push
    2. 要仅同步产品对象,请执行以下操作:
      • 将产品从主要主机拉到堡垒主机的暂存:
        WLS-HYDR_BASE/lib/DataReplication.py pull -d products
      • 要将产品从堡垒主机的暂存推送到辅助主机:
        WLS-HYDR_BASE/lib/DataReplication.py push -d products
    3. 仅同步配置(WebLogic 域)
      • 要将配置从主主机检索到堡垒主机的暂存,请运行以下拉式操作:
        WLS-HYDR_BASE/lib/DataReplication.py pull -d private_config
      • 要将配置从堡垒主机的暂存复制到辅助主机,请运行以下推送操作:
        WLS-HYDR_BASE/lib/DataReplication.py push -d private_config
    4. 如果存在共享配置文件夹( OCI 文件存储文件系统中的共享 Oracle WebLogic 域):
      • 要将共享配置从主主机检索到堡垒主机的暂存,请运行以下拉式操作:
        WLS-HYDR_BASE/lib/DataReplication.py pull -d shared_config
      • 要将共享配置从堡垒主机的暂存复制到辅助主机,请运行以下推送操作:
        WLS-HYDR_BASE/lib/DataReplication.py push -d shared_config
  4. 准备数据库连接字符串替换。
    复制 WebLogic 配置的常规 WLS-HYDR 提取和推送操作会跳过副本中的 tnsnames.ora 文件,因此您无需在每次后续复制中更新 tnsnames.ora

    但是,如果数据库是 Autonomous Database,则采用不同的方法。要连接到自治数据库,TNS 管理文件夹还包含密钥库和信任存储文件,这些文件对于主数据库和备用数据库是不同的。

    下表汇总了如何在每个方案中管理数据库连接信息:
    数据库类型 替换脚本和下载步骤 用途
    Oracle Base Database Service 或 Oracle Exadata Database Service 用于管理 tnsnames.ora 的脚本包含在 WLS-HYDR 框架复制模块中。

    确保 replication.properties 文件中的 JDBC 部分包含正确的数据。

    此操作在 bastion 中运行,并针对 tnsnames.ora 文件执行拉取、更新和推送。要执行完整操作,请执行以下操作:WLS-HYDR/lib/DataReplication.py tnsnames

    无需运行,除非您对 tnsnames.ora 执行更改(例如,添加别名)。

    自治数据库

    fmwadb_switch_db_conn.sh

    转到 GitHub https://github.com/oracle-samples/maa 中的 Oracle MAA 存储库

    下载 app_dr_common 目录中的所有脚本。

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

    复制到所有中间层主机。这些脚本相互调用。将两个目录的所有脚本放置在同一文件夹中。

    此脚本必须在所有备用中间层主机上运行。它必须启动备用数据库中的 WebLogic 服务器以执行验证、切换或故障转移操作之前运行。

    它将 WebLogic 使用的 TNS 管理文件夹替换为指定的输入文件夹。它还会更新数据源中的 wallet 密码属性。

    运行该脚本的语法:
    fmwadb_switch_db_conn.sh WALLET_DIR WALLET_PASSWORD
    其中,WALLET_DIR 是包含要连接到本地数据库的 tnsnames.ora、密钥库和信任库文件的文件夹。确保副本中未覆盖 WALLET_DIR 文件夹。

使用中央暂存验证 rsync 的复制

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

在此实施中,辅助站点中始终提供存储,您无需连接或挂载任何卷。您可能需要的唯一操作是确保其中包含最新版本的内容如下。

  1. 运行复制。
    运行脚本以复制内容的最后一个版本。
  2. 禁用调度的复制。
    在最后一个副本完成后,禁用所有副本脚本。否则,它可能会干扰切换、故障转移或验证过程。操作后,您将按照适当的方向再次启用脚本。
  3. 替换辅助中间层主机中特定于站点的信息。
    如果要复制的文件系统对象包含特定于站点的信息,请确保副本不会覆盖该信息或副本后更新该信息。

    提示:

    例如,Oracle Fusion Middleware Disaster Recovery Guide 和 WLS-HYDR 复制模块的 rsync 脚本会跳过副本中的文件 tnsnames.ora,因此您无需在每次复制后对其进行更改。

    如果系统使用 Oracle Autonomous Database ,则还原辅助区域中所需的 wallet 文件夹以连接到辅助区域的数据库。可以在所有备用中间层主机中使用替换脚本 fmwadb_switch_db_conn.sh。它需要作为输入,辅助原始 wallet 所在的路径和 wallet 密码。

然后,可以执行验证系统所需的其他步骤。

对具有中心暂存位置的 rsync 执行持续复制

定期运行复制脚本,使辅助域与主域保持同步。

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

  • 使用 OS crontab 或其他调度工具定期运行复制脚本。例如,使用灾难恢复指南提供的 rsync 脚本时,请按照 Oracle Fusion Middleware Disaster Recovery GuideScheduling Ongoing Replication With Rsync Scripts 部分中的步骤操作。有关指向这些资源和其他资源的链接,请参阅本手册中的“浏览更多”。对于复制频率,请遵循本手册前面中间层文件构件中介绍的准则。
  • 使中间层进程在备用站点中停止。如果服务器在复制更改时在备用站点中启动,则更改将在下次启动时生效。仅在验证备用站点时或在切换或故障转移过程中启动它们。
  • 维护特定于每个站点的最新信息。例如,如果文件系统包含一个文件夹,其中包含要连接到 Autonomous Database 的对象,请维护此文件夹的备份副本。在 wallet 中执行更新时,请确保更新 wallet 文件夹的备份。这样,它将在后续的切换和故障转移中正确恢复。
  • 切换或故障转移后,反转副本方向。这取决于具体实施情况。这可以使用动态检查来确定谁是活动站点,或者在切换或故障转移后进行手动更改,禁用和启用相应的脚本。

    提示:

    • 使用 DR 指南提供的 rsync 脚本(示例 1)时,请确保创建等效脚本以朝其他方向执行副本。在 crontab 或调度工具中,仅为实际角色启用相应的脚本。
    • 使用 WLS-HYDR(示例 2)时,更改主节点在 WLS-HYDR 框架中的角色,因此下一个复制将朝另一个方向进行。为此,请编辑 WLS-HYRDR/lib/DataReplication.py 并从以下内容进行更改:
      if True:
             PRIMARY = PREM 
             STANDBY = OCI
            	 else:
      	        PRIMARY = OCI
                     STANDBY = PREM
      转换为以下语句:
      if False:
      	        PRIMARY = PREM
                      STANDBY = OCI
             	else:
                      PRIMARY = OCI
                      STANDBY = PREM