使用 OCI Full Stack Disaster Recovery 通过 PostgreSQL 自动执行 OCI Database 的冷灾难恢复
简介
Oracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR) 只需单击一下即可编排全球 OCI 区域之间的计算、数据库和应用转换。客户可以自动执行恢复一个或多个业务系统所需的步骤,而无需重新设计或重新构建现有基础设施、数据库或应用,也无需专门的管理或转换服务器。
OCI Database with PostgreSQL 是一项完全托管的 PostgreSQL 兼容服务,具有智能调整大小、高持久性。该服务可在创建和删除数据库表时自动扩展存储,从而简化管理并优化存储支出。数据在传输中和静态都是加密的。OCI Database with PostgreSQL 专为实现高可用性而设计,即使在可用性域 (AD) 出现故障时也能提供持久性。
在本教程中,您将了解如何使用 PostgreSQL 为 OCI 数据库自动执行冷灾难恢复。其中概述了利用 OCI Full Stack DR 服务管理切换和故障转移流程的过程。
注:这种类型的灾难恢复 (Disaster Recovery,DR) 策略依赖于备份和恢复机制,因此最适合非关键应用程序,其中恢复时间目标 (Recovery Time Objectives,RTO) 和恢复点目标 (Recovery Point Objectives,RPO) 的业务需求并不过高。
体系结构描述
本教程介绍的架构展示了基于 OCI 虚拟机 (VM) 运行的典型 Web 应用,该应用与 OCI Database 与 PostgreSQL 无缝集成。
OCI 负载平衡器部署在两个区域的公共子网内,以高效管理外部用户连接。通过 DNS 流量引导,应用用户将路由到区域 X 中的当前活动后端。
插图 fsdr_psql_backup_restore_dr-Physical_Architecture.png 的说明
灾难恢复体系结构说明
此 Web 应用程序的 DR 策略涉及一种全面的方法,包括通过卷组复制对 VM 的引导卷进行完整复制。
对于具有 PostgreSQL 的 OCI 数据库,支持备份副本定期将自动备份复制到远程区域,以确保数据保护和灾难恢复就绪。
插图 fsdr_psql_backup_restore_dr-Physical_DR_Architecture.png 的说明
此部署的恢复解决方案要求 OCI Full Stack DR 在恢复操作(例如故障转移或切换)期间运行一系列定制 Python 脚本。
本教程中引用的脚本由 EMEA 技术工程团队提供,可从以下位置获取: full-stack-disaster-recovery ,它是专门为此 DR 解决方案定制的。
本教程介绍了如何下载这些脚本以及如何在以后的任务中使用它们。
注意:提供了以下脚本以提供一般指导。您可以使用自己的脚本,也可以根据公司策略和安全要求定制脚本。
负载平衡器已在远程区域中预配,确保当 Web 应用 VM 在切换或故障转移期间迁移到远程区域时,它已准备好无缝处理流量如下图所示,DNS 引导策略可确保无缝切换负载平衡器,并将健康检查附加到当前可用负载平衡器后端集的路由。有关详细信息,请参阅 OCI Traffic Management 。
负载平衡器侦听器在端口 80
(前端)和 8000
(API) 上设置,并在缺省配置中分别路由到端口 3000
和 8585
。
插图 fsdr_psql_backup_restore_dr-Physical_Network_Architecture.png 的说明
下图说明了自动备份从主要区域复制到远程区域的工作流。
插图 fsdr_psql_backup_restore_dr-Logical_Workflow_Auto_Copy_Backup_to_Remote.png 的说明
在这种情况下,备份可以安排为每天运行,然后复制到远程区域以实现额外的冗余,从而实现 24 小时的恢复点目标 (Recovery Point Objective,RPO)。
注:
- 确保启用自动备份并启用对远程区域的备份副本。如果没有此步骤,恢复过程可能会失败,因为备份在辅助区域中不可用。
- 在本教程中,我们侧重于自动执行创建、传输到其他区域以及从备份创建新数据库系统的任务。您可以按照 OCI 数据库(其中概述了 PostgreSQL 文档)手动执行这些相同的步骤。
如果用例需要较短的 RPO,解决方案是安排更频繁的备份,并根据业务需求使用提供的脚本(psql_create_bkp.py
和 psql_copy_bkp.py
)手动触发备份并将其复制到远程区域。此外,可以使用 psql_copy_config.py
将具有 PostgreSQL 配置的 OCI 数据库复制到远程区域,这是还原数据库系统扩展和参数所必需的。
插图 fsdr_psql_backup_restore_dr-Logical_Workflow_Manual_Backup_Copy_to_Remote.png 的说明
所有脚本都位于 GitHub 上,并在以下各节中详细介绍。
注:请确保根据您的业务需求安排此脚本(或类似脚本),以定期备份并将其复制到远程区域。如果没有此步骤,恢复过程可能会失败,因为备份在辅助区域中不可用。
恢复是如何工作的?
在执行计划的切换后,角色将反转:主工作负荷将在区域 2 中运行,而备用工作负荷将在区域 1 中运行。体系结构将如下所示:
插图 fsdr_psql_backup_restore_dr-Physical_Switchover_Architecture.png 的说明
在当前设置中,我们利用 OCI 专用 DNS 服务管理 DNS 记录,该记录使用 PostgreSQL 端点将流量定向到活动的 OCI 数据库。在恢复过程中,此 DNS 记录通过定制脚本 (psql_update_dns.py
) 进行更新,以使用 PostgreSQL 反映新的 OCI 数据库,从而确保无缝切换或故障转移以及服务的连续性。
下图说明了在备用区域中使用 PostgreSQL 备份还原最新 OCI 数据库的工作流,然后该备份将成为新的主区域。
插图 fsdr_psql_backup_restore_dr-Logical_Workflow_Switchover_to_Remote.png 的说明
整个教程的定义和假设
-
区域:
-
第 1 区域(迪拜):迪拜最初将作为主要区域。但是,此角色将在切换过程中转换为备用,这将在后面的任务中执行,作为灾难恢复计划的一部分。
-
第 2 区域(阿布扎比):阿布扎比最初将用作备用区域。此角色稍后将在切换过程之后转换为主角色,这将在后续任务中执行,作为灾难恢复过程的一部分。
-
-
区间:您可以将此部署和 OCI Full Stack DR 组织到符合 IT 监管标准的区间方案中。我们已选择将本教程的所有 OCI 资源组织在一个区间中。
Web 应用程序虚拟机
本教程中的 Web 应用程序旨在展示端到端方案体系结构,单个部署脚本 (deploy_application_demo.sh
) 将在 Web 应用程序 VM 中配置和部署应用程序堆栈。有关部署应用程序的进一步说明,请参见系统信息库中的以下位置: link-to-web-app-sample
前端预览:报告中可见的行直接源自 OCI Database 和 PostgreSQL。
插图 webapp-frontend-preview.png 的说明
目标
本教程将介绍以下任务:
- 任务 1:为灾难恢复准备环境。
- 任务 2:在这两个区域中创建 DR 保护组 (DR Protection Groups,DRPG)。
- 任务 3:将成员添加到 DR 保护组。
- 任务 4:在区域 2 中创建基本 DR 计划。
- 任务 5:自定义区域 2 中的切换计划。
- 任务 6:自定义区域 2 中的故障转移计划。
- 任务 7:在区域 2 中运行 DR 计划的预检查。
- 任务 8:在区域 2 中运行切换计划。
- 任务 9:在区域 1 中创建和自定义 DR 计划。
- 任务 10:在区域 1 中运行故障转移计划。
任务 1:为灾难恢复准备环境
任务 1.1:创建卷组并启用复制
在区域 1 中为示例 Web 应用程序 VM 创建卷组,并确保它在区域 2 中复制。确保每个应用程序 VM 的引导卷(示例 WebApp)是卷组的成员,并且该卷组将复制到区域 2。
以下映像显示了创建的卷组(包括 Web 应用程序 VM 的引导卷),并且已成功启用到区域 2 的复制。有关更多信息,请参见 Creating a Volume Group 。
插图 psql-webapp-create-vol-grp.png 的说明
插图 psql-webapp-create-vol-grp-2.png 的说明
插图 psql-webapp-create-vol-grp-3.png 的说明
配置 cross region replication(跨区域复制)后,单击 Next(下一步),直到转到 Summary(概要)并单击 Create(创建)。
任务 1.2:为自动化部署准备 Web 应用程序 VM
-
从此处下载/克隆 GitHub 系统信息库:( oci-postgressql-colddr ) 位于
/home/opc
文件夹中。 -
将脚本设置为可执行。
chmod +x deploy_application_demo.sh
-
使用两个区域中的 PostgreSQL 更新
deploy_application_demo.sh
脚本,了解 Web 应用程序和 OCI 数据库的必要详细信息。WEBAPP_HOME
:部署的根位置(从中执行脚本的位置)。例如,/home/opc
。WEBAPP_URL
:指向使用 APIhttp://webapi.yoururl.eu:8000
的计算的 URL。PRIMARY_REGION
: OCI 主区域。格式为eu-frankfurt-1
。STANDBY_REGION
: OCI 备用区域。PRIMARY_SECRET_OCID
:主区域 (ocid1.vaultsecret.oc1.me-dubai-1.xxxxxx
) 中包含 PostgreSQL 密码的 OCI Vault 密钥 OCID。STANDBY_SECRET_OCID
:备用区域 (ocid1.vaultsecret.oc1.me-abudhabi-1.xxxxxx
) 中包含 PostgreSQL 密码的 OCI Vault 密钥 OCID。PG_USER
:用于加载示例数据的数据库用户 (postgresql_sample.sql
)。PG_DB
:用于加载样例数据的数据库。默认值为postgres
。PG_HOST
:数据库的专用区域条目的 FQDN。
注:
- 确保准确更新所有值。
- 使用默认配置时,其他参数可以保持不变。
-
执行
deploy_application_demo.sh
脚本。./deploy_application_demo.sh
这将部署前端、后端、配置服务和防火墙。
成功部署后,将显示消息 Deployment Complete!。
在本教程中,我们将使用相同的 VM 运行用户定义的脚本。确保充当 DR 控制节点的 VM 已配置为运行命令。有关详细信息,请参阅使用带有 Oracle Cloud Infrastructure Full Stack Disaster Recovery 的运行命令调用定制脚本。
任务 1.3:创建 Web 引导策略
为了保证我们的应用始终指向活动区域,可以利用故障转移流量管理引导策略。引导策略与 OCI Health Checks 服务结合使用时,每 60 秒 (Default TTL) 通过 HTTP 监视器验证一次应用端点。
-
转到 OCI 控制台并导航到网络。
-
单击 Traffic management steering policy(流量管理引导政策)。
-
单击 Create traffic management steering policy(创建流量管理引导策略)。
插图 psql-webapp-dns-create.png 的说明
-
选择故障转移作为策略类型。
- 输入引导策略的名称。
- 为引导策略选择区间。
- 根据您的要求选择 TTL。
-
配置答案池 1 ,以指向区域 1 中的负载平衡器。
- 为此池输入一个有意义的名称。
- 选择记录作为类型。
- 输入区域 1 中 Web 应用程序负载平衡器的 IP。
-
配置答案池 2 ,以指向区域 2 中的负载平衡器。
- 输入池的名称。
- 选择记录作为类型。
- 输入区域 2 中 Web 应用程序负载平衡器的 IP。
-
配置 Pool Priority ,此上下文优先级指定给 Region 1 。
-
单击添加新项以附加 OCI 健康检查策略。
- 选择请求类型作为 HTTP 。
- 输入健康检查的名称。
- 选择运行状况检查的区间。
-
单击 Advanced options 。
- 输入 Web 应用程序的端口,在本例中为
80
。 - 输入 Web 应用程序路径,在本例中为
/
。 - 选择 GET 作为方法。
- 为请求选择超时。
- 输入 Web 应用程序的端口,在本例中为
-
配置连接的域。
- 输入
webapi
端点的子域。 - 选择包含区域(域)的区间。
- 选择相应的区域。
- 对
webapp
端点重复步骤 1 到 3。
- 输入
-
验证所有详细信息是否正确,然后单击 Create traffic management steering policy(创建流量管理引导策略)。一段时间后,创建应显示 completed 。
-
您可以在创建后查看引导策略的概览。在页面末尾,可以查看附加的运行状况检查。
插图 psql-webapp-dxb-dns-create-details.png 的说明
- 单击 Attached health check(附加的健康支票)。
- 导航到健康检查历史记录。
-
您可以在此处查看当前可用的负载平衡器以及过去的可用性。
-
任务 1.4:为 OCI Full Stack DR 创建 Oracle Cloud Infrastructure Identity and Access Management 策略
要为 OCI Full Stack DR 配置所需的 OCI IAM 策略,请参见:
任务 1.5:为 OCI Full Stack DR 管理的其他服务创建 OCI IAM 策略
OCI Full Stack DR 必须能够控制和管理其他关键 OCI 服务,例如计算、网络、存储和其他杂项服务。要为其他服务配置所需的 OCI IAM 策略,请参见 Policies for Other Services Managed by Full Stack Disaster Recovery 和 OCI IAM policy 。
任务 2:在两个区域中创建 DR 保护组 (DR Protection Groups,DRPG)
如果此应用程序堆栈的保护组尚不存在,请在区域 1 和区域 2 中创建 DR 保护组。
任务 2.1:在区域 1 中创建保护组
-
转到 OCI 控制台并导航到 DR 保护组。
- 确保将 OCI 区域上下文设置为区域 1 (Dubai)。
- 单击 Migration & Disaster Recovery 。
- 单击 DR 保护组。
-
在区域 1 中创建基本 DR 保护组 (DRPG)。将在后面的步骤中分配对等节点、角色和成员。
- 选择要在其中创建 DRPG 的区间。
- 单击创建 DR 保护组以打开对话框。
- 输入 DRPG 的名称。
- 为 OCI Full Stack DR 日志选择 OCI Object Storage 桶。
- 单击创建。
任务 2.2:在区域 2 中创建保护组
-
转到 OCI 控制台,导航到 DR 保护组。
- 确保 OCI 区域上下文设置为区域 2 (Abu Dhabi)。
- 单击 Migration & Disaster Recovery 。
- 单击 DR 保护组。
-
在区域 2 中创建基本 DR 保护组 (DRPG)。将在后面的步骤中分配对等节点、角色和成员。
- 选择要在其中创建 DRPG 的区间。
- 单击创建 DR 保护组以打开对话框。
- 输入 DRPG 的名称。
- 为 OCI Full Stack DR 日志选择 OCI Object Storage 桶。
- 单击创建。
任务 2.3:关联区域 1 和区域 2 中的保护组
将每个区域中的 DRPG 关联为彼此的对等节点,并分配主数据库和备用数据库的对等角色。在任何 DR 操作/DR 计划执行过程中,OCI Full Stack DR 会自动更改主数据库和备用数据库的角色;您无需随时手动管理角色。
-
转到 DR 保护组详细信息页面。
- 确保将 OCI 区域上下文设置为区域 1 (Dubai)。
- 单击关联以开始处理。
-
输入参数,如下图中所示。
- 角色:选择主要角色。OCI Full Stack DR 将自动将备用角色分配给区域 2。
- 对等区域:选择创建其他 DRPG 的区域 2 (Abu Dhabi)。
- 对等 DR 保护组:选择创建的对等 DRPG。
- 单击 Associate 。
关联完成后,OCI Full Stack DR 将显示如下图中所示。
- 目前的主要同行 DRPG 是迪拜(地区 1)。
- 当前的备用对等数据库 DRPG 是阿布扎比(区域 2)。
插图 psql-webapp-dxbauh-drpg-primary.png 的说明
每当上下文/视图从全局视角显示所有 DR 保护组时,都可以找到相同的信息,如下图中所示。
- 目前的主要同行 DRPG 是迪拜(地区 1)。
- 当前的备用对等数据库 DRPG 是阿布扎比(区域 2)。
插图 psql-webapp-dxbauh-drpg-standby.png 的说明
任务 3:向 DR 保护组添加成员
在此任务中,我们将以下 OCI 资源添加到区域 1 中的主 DRPG。
- 托管 Web 应用程序的计算实例将添加为移动 VM。
- 包含 Web 应用程序计算节点的引导卷的卷组。
- 主要负载平衡器。
任务 3.1:将成员添加到区域 1 中的 DRPG
-
选择区域 1 中的 DRPG,如下图中所示。
- 确保 OCI 区域上下文为区域 1 (Dubai)。
- 选择区域 1 中的 DRPG。
- 选择成员。
- 单击添加成员以开始处理。
-
为 Web 应用程序 VM 添加计算实例。
- 确认有关 DR 计划的警告。
- 在计算中输入成员资源类型。
- 选择托管 Web 应用程序的计算实例。
- 选择移动实例。
- 单击添加 VNIC 映射以选择在恢复期间要分配给区域 2 中的 VNIC 的 VCN 和子网。
- 单击 Show advanced options 。
- 在设置中,选择保留容错域。
- 验证详细信息,然后单击添加。
插图 psql-webapp-dxb-drpg-add-compute.png 的说明
插图 psql-webapp-dxb-drpg-add-compute-vnic.png 的说明
插图 psql-webapp-dxb-drpg-add-compute-vnic-details.png 的说明
-
添加包含 Web 应用程序 VM 的引导卷的块存储卷组。
- 确认有关 DR 计划的警告。
- 选择卷组作为成员资源类型。
- 确保选择了包含卷组的正确区间并选择卷组。
- 验证详细信息,然后单击添加。
-
在此示例中,我们将 OCI Load Balancer 添加为区域 1 中的 DRPG 成员。
- 确认有关 DR 计划的警告。
- 选择负载平衡器作为成员资源类型。
- 确保为负载平衡器选择了正确的区间,并选择要添加的负载平衡器。
- 选择要在区域 2 中使用的目标负载平衡器。
- 选择 Source Backend Set(源后端集),这是 Web 应用程序 VM 使用的后端集。OCI 负载平衡器可以在多个应用之间共享,并且可以配置多个后端集。在 DR 切换期间,只有此处指定的后端集将配置移至备用区域。
- 选择 Destination Backend Set(目标后端集),这是在区域 2 中创建的空后端集。
- 验证详细信息,然后单击添加。
插图 psql-webapp-dxb-drpg-add-lb.png 的说明
-
验证成员部分是否包含负载平衡器、卷组和计算实例。
任务 3.2:将成员添加到区域 2 中的 DRPG
-
选择区域 2 中的 DRPG,如下图中所示。
- 确保 OCI 区域上下文为区域 2(阿布扎比)。
- 选择区域 2 中的 DRPG。
- 选择成员。
- 单击添加成员以开始处理。
-
在此示例中,我们将 OCI Load Balancer 添加为区域 2 中的 DRPG 成员。
- 确认有关 DR 计划的警告。
- 选择负载平衡器作为成员资源类型。
- 确保为负载平衡器选择了正确的区间,并选择要添加的负载平衡器。
- 选择要在区域 1 中使用的目标负载平衡器。
- 选择 Source Backend Set(源后端集),这是 Web 应用程序 VM 使用的后端集。OCI 负载平衡器可以在多个应用之间共享,并且可以配置多个后端集。在 DR 切换期间,只有此处指定的后端集将配置移至备用区域。
- 选择 Destination Backend Set(目标后端集),此后端集将在区域 2 中创建。
- 验证详细信息,然后单击添加。
插图 psql-webapp-aux-drpg-add-lb.png 的说明
-
验证成员部分是否包含负载平衡器。
任务 4:在区域 2 中创建基本 DR 计划
在本任务中,我们将在区域 2(阿布扎比)中创建与备用 DR 保护组关联的初始切换和故障转移计划。
这些计划的目的是将工作量从主要区域(区域 1)无缝转换为备用区域(区域 2)。作为任何 DR 操作的一部分,两个区域中的 DR 保护组的角色将自动反转:区域 1 中的保护组成为备用组,而区域 2 中的保护组在故障转移或切换后承担主要角色。
OCI Full Stack DR 将使用从先前任务期间添加的成员资源派生的内置步骤预填充这些计划。这些计划稍后将定制,以便在恢复过程中使用 PostgreSQL 管理特定于 OCI Database 的任务。
切换计划始终是在具有备用角色的保护组内创建的。由于第 2 区(阿布扎比)目前是备用保护组,我们将开始在那里制定计划。
任务 4.1:创建 DR 计划
-
通过在区域 2(阿布扎比)中选择 DRPG 创建基本计划
- 确保 OCI 区域上下文为区域 2(阿布扎比)。
- 在区域 2 中选择备用 DRPG。
- 选择价格计划。
- 单击创建计划以开始处理。
-
创建切换计划。
- 为切换计划输入一个简单但有意义的名称。这个名字应该尽可能短,但很容易理解,以帮助减少危机期间的混乱和人为错误。
- 选择计划类型作为切换(已计划)。
- 单击创建。
-
创建故障转移计划。按照相同的过程创建基本故障转移计划,如下图中所示。
- 输入故障转移计划的名称。
- 选择计划类型作为故障转移(未计划)。
- 单击创建。
区域 2 中的备用 DR 保护组现在应具有两个 DR 计划,如下图中所示。这些将处理从区域 1 到区域 2 的转换工作量。您将在区域 1 创建类似的计划,以便在以后的任务中将工作量从区域 2 转换回区域 1。
插图 psql-webapp-auh-drpg-plans.png 的说明
任务 5:自定义区域 2 中的切换计划
在任务 4 中创建的基本 DR 计划包含预填充的恢复任务步骤,这些任务内置到 OCI Full Stack DR 中,不包含任何特定于 OCI Database with PostgreSQL 的恢复任务。此任务说明如何添加自定义、用户定义的 DR 计划组以及管理切换期间需要完成的任务的步骤:
- 在正常关闭 Web 应用程序 VM 后创建数据库备份,以确保数据一致性。
- 将最新的数据库备份传输到远程 OCI 区域 2 以实现冗余和灾难恢复。
- 恢复区域 2 中的最新数据库备份,为切换做好准备。
- 更新专用数据库 DNS 记录,使应用程序 VM 可以无缝连接到区域 2 中的数据库。
- 在区域 1 中使用 PostgreSQL 数据库终止源 OCI 数据库。
任务 5.1:选择切换计划
定位至在任务 4 中创建的切换计划。在任务 5.3 中,您将添加新组。
插图 psql-webapp-auh-drpg-create-switchover-add.png 的说明
任务 5.2:(可选)启用终止对象的 DR 计划组
切换计划中默认禁用了三个计划组,如下图中所示。禁用这些计划组可在测试期间提供保证,确保不会删除任何构件,并确保在测试阶段出现问题时,可行的备份副本保持不变。
但是,这三个规划组旨在终止(删除)任何未来 DR 操作将不再需要的构件。如果不启用这些计划组,则在两个区域之间进行切换时,未使用的对象将继续累积,这可能会导致混淆哪个计算实例和卷组应处于活动状态。
(可选)现在启用这些计划组将有助于避免在投入生产之前手动清理不必要的工件。这一主动步骤可以简化向生产的过渡,并维护更清洁、更易于管理的环境。
插图 psql-webapp-auh-drpg-create-switchover-details-1.png 的说明
-
要启用计划组,请从计划组名称右侧的上下文菜单中选择启用所有步骤。
插图 psql-webapp-auh-drpg-create-switchover-enable.png 的说明
插图 psql-webapp-auh-drpg-create-switchover-enable-check.png 的说明
-
验证是否已启用所有价格计划组。
插图 psql-webapp-auh-drpg-create-switchover-enable-complete.png 的说明
任务 5.3:创建计划组以运行定制脚本
首先添加自定义 DR 计划组,通过 PostgreSQL 备份/恢复 DR 过程根据 OCI 数据库的特定需求定制 DR 工作流。
这些计划组将从区域 1 中的 Web 应用程序 VM 调用必要的脚本。这将确保在应用 VM 联机之前,将 OCI Database with PostgreSQL 完全还原并运行。
应将以下定制计划添加到预填充的切换计划:PostgreSQL - Switchover 、PostgreSQL - Update DNS 和 PostgreSQL - Terminate 。
-
添加定制计划组以使用 PostgreSQL 执行 OCI 数据库的切换。此操作需要备份主区域中的数据库,将数据库配置复制到备用区域,将数据库备份复制到备用区域,最后恢复备用区域中的数据库。
- 单击 Add group 。
- 输入一个简单但描述性的计划组名称。在此示例中,我们将使用
PostgreSQL - Switchover
。 - 选择计划组将插入到 DR 计划中的位置。在此示例中,选择添加之后以在内置计划组 Compute Instances - Launch 之后插入用户定义的计划组。
- 单击添加步骤以打开对话框,我们将在其中指定用于执行 PostgreSQL 切换的脚本。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-so.png 的说明
在添加计划组步骤中,输入以下信息。
- 输入步骤名称。在此示例中,我们将使用
PostgreSQL - Switchover
。与计划组名称相同。 - 选择包含将在其上运行此步骤的实例的区域。在此示例中,脚本将在区域 1 中的 Web 应用程序 VM 上执行。
- 选择运行本地脚本。
- 选择目标实例,该实例是区域 1 中的 Web 应用程序 VM。
- 在脚本参数中,输入包含参数的脚本的完整路径。例如:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_exec_cold_dr.py -c amo-psql-dbs.json -o switchover
。 - 在以用户身份运行中,输入
opc
。 - 单击添加步骤。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-so-details.png 的说明
单击添加。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-details.png 的说明
-
添加定制计划组以更新 PostgreSQL 数据库 DNS。
- 单击 Add group 。
- 输入计划组名称。在本示例中,我们将使用
PostgreSQL - Update DNS
。 - 选择计划组将插入到 DR 计划中的位置。在此示例中,选择添加之后以在内置计划组 PostgreSQL - 切换之后插入用户定义的计划组。
- 单击添加步骤以打开对话框,我们将在其中指定用于更新 PostgreSQL 数据库 DNS 的脚本。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-dns.png 的说明
在添加计划组步骤中,输入以下信息。
- 输入步骤名称。在本示例中,我们将使用
PostgreSQL - Update DNS
。与计划组名称相同。 - 选择包含将在其上运行此步骤的实例的区域。在此示例中,脚本将在区域 1 中的 Web 应用程序 VM 上执行。
- 选择运行本地脚本。
- 选择目标实例,该实例是区域 1 中的 Web 应用程序 VM。
- 在脚本参数中,输入包含参数的脚本的完整路径。例如:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_update_dns.py -c amo-psql-dbs.json -d amo-psql-dbs.amo.vcn01.internal -o switchover
。 - 在以用户身份运行中,输入
opc
。 - 单击添加步骤。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-dns-details.png 的说明
单击添加。
插图 psql-webapp-auh-drpg-create-switchover-add-dns-details.png 的说明
-
添加定制计划组以终止 PostgreSQL 源数据库。
- 单击 Add group 。
- 输入计划组名称。在此示例中,我们将使用
PostgreSQL - Terminate
。 - 选择计划组将插入到 DR 计划中的位置。在此示例中,选择添加之后以在内置计划组 Volume Groups - Remove from DR Protection Group 之后插入用户定义的计划组。
- 单击添加步骤以打开对话框,我们将在其中指定用于终止 PostgreSQL 数据库源的脚本。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-terminate.png 的说明
在添加计划组步骤中,输入以下信息。
- 输入步骤名称。在此示例中,我们将使用
PostgreSQL - Terminate
。与计划组名称相同。 - 选择包含将在其上运行此步骤的实例的区域。在此示例中,脚本将在区域 1 中的 Web 应用程序 VM 上执行。
- 选择运行本地脚本。
- 选择目标实例,该实例是区域 1 中的 Web 应用程序 VM。
- 在脚本参数中,输入包含参数的脚本的完整路径。例如:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_exec_cold_dr.py -c amo-psql-dbs.json -o terminate
。 - 在以用户身份运行中,输入
opc
。 - 单击添加步骤。
插图 psql-webapp-auh-drpg-create-switchover-add-psql-terminate-details.png 的说明
单击添加。
插图 psql-webapp-auh-drpg-create-switchover-add-terminate-details.png 的说明
-
验证创建的定制计划组是否显示已启用状态。
已成功完成切换计划的自定义。
任务 6:自定义区域 2 中的故障转移计划
在此任务中,添加自定义、用户定义的 DR 计划组和步骤,以管理故障转移期间需要完成的任务。
-
恢复区域 2 中的最新数据库备份,为切换做好准备。
-
更新专用数据库 DNS 记录,使应用程序 VM 可以无缝连接到区域 2 中的数据库。
任务 6.1:选择故障转移计划
导航到在任务 4 中创建的故障转移计划。
插图 psql-webapp-auh-drpg-create-failover-details-1.png 的说明
任务 6.2:创建计划组以在区域 2 中运行定制脚本
首先添加自定义 DR 计划组,通过 PostgreSQL Backup/Restore DR 过程根据 OCI 数据库的特定需求定制 DR 工作流。
这些计划组将从 Web 应用程序 VM 调用必要的脚本。
应将以下定制计划添加到预填充的故障转移计划:PostgreSQL - Failover 和 PostgreSQL - Update DNS 。
-
添加定制计划组以执行 PostgreSQL 故障转移脚本。
- 单击 Add group 。
- 输入计划组名称。在此示例中,我们将使用
PostgreSQL - Failover
。 - 选择计划组将插入到 DR 计划中的位置。在此示例中,选择添加之后以在内置计划组 Compute Instances - Launch 之后插入用户定义的计划组。
- 单击添加步骤以打开对话框,我们将在其中指定用于故障转移 PostgreSQL 数据库的脚本。
插图 psql-webapp-auh-drpg-create-failover-add-psql.png 的说明
在添加计划组步骤中,输入以下信息。
- 输入步骤名称。在此示例中,我们将使用
PostgreSQL - Failover
。与计划组名称相同。 - 选择包含将在其上运行此步骤的实例的区域。在此示例中,脚本将在区域 1 中的 Web 应用程序 VM 上执行。
- 选择运行本地脚本。
- 选择目标实例,该实例是区域 1 中的 Web 应用程序 VM。
- 在脚本参数中,输入包含参数的脚本的完整路径。例如:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_exec_cold_dr.py -c amo-psql-dbs.json -o failover
。 - 在以用户身份运行中,输入
opc
。 - 单击添加步骤。
插图 psql-webapp-auh-drpg-create-failover-add-psql-fo-details.png 的说明
请单击添加
插图 psql-webapp-auh-drpg-create-failover-add-psql-details.png 的说明
-
添加定制计划组以更新 PostgreSQL 数据库 DNS。
- 单击 Add group 。
- 输入计划组名称。在本示例中,我们将使用
PostgreSQL - Update DNS
。 - 选择计划组将插入到 DR 计划中的位置。在此示例中,选择添加之后以在内置计划组 PostgreSQL - Failover 之后插入用户定义的计划组。
- 单击添加步骤以打开对话框,我们将在其中指定用于更新 PostgreSQL 数据库 DNS 的脚本。
插图 psql-webapp-auh-drpg-create-failover-add-dns.png 的说明
在添加计划组步骤中,输入以下信息。
- 输入步骤名称。在本示例中,我们将使用
PostgreSQL - Update DNS
。与计划组名称相同。 - 选择包含将在其上运行此步骤的实例的区域。在此示例中,脚本将在区域 1 中的 Web 应用程序 VM 上执行。
- 选择运行本地脚本。
- 选择目标实例,该实例是区域 1 中的 Web 应用程序 VM。
- 在脚本参数中,输入包含参数的脚本的完整路径。例如:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_update_dns.py -c amo-psql-dbs.json -d xxx-psql-dbs.xxx.vcn01.internal -o failover
。 - 在以用户身份运行中,输入
opc
。 - 单击添加步骤。
插图 psql-webapp-auh-drpg-create-failover-add-dns-fo-details.png 的说明
单击添加。
插图 psql-webapp-auh-drpg-create-failover-add-dns-details.png 的说明
-
验证创建的定制计划组是否显示已启用状态。
已成功完成故障转移计划的自定义。
任务 7:在区域 2 中运行预检查
已在备用区域 2 中成功创建切换和故障转移 DR 计划。这些计划支持 OCI Full Stack DR 将工作负载从区域 1 迁移到区域 2。后续任务涉及为切换和故障转移计划运行预检查,以确保准备就绪并验证转换过程。
任务 7.1:开始切换计划的预检查
为切换 DR 计划运行预检查。
-
确保将区域上下文设置为备用区域 2。
-
确保在区域 2 中选择了正确的 DR 保护组,它应该是备用角色。
-
单击切换计划名称。
-
单击操作。
-
单击运行预检查。
-
单击运行预检查。
插图 psql-webapp-auh-drpg-create-switchover-precheck-run.png 的说明
-
验证是否已成功完成所有预检查。
插图 psql-webapp-auh-drpg-create-switchover-precheck-details-2.png 的说明
任务 7.2:开始故障转移计划的预检查
运行故障转移 DR 计划的预检查。
-
确保将区域上下文设置为备用区域 2。
-
确保在区域 2 中选择了正确的 DR 保护组,它应该是备用角色。
-
单击故障转移计划名称。
-
单击操作。
-
单击运行预检查。
-
单击运行预检查。
插图 psql-webapp-auh-drpg-create-failover-precheck-run.png 的说明
-
验证是否已成功完成所有预检查。
插图 psql-webapp-auh-drpg-create-failover-precheck-details-2.png 的说明
任务 8:在区域 2 中运行切换计划
运行切换 DR 计划,以开始使用 OCI Database 将 Web 应用从区域 1 迁移到区域 2 的 PostgreSQL。
-
确保将区域上下文设置为备用区域 2。
-
确保在区域 2 中选择了正确的 DR 保护组,它应该是备用角色。
-
单击切换计划名称。
-
单击操作
-
单击执行计划。
此任务在区域 2 中运行切换计划。
- 取消选择启用预检查,因为这些预检查已在任务 7 中执行。
- 单击执行计划。
插图 psql-webapp-auh-drpg-create-switchover-execute-run.png 的说明
监视切换计划,直到完整的工作量从区域 1 完全转换到区域 2。
切换计划的执行在大约 39 分钟内成功完成。
插图 psql-webapp-auh-drpg-create-switchover-execute-details-1.png 的说明
插图 psql-webapp-auh-drpg-create-switchover-execute-details-2.png 的说明
切换后: Web 应用程序将在区域 2 中再次访问,使用与以前相同的 URL。
插图 webapp-frontend-preview.png 的说明
任务 9:创建和自定义区域 1 中的 DR 计划
随着 OCI Full Stack DR 成功完成切换,区域 2 现在承担了主区域的角色,而区域 1 已过渡为备用区域。
按照任务 1 到 8 中详细说明的方法,继续在区域 1 的 DR 保护组中创建和定制切换和故障转移计划,区域 1 现在用作备用对等区域。
插图 psql-webapp-dxb-drpg-plan-create.png 的说明
注:以下屏幕截图中看不到
PostgreSQL - Terminate
。
插图 psql-webapp-dxb-drpg-create-switchover-details-1.png 的说明
插图 psql-webapp-dxb-drpg-create-failover-details-1.png 的说明
任务 10:在区域 1 中运行故障转移计划
故障转移计划的执行用于测试目的,我们模拟灾难情形以验证 DR 策略的有效性。在此模拟中,灾难通过故意停止区域 2 中的虚拟机 (VM) 来模拟。
为了从此模拟故障中恢复,我们运行故障转移 DR 计划,该计划启动故障转移过程,其中 Web 应用程序 VM 在区域 1 中恢复了具有 PostgreSQL 的 OCI 数据库的最新可用备份。
注:故障转移 DR 计划只能在灾难性计划外事件期间使用。在故障转移过程中可能会发生数据丢失。
- 确保将区域上下文设置为备用区域 1。
- 确保在区域 1 中选择了正确的 DR 保护组,它应该是备用角色。
- 单击故障转移计划名称。
- 单击操作。
- 单击执行计划。
插图 psql-webapp-dxb-drpg-failover-execute.png 的说明
此任务在区域 1 中运行故障转移计划。
- 使 Enable Prechecks(启用预检查)保持未选中状态,因为这是实际的故障转移练习。
- 单击执行计划以开始。
插图 psql-webapp-dxb-drpg-failover-execute-run.png 的说明
监视故障转移计划,直到将完整的工作量从区域 2 完全转换到区域 1。
故障转移计划的执行在大约 10 分钟内成功完成。
插图 psql-webapp-dxb-drpg-create-failover-execute-details-1.png 的说明
插图 psql-webapp-dxb-drpg-create-failover-execute-details-2.png 的说明
相关链接
-
加入 #full-stack-dr 闲置通道
确认
-
Authors — Antoun Moubarak(首席技术官办公室架构师),Piotr Kurzynoga(开源数据黑带)
-
贡献者 — Suraj Ramesh(OCI Full Stack DR 产品经理)
更多学习资源
通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Automate Cold Disaster Recovery for OCI Database with PostgreSQL using OCI Full Stack Disaster Recovery
G38686-02
Copyright ©2025, Oracle and/or its affiliates.