灾难恢复在 Amazon EC2 上使

Amazon EC2上Oracle数据库的灾难恢复与快速启动故障切换

关键要点

高可用性在今天的企业中至关重要,以防止业务关键应用程序的中断。企业必须优先考虑数据库的可伸缩性和可用性,从而避免数据库、网络、服务器或存储环境的停机。本文提供了一种在AmazonEC2上运行Oracle数据库时,使用Oracle DataGuard和快速启动故障切换实现数据库高可用性的架构解决方案,并阐述如何在发生故障时自动切换数据库。

引言

在当今的商业环境中,高可用性对组织来说是必不可少的,以避免业务关键应用程序的中断。企业需要优先考虑数据库的可扩展性和可用性,以确保数据库、网络、服务器或存储环境避免宕机。

为了避免对应用程序的必要更改,(RAC)是为Oracle数据库提供高可用性和可扩展性的一个选项。尽管AmazonEC2上的Oracle数据库不支持RAC功能,但在AWS云上提供了高可用性。

Oracle Data Guard功能使客户能够应对灾难和数据损坏,同时创建、维护和管理一个或多个同步的备用数据库。配置(FSFO)进一步有助于实现高可用性。

在本文中,我们提供了一种架构解决方案,以实现Amazon EC2上Oracle数据库的高可用性,结合Oracle DataGuard和快速启动故障切换解决(AZs)或AmazonEC2实例故障。我们还将介绍使数据库故障切换无需人工干预所需采取的步骤,并提供跨区域灾难恢复的建议。

解决方案概述

我们将通过讨论架构和两种使用Oracle DataGuard确保高可用性的替代选项,以及每种选项的优缺点来探索此解决方案。随后,我们将提供步骤指南,以实现无需人工干预的数据库故障切换。

使用多可用区和多区域的Oracle Data Guard实现Oracle高可用性

这种架构建议在Amazon EC2上维护Oracle数据库的高可用性,并对一个区域内的AmazonEC2服务中断提供保护。灾难恢复环境和更高的弹性在AmazonEC2服务中断后得到提供。这种结构通过在一个备用区域的多可用区设置来保护免受AWS区域内的Amazon EC2服务中断。

在这种架构中,Oracle Data Guard快速同步(Fast Sync)复制的存在涵盖了位于区域A的AZ 1中的主数据库,AZ2中有备用数据库(快速同步),区域B中的AZ 1(异步)和区域B的AZ 2(异步)。备用数据库之间存在异步级联复制设置,以避免跨区域的网络延迟问题。

如果区域A发生Amazon EC2服务中断,Oracle观察者()这一客户端软件会监控Oracle DataGuard并启动故障切换到区域B的备用数据库。应用程序可以继续连接到数据库,从而实现高可用性,基于数据变化率,仅会有有限的或最小的数据丢失。如图1所示。

删除)

使用Amazon Route 53和Oracle Data Guard进行数据库故障切换

以下步骤定义了可通过Amazon Route 53和Oracle Data Guard实现无需人工干预的数据库故障切换的流程。

前提条件

在开始之前,请查阅此解决方案的以下前提条件:

  • 一个
  • 配置了Oracle Data Guard的Amazon EC2实例
  • 设置了

步骤指南

步骤1. 创建Oracle数据库服务

为了在发生故障时使应用程序可以无缝连接,我们建议使用名为的OracleDBMS包创建一个Oracle数据库服务。

sql exec dbms_service.CREATE_SERVICE(SERVICE_NAME=>'DB_SERVICE_FOR_APP', NETWORK_NAME=>'DB_SERVICE_FOR_APP'); execdbms_service.START_SERVICE('DB_SERVICE_FOR_APP');

步骤2. 网络配置

使用(TAF)方法,应用程序在从主数据库到备用数据库的故障转移过程中能够无缝连接,尽管在主机IP更改时需要更新应用程序连接字符串。

以下使用的方法建议为增加灵活性和可扩展性。Route53提供DNSA记录,用于映射到数据库实例IP和CNAME记录,以重定向DNS查询到A记录。以下是DNS映射的示例。CNAME以及数据库服务名称可以在应用程序的网络配置中使用。

sql Database_Name = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <db_cname>)(PORT = 1521)) (connect_data = (service_name = <db_service_name>) )) )

为自动更新Route 53中CNAME以映射到主机,您可以按照以下步骤操作。

步骤3. Route 53设置

创建一个名为route53update.sh的脚本并将其放在数据库主机上,使用以下代码:


# !/bin/bash

export ORACLE_HOME="<> " export LD_LIBRARY_PATH=$ORACLE_HOME/lib exportPATH=$ORACLE_HOME/bin:$PATH:/usr/local/bin:/usr/bin

LOG_FILE="/tmp/switch_dns_$$.log"

DNS_DOMAIN="<> " ACTIVE_DB_CNAME="<> " HOSTED_ZONE_ID="<> " TTL="<> "

update_dns () { TMPFILE="/tmp/route53_dns_$$.log" cat > ${TMPFILE} << EOF {
"Comment":"Updating DNS of record ${1}.${DNS_DOMAIN}", "Changes":[ {
"Action":"UPSERT", "ResourceRecordSet":{ "ResourceRecords":[ { "Value":"$2" }
], "Name":"${1}.${DNS_DOMAIN}.", "Type":"CNAME", "TTL":$TTL } } ] } EOF

/usr/local/bin/aws route53 change-resource-record-sets \ \--hosted-zone-id
$HOSTED_ZONE_ID \ \--change-batch file://"$TMPFILE" >> "$LOG_FILE" }

prim_uniq_sid=`$ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF set feedback offecho off lines 2000 head off select upper(db_unique_name) fromv\$dataguard_config where DEST_ROLE='PRIMARY DATABASE'; EOF`

prim_uniq_sid=`echo $prim_uniq_sid| sed 's/^[ \t]*//;s/[ \t]*$//'`
host_current=`$ORACLE_HOME/bin/tnsping ${prim_uniq_sid}|sed -n
's/\(.*Host\)\([^)]*\)\(.*\)/\2/pi' |sed 's/=//g'|sed 's/^[ \t]*//;s/[
\t]*$//'` dns_current_host=`/usr/local/bin/aws route53 list-resource-record-
sets --hosted-zone-id $HOSTED_ZONE_ID --query "ResourceRecordSets[?Name ==
'${ACTIVE_DB_CNAME}.${DNS_DOMAIN}.'].ResourceRecords" --output text`

if [ "$host_current" != "$dns_current_host" ]; then update_dns
${ACTIVE_DB_CNAME} $host_current fi ```

**步骤4. 数据库作业设置**

在Oracle主数据库中创建一个作业以在故障发生时执行刚才介绍的shell脚本,使用以下代码:

```sql begin dbms_scheduler.create_job ( job_name => 'route53update', job_type
=> 'executable', number_of_arguments => 0, job_action =>
'/<>/route53update.sh', auto_drop => false );

dbms_scheduler.enable('route53update'); end; / ```

**步骤5. 数据库触发器设置**

在发生故障时,主数据库将切换,备用数据库将启动作为新的主数据库。需要在主数据库上创建一个触发器以在任何故障转移时执行作业,使用以下代码更新Route 53CNAME。

`sql create or replace trigger SYS.Update_Route53_Record AFTER STARTUP ONDATABASE DECLARE db_role varchar2(16); db_mode varchar2(20); BEGIN selectdatabase_role, open_mode into db_role, db_mode from v$database; if db_role =
'PRIMARY' then dbms_scheduler.run_job('route53update'); END IF; END; /`

### 替代方案1:单区域与多可用区

此选项是建议的最低配置,以维护Amazon EC2上Oracle数据库的高可用性,适用于没有多区域设置的客户。

  * **优势** :保护单个可用区内的Amazon EC2服务中断。
  * **限制** :无法保护单个区域内的Amazon EC2服务中断。

在此架构中,复制存在于具有多可用区设置的Oracle数据库实例中,主数据库(可读取和写入)位于AZ1,备用数据库(只读)位于AZ 2。

如果主数据库因任何故障无法访问,Oracle观察者将故障转移到不同AZ的备用数据库。应用程序可以继续连接到数据库,基于在设置下的同步复制,确保0数据丢失。如果主数据库位于us-east-1a而备用位于us-
east-1b,则可以这样定义RedoRoutes属性。

**Oracle RedoRoutes设置示例:**

`sql dgmgrl> edit database DB_1A set property RedoRoutes= '(LOCAL: (DB_1BFASTSYNC)' dgmgrl> edit database DB_1B set property RedoRoutes= '(LOCAL:
(DB_1A FASTSYNC)'`

有关AWS云中灾难恢复如何工作的更多信息,请访问的部分。

### 替代方案2:单可用区的多可用区与多区域

此选项建议用于维护Amazon EC2上Oracle数据库的高可用性,适用于需要多区域可用性的客户。它提供了针对主区域内AmazonEC2实例发生罕见不可用情况的保护,提供灾难恢复环境。

  * **优势** :保护2个可用区或AWS区域内的Amazon EC2服务中断。
  * **限制** :在整个区域发生Amazon EC2服务中断时,弹性降低而没有高可用性。

在此架构中,复制存在于单个区域的多可用区中,区域A的AZ1中的主数据库与AZ 2的备用数据库。备用数据库的跨区域也有异步复制设置。

推荐采用异步复制,以避免跨区域的网络延迟问题。级联备用配置确保主数据库在将数据发送到多个备用数据库时没有额外性能影响。

如果主数据库无法访问,故障转移将在区域A的AZ之间发生。在AmazonEC2区域发生服务中断时,故障转移会发生到区域B,从而高可用性得以实现,数据丢失量仅按照数据变化率量控制。如果主数据库位于us-
east-1a,备用数据库位于us-east-1b(快速同步)和us-east-2a(异步),则RedoRoutes属性可以定义如下。

**Oracle RedoRoutes设置示例:**

`sql dgmgrl > edit database DB_1A set property RedoRoutes= '(LOCAL: (DB_1BFASTSYNC PRIORITY=1, DB_2A ASYNC PRIORITY=2))(DB_1B: DB_2A ASYNC)(DB_2A: DB_1BASYNC)' dgmgrl > edit database DB_1B set property RedoRoutes= '(LOCAL: (DB_1AFASTSYNC PRIORITY=1, DB_2A ASYNC PRIORITY=2)) (DB_1A: DB_2A ASYNC)'`

## 清理

此解决方案涉及的服务会产生费用。当您完成使用此解决方案时,请清理以下资源:

  * Amazon EC2 实例 – 或(终止)所配置的Amazon EC2实例。
  * Route53 – 删除创建的托管区域ID和A记录/CNAME。

## 结论

本文展示了如何通过Oracle Data Guard为AmazonEC2实例上的Oracle数据库实现高可用性和灾难恢复。利用本文中的架构,您可以在同一区域或跨区域实现零数据丢失的Oracle快速启动故障切换。

您还可以使用此架构将Amazon EC2上的Oracle数据库中的数据复制到AWS云之外托管的Oracle数据库。借助Oracle级联备用和OracleRedoRoutes,您可以降低对主数据库的高度依赖,从而整体提高性能。

* * *

### 作者简介

#### Harshad Gohil

HarshadGohil是亚马逊网络服务(AWS)专业服务团队的云/数据库顾问。他帮助客户在AWS云中构建可扩展、高可用和安全的解决方案。他的重点领域是在AWS云中进行同质和异质的迁移。

#### Jeemy Patel

JeemyPatel是亚马逊网络服务(AWS)专业服务团队的数据库顾问。Jeemy协助客户迁移到AWS、优化性能,并提供有关Amazon客户各种灾难恢复解决方案的技术指导。

#### Vignyanand Penumatcha

Vignyanand(Viggy)Penumatcha是AWS专业服务团队的高级数据库顾问。他帮助AWS客户在迁移或转型其数据库到AWS云数据库解决方案时实现业务需求。

#### Saumya Mula

SaumyaMula是亚马逊网络服务(AWS)专业服务团队的高级数据库顾问。她担任数据库迁移顾问,为Amazon客户提供技术指导,迁移其本地数据库到AWS。

Leave a Reply

Required fields are marked *