写点什么

使用 Amazon RDS for Oracle 配合 Oracle Active Data Guard 建立托管的灾难恢复与只读副本

  • 2021 年 12 月 23 日
  • 本文字数:6867 字

    阅读完需:约 23 分钟

使用Amazon RDS for Oracle配合Oracle Active Data Guard建立托管的灾难恢复与只读副本



众多亚马逊云科技用户都在使用 Amazon 关系数据库服务产品组合(Amazon Relational Database Service,简称 Amazon RDS)来减少沉重繁琐且无差异化的数据库日常维护工作。其中 Amazon RDS for Oracle 也切实帮助用户显著减少了 Oracle 数据库的管理与维护负担。


Amazon RDS for Oracle 提供多可用区部署方案,可针对特定区域内的数据库实例提供更出色的可用性与持久性,同时带来高效灾难恢复解决方案。当然,一部分运行关键任务数据库的客户希望自己的灾难恢复配置能够跨越多个区域,以满足特殊的业务需求。此外,这些客户还希望利用灾难恢复的投资来处理某些只读生产工作负载。


现在,大家已经可以任选以下方法,为您的 Amazon RDS for Oracle 建立起自我管理型灾难恢复解决方案:


1.使用数据库快照为 Amazon RDS for Oracle 建立起低成本、跨区域的灾难恢复方案。关于更多详细信息,请参阅使用数据库快照与 Amazon Lambda 在 Amazon RDS for Oracle 上建立跨区域自动灾难恢复机制


2.使用亚马逊云科技 数据库迁移服务(Amazon Database Migration Service,简称 Amazon DMS)为 Amazon RDS for Oracle 建立灾难恢复机制。关于更多详细信息,请参阅使用 Amazon DMS 在 Amazon RDS for Oracle 上建立灾难恢复机制


3.使用 Oracle GoldenGate 在 Amazon RDS for Oracle 上部署跨区域灾难恢复机制。关于更多详细信息,请参阅使用 Oracle GoldenGate 在 Amazon RDS for Oracle 上实现跨区域灾难恢复机制


  • 使用数据库快照与 Amazon Lambda 在 Amazon RDS for Oracle 上建立跨区域自动灾难恢复机制

https://aws.amazon.com/cn/blogs/database/cross-region-automatic-disaster-recovery-on-amazon-rds-for-oracle-database-using-db-snapshots-and-aws-lambda/

  • 使用 Amazon DMS 在 Amazon RDS for Oracle 上建立灾难恢复机制

https://aws.amazon.com/cn/blogs/database/disaster-recovery-on-amazon-rds-for-oracle-using-aws-dms/

  • 使用 Oracle GoldenGate 在 Amazon RDS for Oracle 上实现跨区域灾难恢复机制

https://aws.amazon.com/cn/blogs/database/implementing-cross-region-disaster-recovery-using-oracle-goldengate-for-amazon-rds-for-oracle/


借助 Amazon RDS for Oracle 区域内与跨区域只读副本功能,我们可以使用 Oracle Active Data Guard 轻松创建多个只读副本。本文将讨论如何使用 Amazon RDS for Oracle 只读副本建立托管灾难恢复与只读副本。此外,本文还将涵盖其他用例,例如如何从主数据库实例中转移读取工作负载、通过只读副本服务扩展读取工作负载,以及优化读取延迟等



📢  想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注 2021 亚马逊云科技中国峰会!点击图片报名吧~


关于 Amazon RDS for Oracle 只读副本


Amazon RDS for Oracle 只读副本(分区域内与跨区域两类),在主数据库实例与物理备用数据库(只读副本)之间使用 Oracle Active Data Guard。Amazon RDS for Oracle 在主实例与只读副本之间配置异步 Data Guard 复制机制,保证只读副本处于只读模式且 Redo Apply 处于活动状态。主实例与只读副本运行在 Data Guard 最大性能模式,该模式使用日志写入器(LGWR)异步传输(ASYNC),而且只读副本 I/O 没有任何确认(NOAFFIRM)。在这种模式下,一旦产生的 redo 被写入在线 redo 日志,即提交相应事务。此外,redo 还会被异步写入至只读副本的 redo 日志。这套解决方案在最大程度提升数据保护水平的同时,又不会对主数据库实例的性能造成任何影响。


根据数据库工作负载及其所生成 redo 日志的具体数量,我们可以将 RPO 与 RTO 控制在不超过 10 分钟的时间之内。Amazon RDS for Oracle 会在主实例与只读副本之间建立安全的通信通道,并通过安全组和访问控制列表,实现主实例和只读副本之间安全的 redo 传输。


区域内只读副本使用场景


下面来看区域只读副本的几种常见用例:


  • 转移读取工作负载——客户可以将读取工作负载从主数据库实例转移至只读副本数据库实例,借此提高运行在主数据库上的读取与写入事务的性能表现。


  • 读取工作负载横向扩展——客户最多可以创建 5 个只读副本,借此实现读取工作负载的横向扩展。


  • 可用性——客户可以将指定的只读副本提升为新的独立数据库保证在主数据库发生故障时带来更高的可用性。


下图所示,为 Amazon RDS for Oracle 区域内只读副本的基本架构。



跨区域只读副本使用场景


下面来看跨区域只读副本的几种常见场景:


  • 托管灾难恢复——使用托管灾难恢复方案,客户可以将其他区域内的只读副本提升为新的独立生产数据库。


  • 优化数据邻近度——客户可以将副本部署在更靠近应用程序用户的特定区域内,借此降低读取延迟。


  • 转移读取工作负载——客户可以将读取工作负载从主数据库实例转移至只读副本数据库实例。只读副本可以部署在任意服务区域内。


  • 读取工作负载横向扩展——客户可以在任意区域中部署最多 5 个只读副本,借此实现读取工作负载的横向扩展。


下图所示,为 Amazon RDS for Oracle 跨区域只读副本的基本架构。



在 Amazon RDS 控制台上创建只读副本


Amazon RDS for Oracle 只读副本为各数据库实例提供强大的性能与持久性。Amazon RDS 可使用源数据库实例的快照创建第二个数据库实例。要启用只读副本,大家需要首先启用自动备份选项(将备份保留周期的值设置为大于 0),并在源数据库实例上启用强制日志记录。要启用强制日志记录模式,请连接数据库实例并输入以下代码:


exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);
复制代码


关于创建只读副本以及相关限制的更多详细信息,请参阅 Oracle 数据库只读副本限制说明


  • 限制说明

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html#oracle-read-replicas.limitations


在本章节中,我们将共同了解如何创建跨区域只读副本。


创建主(源数据库)实例。


为了单纯展示只读副本的创建过程,我们已经在“us-west-2”区域内创建了名为“mydbinstance”的主数据库实例,具体操作命令如下:


aws rds create-db-instance \  --db-instance-identifier mydbinstance \  --db-name MYDB \  --allocated-storage 20 \  --storage-type gp2 \  --db-instance-class db.m5.xlarge \  --engine oracle-ee  \  --port 1521 \  --backup-retention-period 1 \  --license-model byol \  --master-user-password XXXXXXXXXX \  --master-username admin \  --engine-version 19.0.0.0.ru-2020-01.rur-2020-01.r1
复制代码


关于更多详细信息,请参阅创建一个 Oracle 数据库实例,及如何连接 Oracle 数据库实例上的数据库。当主数据库实例状态显示为 Available 后,您即可创建只读副本了(请确保在 Amazon RDS 控制台中前往 Region 部分,并选定主数据库实例)。


  • 创建一个 Oracle 数据库实例,及如何连接 Oracle 数据库实例上的数据库

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html


  • 在 Amazon RDS 控制台中,选择 Databases。


  • 选择 mydbinstance。


  • 在 Actions 下拉菜单中,选择 Create read replica。



  • 在 Instance specifications 部分的 DB instance class 中,选择 m5.xlarge。


  • 在 Multi-AZ deployment 部分,选择 No。


  • 在 Storage type 部分,选择 General Purpose(SSD)。



  • 在 Network & Security 部分的 Destination region 处,选择 US East (N. Virginia)。


  • 在 Destination DB subnet group 处,选择 default。


  • 在 Availability zone 处,选择 No preference。


  • 在 Publicly accessible 部分,选择 Yes。


  • 在 VPC security groups 部分,选择 default。



  • 在 Settings 部分的 Read replica source 处,选择 mydbinstance。


  • 在 DB instance identifier 部分,输入 mydbinstance-ro。



  • 在 Monitoring 部分的 Enhanced monitoring 处,选择 Disable enhanced monitoring。


  • 在 Log exports 部分,取消所有选中的日志类型。



  • 在 Performance Insights 部分,选择 Disable Performance Insights。


  • 在 Maintenance 部分的 Auto minor version upgrade 处,选择 No。



  • 选择 Create read replica。整个创建过程大概需要 10 到 15 分钟,创建完成后您的主数据库实例将在 us-west-2 中显示为 Master。



在 Role 一栏中,读取 Replica 将显示其在 us-east-1.



在 Amazon CLI 创建只读副本


另外,大家也可以在 Amazon CLI 中或者使用 create-db-instance-read-replica Amazon RDS API 创建只读副本。要在 us-east-1 中创建跨区域只读副本(mydbinstance-ro),并在 us-west-2 区域中运行主数据库实例(mydbinstance),请输入以下操作代码:


  • create-db-instance-read-replica

https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html


aws rds create-db-instance-read-replica \--source-db-instance-identifier arn:aws:rds:us-west-2:xxxxxxxxxx:db:mydbinstance\--source-region us-west-2\--db-instance-identifier mydbinstance-ro\--region us-east-1-- kms-key-id  kms-key-id xxxxxxxxxx: xxxxxxxxxx:
复制代码


如果您希望在其他区域中创建加密的只读副本,则需要为目标区域指定一个 Amazon KMS 密钥。您在区域内创建的 Amazon KMS 加密密钥,将只能在该区域中使用;我们无法在某一区域中使用其他区域内创建的加密密钥。


连接只读副本


您可以使用首选客户端连接只读副本实例;本文将使用 SQL * Plus,具体如下所示。关于更多接入 Amazon RDS Oracle 数据库的详细信息,请参阅接入您的示例 Oracle 数据库实例


  • 实例

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html#CHAP_GettingStarted.Connecting.Oracle


要使用 SQL * Plus 接入只读副本,请输入以下操作代码:


Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – ProductionWith the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> set lines 250 pages 10000SQL> show parameter db_uniq
NAME                        TYPE        VALUE------------------------------------ -----------db_unique_name                 string MYDB_B
SQL> select open_mode,database_role from v$database;
OPEN_MODE                DATABASE_ROLE-------------------- ----------------READ ONLY WITH APPLY     PHYSICAL STANDBY
复制代码


监控只读副本上的复制延迟


您可以在 Amazon CloudWatch 控制台、Amazon RDS 控制台、Oracle Enterprise Manager)OEM)或者 Oracle Data Guard 视图(v$archived_logv$dataguard_statsv$dataguard_status)上监控复制延迟。


如果希望在 Amazon RDS 控制台中进行监控,请在 Databases 页面下选择您的只读副本实例。



在 Monitoring 选项卡中,搜索 replica lag。



您也可以使用首选客户端连接只读副本实例;本文将使用 SQL Deverloper。关于接入 Amazon RDS Oracle 数据库的更多详细信息,请参阅接入您的示例 Oracle 数据库实例。具体操作代码如下:


  • 实例

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html#CHAP_GettingStarted.Connecting.Oracle


您也可以在只读副本实例上运行以下查询,使用 Oracle Active Data Gurad 视图检查关于副本延迟的更多详细信息。以下为使用 SQL Deverloper 并通过管理员用户连接只读副本的输出结果:


SQL>  Select * from v$standby_event_histogram where upper(name)='APPLY_LAG';
复制代码



SQL> Select name,value,datum_time,time_computed from v$dataguard_stats where upper(name)='APPLY_LAG';
复制代码



提升只读副本


一旦发生灾难,请完成以下步骤,将特定的跨区域只读副本提升为新的独立生产数据库:


  1. 停止仍在访问旧有生产数据库的应用程序。

  2. 保证所有可用的 redo 日志都已被正确应用于跨区域只读副本,且不存在复制滞后。

  3. 提升该跨区域只读副本。

  4. 将应用程序指向提升后数据库的监听器端点。

  5. 为提升后的新独立数据库重新创建只读副本。


要手动提升只读副本,请完成以下操作步骤:


  • 在 Databases 页面中,选择 mydbinstance-ro。


  • 在 Actions 下拉菜单中,选择 Promote。



  • 在 Promote Read Replica 页面中的 Enable automatic backups 位置,选择 Yes。


  • 在 Backup retention period 部分,选择 1 days。


  • 在 Backup window 部分,选择 No preference。



  • 选择 Continue。现在,您会看到确认页面。


  • 选择 Promote Read Replica。



整个过程大概需要 5 分钟。在成功完成后,您可以在 Amazon RDS 控制台上验证主实例与副本实例的状态。二者的角色都应显示为 Instance。



如果需要修改数据库实例标识符,您可以选定该实例并选择 Modify。


通过 Amazon CLI 提升只读副本


要在 Amazon CLI 上提升只读副本,请输入以下操作代码:


aws rds promote-read-replica \ --db-instance-identifier mydbinstance-ro\
复制代码


计划内维护


无论是大升级与小升级,与引擎相关的升级操作将首先作用于主数据库实例,而后再并行将引擎升级应用于所有副本(请注意,所有副本都将在主数据库实例的维护容器期间升级完成)。关于为 Amazon RDS for Oracle 升级数据库引擎的更多详细信息,请参阅升级 Oracle 数据库引擎


  • 升级 Oracle 数据库引擎

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Oracle.html


许可要求


要使用 Amazon RDS for Oracle 支持的区域内与跨区域只读副本功能,您需要使用 Oracle Database Enterprise Edition 中的自带许可(BYOL)模式,同时拥有一份 Oracle Active Data Guard 选项的使用许可。在主数据库实例及各只读副本数据库实例中,您都需要 Oracle Enterprise Edition 以及 Oracle Active Data Guard 选项的使用许可。


兼容性


Amazon RDS for Oracle 支持 Oracle Enterprise Edition 的 12.1 及更高版本(从 12.1.0.2.v10 起)。


计费标准


只读副本的计费标准与标准数据库实例相同。与标准数据库实例一样,数据库实例的每小时运行费用,由只读副本所使用的具体数据库实例类型决定。


对于跨区域只读副本,主数据库实例与只读副本数据库实例之间的往来传输数据需要计费,具体取决于源区域与目标区域之间的数据传输速率。关于实例计费、存储、数据传输以及可用区域相关的更多详细信息,请参阅 Amazon RDS for Oracle 计费标准


  • Amazon RDS for Oracle 计费标准

https://aws.amazon.com/cn/rds/oracle/pricing/


实现只读副本的高可用性


您可以启用多可用区,为运行在只读副本上的关键业务报告类工作负载提供高可用性保证。在进行多可用区故障转移时(主环境或只读副本环境),Data Guard 将自动在源与目标实例之间执行复制与重新配置,无需任何人为干预。


以下 CLI 代码所示,为如何在只读副本上启用多可用区。


## Modify read replica: convert SAZ to MAZ:
aws rds modify-db-instance \--db-instance-identifier mydbinstance-ro\--apply-immediately\-- multi-az
复制代码


我们为只读副本选择的实例类型与存储类型,不必与主实例的实例类型与存储类型相同。例如,您可以在区域内只读副本中使用配置较低的实例类型、大小与存储类型,只要足够处理读取工作负载即可。如果需要使用跨区域只读副本实现灾难恢复,则应保证只读副本直接使用主实例的实例类型、大小与存储类型镜像,保证在将跨区域只读副本提升至主实例后,可直接处理所有生产工作负载。


多可用区部署与只读副本


Amazon RDS for Oracle 只读副本属于 Amazon RDS 多可用区部署的一种重要补充。Amazon RDS 多可用区机制将带来高可用性与强大的数据保护能力,区域内只读副本则负责为只读类工作负载提供可扩展性支持。跨区域只读副本在可扩展性之外,又进一步实现了灾难恢复功能。再有,如果希望在只读副本上运行关键业务报告类工作负载,则应在只读副本数据库实例上启用多可用区选项。下表所示,为 Amazon RDS 多可用区与 Amazon RDS for Oracle 只读副本之间的比较结果:



总结


Amazon RDS for Oracle 能够在只读副本之上支持托管灾难恢复与托管读取工作负载的可扩展能力。如果您身为 Oracle BYOL 客户且需要建立一套灾难恢复策略,可以将您自行管理的关键任务数据库迁移至 Amazon RDS for Oracle,借此享受托管灾难恢复与只读副本带来的各种收益。


在转换为托管数据库服务模式之后,您可以使用 Amazon RDS for Oracle 托管服务提供的高可用性、灾难恢复、可扩展性以及多种丰富功能,摆脱繁重的日常运营负担。以此为基础,大家能够专注于对组织业务更为重要的事务,例如优化数据库设计、调整容量以及调整性能等等。关于 Amazon RDS for Oracle 只读副本的更多详细信息,请参阅使用 Amazon RDS for Oracle 只读副本Amazon RDS 只读副本使用指南


  • 使用 Amazon RDS for Oracle 只读副本

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html

  • Amazon RDS 只读副本使用指南

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html


本篇作者


Sameer Malik

亚马逊云科技

首席数据库解决方案架构师


Srinagesh Battula

亚马逊云科技首席产品经理


用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
使用Amazon RDS for Oracle配合Oracle Active Data Guard建立托管的灾难恢复与只读副本