使用 DR 協調器架構自動化跨區域容錯移轉和容錯回復 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 DR 協調器架構自動化跨區域容錯移轉和容錯回復

創建者:吉滕德拉·庫馬爾 (AWS)、奧利弗·弗朗西斯 (AWS) 和巴拉蘇布拉馬尼亞 (AWS)

代碼存儲庫:aws-cross-region-dr- 數據庫

環境:生產

技術:資料庫;基礎架構;移轉;現代化

AWS 服務:Amazon Aurora; AWS CloudFormation; Amazon ElastiCache; Amazon RDS; AWS Step Functions

Summary

此模式說明如何使用 DR 協調器架構來協調和自動化手動且容易出錯的步驟,以便跨 Amazon Web Services () 區域執行災難復原。AWS該模式涵蓋了以下數據庫:

  • 適用於 MySQL 的 Amazon Relational Database Service 服務 (Amazon RDS)、適用於 PostgreSQL 的亞馬遜 RDS 或亞馬遜 RDS

  • Amazon Aurora MySQL 兼容版或 Amazon Aurora PostgreSQL 兼容版(使用集中文件)

  • Amazon ElastiCache 的雷迪斯

若要示範 DR 協調器架構的功能,您可以建立兩個資料庫執行個體或叢集。主要位於中 AWS 區域 us-east-1,次要位於中us-west-2。要創建這些資源,您可以使用 aws-cross-region-dr-data GitHub 存儲庫App-Stack文件夾中的 AWS CloudFormation 模板。

先決條件和限制

一般先決條

引擎特定先決條件

  • Amazon Aurora — 至少一個 Aurora 全球資料庫必須有兩個可用 AWS 區域。您可以使用us-east-1作為主要區域,並用us-west-2作次要區域。

  • 適用 ElastiCache 於 Redis 的 Amazon — ElastiCache 全域資料存放區必須有兩個 AWS 區域可用。您可以use us-east-1作為主要區域,並us-west-2作為次要區域使用。

Amazon RDS 限制

  • DR Orchestrator 架構在執行容錯移轉或容錯回復之前,不會檢查複寫延遲。必須手動檢查複寫延遲。

  • 此解決方案已使用主要資料庫執行個體與一個僅供讀取複本進行測試。如果您想要使用一個以上的僅供讀取複本,請先徹底測試解決方案,然後再在生產環境中實作。

Aurora 限制

  • 功能可用性和支援會因每個資料庫引擎的特定版本而有所不同 AWS 區域。如需跨區域複寫功能和區域可用性的詳細資訊,請參閱跨區域僅供讀取複本。

  • Aurora 全域資料庫對支援的 Aurora 資料庫執行個體類別有特定組態需求,以及最大數目 AWS 區域。如需詳細資訊,請參閱 Amazon Aurora 全球資料庫的組態需求

  • 此解決方案已使用主要資料庫執行個體與一個僅供讀取複本進行測試。如果您想要使用一個以上的僅供讀取複本,請先徹底測試解決方案,然後再在生產環境中實作。

ElastiCache 限制

  • 如需有關全域資料存放區的區域可用性和 ElastiCache 組態需求的資訊,請參閱文件中的必要條 ElastiCache 件和限制

Amazon RDS p 接頭版本

Amazon RDS 支援下列引擎版本:

Aurora 產品版本

  • Amazon Aurora 全球資料庫轉換需要 Aurora 與 MySQL 5.7 相容性與 MySQL 5.7 相容性、2.09.1 及更高版本

    如需詳細資訊,請參閱 Amazon Aurora 全域資料庫的限制

ElastiCache 適用於產品版本

Amazon ElastiCache 適用於 Redis 的支持以下版本:

  • Redis 7.1 (增強版)

  • Redis 7.0 (增強版)

  • Redis 6.2 (增強版)

  • Redis 6.0 (增強版)

  • Redis 5.0.6 (增強版)

如需詳細資訊,請參閱 Redis 版本支援 ElastiCache

架構

Amazon RDS 架構

Amazon RDS 架構包括以下資源:

  • 在主要區域 (us-east-1) 中建立的主要 Amazon RDS 資料庫執行個體,具有用戶端讀取/寫入存取權

  • 在次要區域 (us-west-2) 中建立的 Amazon RDS 僅供讀取複本,具有用戶端唯讀存取權

  • 主要和次要區域中部署的 DR 協調器架構

單一 AWS 帳戶中的雙區域 RDS 架構圖。

上圖顯示以下項目:

  1. 主要執行個體與次要執行個體之間的非同步複製

  2. 主要區域中用戶端的讀取/寫入存取

  3. 次要區域中用戶端的唯讀存取權

Aurora 建築

Amazon Aurora 架構包括下列資源:

  • 在主要區域 (us-east-1) 中使用主動寫入器端點建立的主要 Aurora 資料庫叢集

  • 在次要區域 (us-west-2) 中使用非作用中寫入器端點建立的 Aurora 資料庫叢集

  • 主要和次要區域中部署的 DR 協調器架構

單一 AWS 帳戶中的雙區域 Aurora 部署圖表。

上圖顯示以下項目:

  1. 主要叢集與次要叢集之間的非同步複製

  2. 具有主動寫入器端點的主要資料庫叢集

  3. 具有非作用中寫入器端點的次要資料庫叢集

ElastiCache 對於雷迪斯架構

ElastiCache 適用於 Redis 的 Amazon 架構包括以下資源:

  • 針對使用兩個叢集建立 ElastiCache 的 Redis 全域資料存放區:

    1. 主要區域中的主要叢集 (us-east-1)

    2. 次要區域中的次要叢集 (us-west-2)

  • 在兩個叢集之間使用 TLS 1.2 加密的 Amazon 跨區域連結

  • 主要和次要區域中部署的 DR 協調器架構

使用 Amazon 跨區域連結的雙區域 ElastiCache 部署圖表。

自動化和規模

DR Orchestrator 架構具備擴充能力,並支援 parallel 多個 AWS 資料庫的容錯移轉或容錯回復。

您可以使用下列承載程式碼容錯移轉帳戶中的多個 AWS 資料庫。在此範例中,三個 AWS 資料庫 (兩個全域資料庫,例如:與 Aurora MySQL 相容或與 Aurora PostgreSQL 相容,以及一個 Amazon RDS for MySQL 執行個體) 容錯移轉至 DR 區域:

{ "StatePayload": [ { "layer": 1, "resources": [ { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (MySQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier" } }, { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (PostgreSQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-postgres-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-postgres-cluster-identifier" } }, { "resourceType": "PromoteRDSReadReplica", "resourceName": "Promote RDS for MySQL Read Replica", "parameters": { "RDSInstanceIdentifier": "!Import rds-mysql-instance-identifier", "TargetClusterIdentifier": "!Import rds-mysql-instance-global-arn" } } ] } ] }

工具

AWS 服務

  • Amazon Aurora 是全受管的關聯式資料庫引擎,專為雲端建置,並與 MySQL 和 PostgreSQL 相容。

  • Amazon 可 ElastiCache協助您在中設定、管理和擴展分散式記憶體內快取環境。 AWS 雲端這種模式使用 Amazon ElastiCache 的 Redis。

  • AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。在這種模式中,Lambda 函數用 AWS Step Functions 於執行步驟。

  • Amazon Relational Database Service (Amazon RDS) 可協助您在中設定、操作和擴展關聯式資料庫 AWS 雲端。此模式支援 Amazon RDS for MySQL (適用於 MySQL)、亞馬遜 RDS 以及適用於瑪利亞德的亞馬遜 RDS。

  • AWS SDK for Python (Boto3)可協助您將 Python 應用程式、程式庫或指令碼與 AWS 服務. 在這種模式中,Boto3 API 用於與數據庫實例或全局數據庫進行通信。

  • AWS Step Functions是一項無伺服器協調服務,可協助您結合 AWS Lambda 功能與其他功能, AWS 服務 以建置關鍵業務應用程式。在此模式中,Step Functions 狀態機器用於協調和執行資料庫執行個體或全域資料庫的跨區域容錯移轉和容錯回復。

代碼存儲庫

此模式的代碼可在上 GitHub的 aws-cross-region-dr-data 存儲庫中找到。

史诗

任務描述所需技能

克隆存 GitHub 儲庫。

若要複製存放庫,請執行下列命令:

git clone https://github.com/aws-samples/aws-cross-region-dr-databases.git
AWS DevOps,AWS 管理員

將 Lambda 函數程式碼封 Package 在 .zip 檔案封存中。

建立 Lambda 函數的封存檔案,以包含 DR 協調器架構相依性:

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts bash scripts/deploy-orchestrator-sh.sh
AWS 管理員

建立 S3 儲存貯體。

S3 儲存貯體需要存放 DR 協調器架構以及您的最新組態。建立兩個 S3 儲存貯體,一個位於主要區域 (us-east-1),另一個位於次要區域 (us-west-2):

  • dr-orchestrator-xxxxxx-us-east-1

  • dr-orchestrator-xxxxxx-us-west-2

以隨機值取代,以使值區名稱xxxxxx具唯一性。

AWS 管理員

建立子網路和安全性群組。

在主要區域 (us-east-1) 和次要區域 (us-west-2) 中,為 VPC 中的 Lambda 函數部署建立兩個子網路和一個安全群組:

  • subnet-XXXXXXX

  • subnet-YYYYYYY

  • sg-XXXXXXXXXXXX

AWS 管理員

更新 DR 協調器參數檔案。

<YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation資料夾中,更新下列 DR 協調器參數檔:

  • Orchestrator-Deployer-parameters-us-east-1.json

  • Orchestrator-Deployer-parameters-us-west-2.json

使用下列參數值xy取代資源名稱和:

[ { "ParameterKey": "TemplateStoreS3BucketName", "ParameterValue": "dr-orchestrator-xxxxxx-us-east-1" }, { "ParameterKey": "TemplateVPCId", "ParameterValue": "vpc-xxxxxx" }, { "ParameterKey": "TemplateLambdaSubnetID1", "ParameterValue": "subnet-xxxxxx" }, { "ParameterKey": "TemplateLambdaSubnetID2", "ParameterValue": "subnet-yyyyyy" }, { "ParameterKey": "TemplateLambdaSecurityGroupID", "ParameterValue": "sg-xxxxxxxxxx" } ]
AWS 管理員

將 DR 協調器架構程式碼上傳至 S3 儲存貯體。

S3 存儲桶中的代碼將比在本地目錄中更安全。將目DR-Orchestration-artifacts錄 (包括所有檔案和子資料夾) 上傳到 S3 儲存貯體。

若要上傳程式碼,請執行下列動作:

  1. 登入 AWS Management Console。

  2. 導覽至 Amazon S3 主控台。

  3. 選取dr-orchestrator-xxxxxx-us-east-1 bucket

  4. 選擇 [上傳],然後選擇 [新增資料夾]。

  5. 選取 DR-Orchestration-artifacts 資料夾。

  6. 選擇上傳

  7. 選取dr-orchestrator-xxxxxx-us-west-2值區。

  8. 重複步驟 4-7。

AWS 管理員

在主要區域中部署 DR 協調器架構。

若要在主要區域 (us-east-1) 中部署 DR 協調器架構,請執行下列命令:

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation aws cloudformation deploy \ --region us-east-1 \ --stack-name dr-orchestrator \ --template-file Orchestrator-Deployer.yaml \ --parameter-overrides file://Orchestrator-Deployer-parameters-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback
AWS 管理員

在次要區域中部署 DR 協調器架構。

在次要區域 (us-west-2) 中,執行下列命令:

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation aws cloudformation deploy \ --region us-west-2 \ --stack-name dr-orchestrator \ --template-file Orchestrator-Deployer.yaml \ --parameter-overrides file://Orchestrator-Deployer-parameters-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback
AWS 管理員

驗證部署。

如果命 AWS CloudFormation 令運行成功,它返回以下輸出:

Successfully created/updated stack - dr-orchestrator

或者,您可以瀏覽至主 AWS CloudFormation 控台並驗證dr-orchestrator堆疊的狀態。

AWS 管理員
任務描述所需技能

建立資料庫子網路和安全群組。

在您的 VPC 中,為主要 (us-east-1) 和次要 () 區域的資料庫執行個體或全域資料庫建立兩個子網路和一個安全群組:us-west-2

  • subnet-XXXXXX

  • subnet-XXXXXX

  • sg-XXXXXXXXXX

AWS 管理員

更新主要資料庫執行個體或叢集的參數檔案。

<YOUR LOCAL GIT FOLDER>/App-Stack資料夾中,更新主要「區域」的參數檔案。

Amazon RDS

RDS-MySQL-parameter-us-east-1.json檔案中,更新SubnetIdsDBSecurityGroup使用您建立的資源名稱:

{ "Parameters": { "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx", "DBSecurityGroup": "sg-xxxxxxxxxx", "MySqlGlobalIdentifier":"rds-mysql-instance", "InitialDatabaseName": "mysqldb", "DBPortNumber": "3789", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId" } }

Amazon Aurora

Aurora-MySQL-parameter-us-east-1.json檔案中,更新SubnetIdsDBSecurityGroup使用您建立的資源名稱:

{ "Parameters": { "SubnetIds": "subnet1-xxxxxx,subnet2-xxxxxx", "DBSecurityGroup": "sg-xxxxxxxxxx", "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql", "DBClusterName":"dbcluster-01", "SourceDBClusterName":"dbcluster-02", "DBPortNumber": "3787", "DBInstanceClass":"db.r5.large", "InitialDatabaseName": "sampledb", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId" } }

Amazon ElastiCache 的雷迪斯

ElastiCache-parameter-us-east-1.json檔案中,更新SubnetIdsDBSecurityGroup使用您建立的資源名稱。

{ "Parameters": { "CacheNodeType": "cache.m5.large", "DBSecurityGroup": "sg-xxxxxxxxxx", "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx", "EngineVersion": "5.0.6", "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore", "NumReplicas": "1", "NumShards": "1", "ReplicationGroupId": "demo-redis-cluster", "DBPortNumber": "3788", "TransitEncryption": "true", "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2" } }
AWS 管理員

在主要區域部署資料庫執行個體或叢集。

若要在主要 Region (us-east-1) 中部署執行個體或叢集,請根據資料庫引擎執行下列命令。

Amazon RDS

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 \ --stack-name rds-mysql-app-stack \ --template-file RDS-MySQL-Primary.yaml \ --parameter-overrides file://RDS-MySQL-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon Aurora

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 \ --stack-name aurora-mysql-app-stack \ --template-file Aurora-MySQL-Primary.yaml \ --parameter-overrides file://Aurora-MySQL-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon ElastiCache 的雷迪斯

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 --stack-name elasticache-ds-app-stack \ --template-file ElastiCache-Primary.yaml \ --parameter-overrides file://ElastiCache-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

確認已成功部署 AWS CloudFormation 資源。

AWS 管理員

更新次要資料庫執行個體或叢集的參數檔案。

在資<YOUR LOCAL GIT FOLDER>/App-Stack料夾中,更新次要區域的參數檔案。

Amazon RDS

RDS-MySQL-parameter-us-west-2.json檔案中,更新SubnetIDsDBSecurityGroup使用您建立的資源名稱。PrimaryRegionKMSKeyArn使用從主資料庫執行個體 AWS CloudFormation 堆疊的「輸出」區段MySQLKmsKeyId取得的值來更新:

{ "Parameters": { "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb", "DBSecurityGroup": "sg-cccccccccc", "MySqlGlobalIdentifier":"rds-mysql-instance", "InitialDatabaseName": "mysqldb", "DBPortNumber": "3789", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId", "PrimaryRegionKMSKeyArn":"arn:aws:kms:us-east-1:xxxxxxxxx:key/mrk-xxxxxxxxxxxxxxxxxxxxx" } }

Amazon Aurora

Aurora-MySQL-parameter-us-west-2.json檔案中,DBSecurityGroup使用您建立的資源名稱更新SubnetIDs和。PrimaryRegionKMSKeyArn使用從主資料庫執行個體 AWS CloudFormation 堆疊的「輸出」區段AuroraKmsKeyId取得的值來更新:

{ "Parameters": { "SubnetIds": "subnet1-aaaaaaaaa,subnet2-bbbbbbbbb", "DBSecurityGroup": "sg-cccccccccc", "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql", "DBClusterName":"dbcluster-01", "SourceDBClusterName":"dbcluster-02", "DBPortNumber": "3787", "DBInstanceClass":"db.r5.large", "InitialDatabaseName": "sampledb", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId" } }

Amazon ElastiCache 的雷迪斯

ElastiCache-parameter-us-west-2.json檔案中,更新SubnetIDsDBSecurityGroup使用您建立的資源名稱。PrimaryRegionKMSKeyArn使用從主資料庫執行個體 AWS CloudFormation 堆疊的「輸出」區段ElastiCacheKmsKeyId取得的值來更新:

{ "Parameters": { "CacheNodeType": "cache.m5.large", "DBSecurityGroup": "sg-cccccccccc", "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb", "EngineVersion": "5.0.6", "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore", "NumReplicas": "1", "NumShards": "1", "ReplicationGroupId": "demo-redis-cluster", "DBPortNumber": "3788", "TransitEncryption": "true", "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2" } }
AWS 管理員

在次要區域部署資料庫執行個體或叢集。

根據您的資料庫引擎執行下列命令。

Amazon RDS

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name rds-mysql-app-stack \ --template-file RDS-MySQL-DR.yaml \ --parameter-overrides file://RDS-MySQL-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon Aurora

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name aurora-mysql-app-stack \ --template-file Aurora-MySQL-DR.yaml \ --parameter-overrides file://Aurora-MySQL-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon ElastiCache 的雷迪斯

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name elasticache-ds-app-stack \ --template-file ElastiCache-DR.yaml \ --parameter-overrides file://ElastiCache-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

確認已成功部署 AWS CloudFormation 資源。

AWS 管理員

相關資源