本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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該模式涵蓋了以下數據庫:
若要示範 DR 協調器架構的功能,您可以建立兩個資料庫執行個體或叢集。主要位於中 AWS 區域 us-east-1
,次要位於中us-west-2
。要創建這些資源,您可以使用 aws-cross-region-dr-data GitHub 存儲庫的App-Stack
文件夾中的 AWS CloudFormation 模板。
先決條件和限制
一般先決條
引擎特定先決條件
Amazon RDS 限制
Aurora 限制
功能可用性和支援會因每個資料庫引擎的特定版本而有所不同 AWS 區域。如需跨區域複寫功能和區域可用性的詳細資訊,請參閱跨區域僅供讀取複本。
Aurora 全域資料庫對支援的 Aurora 資料庫執行個體類別有特定組態需求,以及最大數目 AWS 區域。如需詳細資訊,請參閱 Amazon Aurora 全球資料庫的組態需求。
此解決方案已使用主要資料庫執行個體與一個僅供讀取複本進行測試。如果您想要使用一個以上的僅供讀取複本,請先徹底測試解決方案,然後再在生產環境中實作。
ElastiCache 限制
Amazon RDS p 接頭版本
Amazon RDS 支援下列引擎版本:
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 架構包括以下資源:
上圖顯示以下項目:
主要執行個體與次要執行個體之間的非同步複製
主要區域中用戶端的讀取/寫入存取
次要區域中用戶端的唯讀存取權
Aurora 建築
Amazon Aurora 架構包括下列資源:
上圖顯示以下項目:
主要叢集與次要叢集之間的非同步複製
具有主動寫入器端點的主要資料庫叢集
具有非作用中寫入器端點的次要資料庫叢集
ElastiCache 對於雷迪斯架構
ElastiCache 適用於 Redis 的 Amazon 架構包括以下資源:
自動化和規模
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 ): 以隨機值取代,以使值區名稱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 協調器參數檔: 使用下列參數值x ,y 取代資源名稱和: [
{
"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 儲存貯體。 若要上傳程式碼,請執行下列動作: 登入 AWS Management Console。 導覽至 Amazon S3 主控台。 選取dr-orchestrator-xxxxxx-us-east-1 bucket 。 選擇 [上傳],然後選擇 [新增資料夾]。 選取 DR-Orchestration-artifacts 資料夾。 選擇上傳。 選取dr-orchestrator-xxxxxx-us-west-2 值區。 重複步驟 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 檔案中,更新SubnetIds 並DBSecurityGroup 使用您建立的資源名稱: {
"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 檔案中,更新SubnetIds 並DBSecurityGroup 使用您建立的資源名稱: {
"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 檔案中,更新SubnetIds 並DBSecurityGroup 使用您建立的資源名稱。 {
"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 檔案中,更新SubnetIDs 並DBSecurityGroup 使用您建立的資源名稱。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 檔案中,更新SubnetIDs 並DBSecurityGroup 使用您建立的資源名稱。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 管理員 |
相關資源