Otomatiskan failover dan failback lintas wilayah dengan menggunakan DR Orchestrator Framework - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Otomatiskan failover dan failback lintas wilayah dengan menggunakan DR Orchestrator Framework

Jitendra Kumar, Pavithra Balasubramanian, dan Oliver Francis, Amazon Web Services

Ringkasan

Pola ini menjelaskan cara menggunakan DR Orchestrator Framework untuk mengatur dan mengotomatiskan langkah-langkah manual yang rawan kesalahan untuk melakukan pemulihan bencana di seluruh Wilayah Amazon Web Services ().AWS Pola ini mencakup database berikut:

  • Amazon Relational Database Service (Amazon RDS) untuk MySQL, Amazon RDS untuk PostgreSQL, atau Amazon RDS for MariaDB

  • Amazon Aurora Edisi yang kompatibel dengan MySQL atau Edisi yang kompatibel dengan Amazon Aurora PostgreSQL (menggunakan file terpusat)

  • Amazon ElastiCache (Redis OSS)

Untuk mendemonstrasikan fungsionalitas DR Orchestrator Framework, Anda membuat dua instance atau cluster DB. Yang utama ada di Wilayah AWS us-east-1, dan yang sekunder ada dius-west-2. Untuk membuat sumber daya ini, Anda menggunakan AWS CloudFormation template di App-Stack folder repositori aws-cross-region-dr-databases GitHub .

Prasyarat dan batasan

Prasyarat umum

Prasyarat khusus mesin

  • Amazon Aurora — Setidaknya satu database global Aurora harus tersedia dalam dua. Wilayah AWS Anda dapat menggunakan us-east-1 sebagai Wilayah utama, dan digunakan us-west-2 sebagai Wilayah sekunder.

  • Amazon ElastiCache (Redis OSS) — Datastore ElastiCache global harus tersedia dalam dua. Wilayah AWS Anda dapat use us-east-1 sebagai Wilayah utama, dan digunakan us-west-2 sebagai Wilayah sekunder.

Keterbatasan Amazon RDS

  • DR Orchestrator Framework tidak memeriksa kelambatan replikasi sebelum melakukan failover atau failback. Kelambatan replikasi harus diperiksa secara manual.

  • Solusi ini telah diuji menggunakan instance database utama dengan satu replika baca. Jika Anda ingin menggunakan lebih dari satu replika baca, uji solusinya secara menyeluruh sebelum menerapkannya di lingkungan produksi.

Keterbatasan Aurora

  • Ketersediaan dan dukungan fitur bervariasi di seluruh versi tertentu dari setiap mesin database dan di seluruh Wilayah AWS. Untuk informasi selengkapnya tentang fitur dan ketersediaan Wilayah untuk replikasi Lintas wilayah, lihat replika baca Lintas Wilayah.

  • Database global Aurora memiliki persyaratan konfigurasi khusus untuk kelas instans Aurora DB yang didukung dan jumlah maksimum. Wilayah AWS Untuk informasi selengkapnya, lihat Persyaratan konfigurasi database global Amazon Aurora.

  • Solusi ini telah diuji menggunakan instance database utama dengan satu replika baca. Jika Anda ingin menggunakan lebih dari satu replika baca, uji solusinya secara menyeluruh sebelum menerapkannya di lingkungan produksi.

ElastiCache keterbatasan

  • Untuk informasi tentang ketersediaan Wilayah untuk Datastore Global dan persyaratan ElastiCache konfigurasi, lihat Prasyarat dan batasan dalam dokumentasi. ElastiCache

Amazon RDS p versi roduct

Amazon RDS mendukung versi mesin berikut:

Versi produk Aurora

  • Peralihan basis data global Amazon Aurora memerlukan Aurora MySQL yang kompatibel dengan kompatibilitas MySQL 5.7, versi 2.09.1 dan lebih tinggi

    Untuk informasi selengkapnya, lihat Batasan database global Amazon Aurora.

ElastiCache (Redis OSS) versi produk

Amazon ElastiCache (Redis OSS) mendukung versi Redis berikut:

  • Redis 7.1 (ditingkatkan)

  • Redis 7.0 (ditingkatkan)

  • Redis 6.2 (ditingkatkan)

  • Redis 6.0 (ditingkatkan)

  • Redis 5.0.6 (ditingkatkan)

Untuk informasi selengkapnya, lihat Versi yang didukung ElastiCache (Redis OSS).

Arsitektur

Arsitektur Amazon RDS

Arsitektur Amazon RDS mencakup sumber daya berikut:

  • Instans Amazon RDS DB utama yang dibuat di Region (us-east-1) utama dengan read/write akses untuk klien

  • Replika baca Amazon RDS yang dibuat di Region sekunder (us-west-2) dengan akses hanya-baca untuk klien

  • DR Orchestrator Framework dikerahkan di Wilayah primer dan sekunder

Diagram arsitektur RDS dua wilayah dalam satu akun AWS.

Diagram menunjukkan yang berikut:

  1. Replikasi asinkron antara instance primer dan instance sekunder

  2. Akses baca/tulis untuk klien di Wilayah utama

  3. Akses hanya-baca untuk klien di Wilayah sekunder

Arsitektur Aurora

Arsitektur Amazon Aurora mencakup sumber daya berikut:

  • Cluster Aurora DB utama yang dibuat di Region (us-east-1) primer dengan titik akhir penulis aktif

  • Cluster Aurora DB yang dibuat di Region sekunder (us-west-2) dengan titik akhir penulis yang tidak aktif

  • DR Orchestrator Framework dikerahkan di Wilayah primer dan sekunder

Diagram penyebaran Aurora dua wilayah dalam satu akun AWS.

Diagram menunjukkan yang berikut:

  1. Replikasi asinkron antara cluster primer dan cluster sekunder

  2. Cluster DB utama dengan titik akhir penulis aktif

  3. Cluster DB sekunder dengan titik akhir penulis yang tidak aktif

ElastiCache Arsitektur (Redis OSS)

Arsitektur Amazon ElastiCache (Redis OSS) mencakup sumber daya berikut:

  • Datastore global ElastiCache (Redis OSS) yang dibuat dengan dua cluster:

    1. Cluster utama di Region primer (us-east-1)

    2. Cluster sekunder di Region sekunder (us-west-2)

  • Tautan Amazon Cross-region dengan enkripsi TLS 1.2 antara kedua cluster

  • DR Orchestrator Framework dikerahkan di Wilayah primer dan sekunder

Diagram ElastiCache penyebaran dua wilayah dengan tautan Lintas wilayah Amazon.

Otomatisasi dan skala

DR Orchestrator Framework dapat diskalakan dan mendukung failover atau failback lebih dari satu database secara paralel. AWS

Anda dapat menggunakan kode payload berikut untuk gagal melalui beberapa AWS database di akun Anda. Dalam contoh ini, tiga AWS database (dua database global seperti Aurora MySQL kompatibel atau Aurora PostgreSQL kompatibel, dan satu Amazon RDS untuk MySQL instance) gagal ke Wilayah 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" } } ] } ] }

Alat

AWS layanan

  • Amazon Aurora adalah mesin database relasional yang dikelola sepenuhnya yang dibangun untuk cloud dan kompatibel dengan MySQL dan PostgreSQL.

  • Amazon ElastiCache membantu Anda mengatur, mengelola, dan menskalakan lingkungan cache dalam memori terdistribusi di. AWS Cloud Pola ini menggunakan Amazon ElastiCache (Redis OSS).

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan. Dalam pola ini, fungsi Lambda digunakan oleh AWS Step Functions untuk melakukan langkah-langkah.

  • Amazon Relational Database Service (Amazon RDS) membantu Anda menyiapkan, mengoperasikan, dan menskalakan database relasional di. AWS Cloud Pola ini mendukung Amazon RDS for MySQL, Amazon RDS for PostgreSQL, dan Amazon RDS for MariaDB.

  • AWS SDK untuk Python (Boto3)membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS Dalam pola ini, Boto3 APIs digunakan untuk berkomunikasi dengan instance database atau database global.

  • AWS Step Functionsadalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting. Dalam pola ini, mesin status Step Functions digunakan untuk mengatur dan menjalankan failover Cross-region dan failback dari instance database atau database global.

Repositori kode

Kode untuk pola ini tersedia di repositori aws-cross-region-dr-databases pada. GitHub

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning GitHub repositori.

Untuk mengkloning repositori, jalankan perintah berikut:

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

Package Lambda berfungsi kode dalam arsip file.zip.

Buat file arsip untuk fungsi Lambda untuk menyertakan dependensi DR Orchestrator Framework:

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

Buat ember S3.

Bucket S3 diperlukan untuk menyimpan DR Orchestrator Framework bersama dengan konfigurasi terbaru Anda. Buat dua bucket S3, satu di Region utama (us-east-1), dan satu di Region sekunder (us-west-2):

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

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

Ganti xxxxxx dengan nilai acak untuk membuat nama bucket unik.

Administrator AWS

Buat subnet dan grup keamanan.

Di Region (us-east-1) primer dan Region sekunder (us-west-2), buat dua subnet dan satu grup keamanan untuk penerapan fungsi Lambda di VPC Anda:

  • subnet-XXXXXXX

  • subnet-YYYYYYY

  • sg-XXXXXXXXXXXX

Administrator AWS

Perbarui file parameter DR Orchestrator.

Di <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation folder, perbarui file parameter DR Orchestrator berikut:

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

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

Gunakan nilai parameter berikut, ganti x dan y dengan nama sumber daya Anda:

[ { "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" } ]
Administrator AWS

Unggah kode DR Orchestrator Framework ke bucket S3.

Kode akan lebih aman di ember S3 daripada di direktori lokal. Unggah DR-Orchestration-artifacts direktori, termasuk semua file dan subfolder, ke bucket S3.

Untuk mengunggah kode, lakukan hal berikut:

  1. Masuk ke Konsol Manajemen AWS.

  2. Arahkan ke konsol Amazon S3.

  3. Pilihdr-orchestrator-xxxxxx-us-east-1 bucket.

  4. Pilih Unggah, lalu pilih Tambah folder.

  5. Pilih DR-Orchestration-artifacts folder.

  6. Pilih Unggah.

  7. Pilih dr-orchestrator-xxxxxx-us-west-2 ember.

  8. Ulangi langkah 4—7.

Administrator AWS

Menyebarkan Kerangka Orkestrator DR di Wilayah utama.

Untuk menerapkan DR Orchestrator Framework di Region (us-east-1) primer, jalankan perintah berikut:

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
Administrator AWS

Menyebarkan Kerangka Orkestrator DR di Wilayah sekunder.

Di Region sekunder (us-west-2), jalankan perintah berikut:

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
Administrator AWS

Verifikasi penyebaran.

Jika CloudFormation perintah berjalan berhasil, ia mengembalikan output berikut:

Successfully created/updated stack - dr-orchestrator

Atau, Anda dapat menavigasi ke CloudFormation konsol dan memverifikasi status dr-orchestrator tumpukan.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat subnet database dan grup keamanan.

Di VPC Anda, buat dua subnet dan satu grup keamanan untuk instans DB atau database global di Wilayah primer (us-east-1) dan sekunder (us-west-2):

  • subnet-XXXXXX

  • subnet-XXXXXX

  • sg-XXXXXXXXXX

Administrator AWS

Perbarui file parameter untuk instans atau cluster DB primer.

Di <YOUR LOCAL GIT FOLDER>/App-Stack folder, perbarui file parameter untuk Wilayah utama.

Amazon RDS

Dalam RDS-MySQL-parameter-us-east-1.json file, perbarui SubnetIds dan DBSecurityGroup dengan nama sumber daya yang Anda buat:

{ "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

Dalam Aurora-MySQL-parameter-us-east-1.json file, perbarui SubnetIds dan DBSecurityGroup dengan nama sumber daya yang Anda buat:

{ "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 (Redis OSS)

Dalam ElastiCache-parameter-us-east-1.json file, perbarui SubnetIds dan DBSecurityGroup dengan nama sumber daya yang Anda buat.

{ "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" } }
Administrator AWS

Terapkan instans atau cluster DB Anda di Wilayah utama.

Untuk menerapkan instance atau cluster Anda di Region (us-east-1) primer, jalankan perintah berikut berdasarkan mesin database Anda.

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 (Redis OSS)

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

Verifikasi bahwa CloudFormation sumber daya berhasil digunakan.

Administrator AWS

Perbarui file parameter untuk instance atau cluster DB sekunder.

Di <YOUR LOCAL GIT FOLDER>/App-Stack folder, perbarui file parameter untuk Wilayah sekunder.

Amazon RDS

Dalam RDS-MySQL-parameter-us-west-2.json file, perbarui SubnetIDs dan DBSecurityGroup dengan nama sumber daya yang Anda buat. Perbarui PrimaryRegionKMSKeyArn dengan nilai yang MySQLKmsKeyId diambil dari bagian Output dari CloudFormation tumpukan untuk instance DB utama:

{ "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

Dalam Aurora-MySQL-parameter-us-west-2.json file, perbarui SubnetIDs dan DBSecurityGroup dengan nama sumber daya yang Anda buat. Perbarui PrimaryRegionKMSKeyArn dengan nilai yang AuroraKmsKeyId diambil dari bagian Output dari CloudFormation tumpukan untuk instance DB utama:

{ "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 (Redis OSS)

Dalam ElastiCache-parameter-us-west-2.json file, perbarui SubnetIDs dan DBSecurityGroup dengan nama sumber daya yang Anda buat. Perbarui PrimaryRegionKMSKeyArn dengan nilai yang ElastiCacheKmsKeyId diambil dari bagian Output dari CloudFormation tumpukan untuk instance DB utama:

{ "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" } }
Administrator AWS

Terapkan instans atau cluster DB Anda di Wilayah sekunder.

Jalankan perintah berikut, berdasarkan mesin database Anda.

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 (Redis OSS)

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

Verifikasi bahwa CloudFormation sumber daya berhasil digunakan.

Administrator AWS

Sumber daya terkait