Automatização do failover e do failback entre regiões usando o DR Orchestrator Framework - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Automatização do failover e do failback entre regiões usando o DR Orchestrator Framework

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

Resumo

Este padrão descreve como usar o DR Orchestrator Framework para a orquestração e a automatização das etapas manuais e propensas a erros, que são necessárias para realizar a recuperação de desastres entre regiões da Amazon Web Services (AWS). O padrão abrange os seguintes bancos de dados:

  • Amazon Relational Database Service (Amazon RDS) para MySQL, Amazon RDS para PostgreSQL ou Amazon RDS para MariaDB

  • Edição compatível com MySQL do Amazon Aurora ou Edição compatível com PostgreSQL do Amazon Aurora (usando um arquivo centralizado)

  • Amazon ElastiCache (Redis OSS)

A fim de demonstrar o funcionamento do DR Orchestrator Framework, você deve criar duas instâncias ou dois clusters de banco de dados. O primário está no Região da AWS us-east-1, e o secundário está dentrous-west-2. Para criar esses recursos, você usa os AWS CloudFormation modelos na App-Stack pasta do GitHub repositório aws-cross-region-dr-databases.

Pré-requisitos e limitações

Pré-requisitos gerais

Pré-requisitos específicos por mecanismo

  • Amazon Aurora — Pelo menos um banco de dados global do Aurora deve estar disponível em dois. Regiões da AWS Você pode usar us-east-1 como região primária e us-west-2 como região secundária.

  • Amazon ElastiCache (Redis OSS) — Um armazenamento de dados ElastiCache global deve estar disponível em dois. Regiões da AWS Você pode use us-east-1 como região primária e us-west-2 como região secundária.

Limitações do Amazon RDS

  • O DR Orchestrator Framework não verifica o atraso de replicação antes de executar um failover ou failback. O atraso de replicação deve ser verificado manualmente.

  • Esta solução foi testada usando uma instância de banco de dados primário com uma réplica de leitura. Se você desejar usar mais de uma réplica de leitura, teste a solução minuciosamente antes de implementá-la em um ambiente de produção.

Limitações do Aurora

  • A disponibilidade e a compatibilidade de recursos variam entre versões específicas de cada mecanismo de banco de dados e entre Regiões da AWS. Para obter mais informações sobre a disponibilidade de recursos e regiões para a replicação entre regiões, consulte Cross-Region read replicas.

  • Os bancos de dados globais do Aurora têm requisitos de configuração específicos para as classes de instância de banco de dados Aurora suportadas e o número máximo de. Regiões da AWS Para obter mais informações, consulte Configuration requirements of an Amazon Aurora Global Database.

  • Esta solução foi testada usando uma instância de banco de dados primário com uma réplica de leitura. Se você desejar usar mais de uma réplica de leitura, teste a solução minuciosamente antes de implementá-la em um ambiente de produção.

ElastiCache Limitações

  • Para obter informações sobre a disponibilidade regional para o armazenamento de dados global e os requisitos ElastiCache de configuração, consulte Pré-requisitos e limitações na documentação. ElastiCache

Versões de produtos do Amazon RDS

O Amazon RDS é compatível com as seguintes versões de mecanismos:

  • MySQL: o Amazon RDS oferece suporte a instâncias de banco de dados que executam as seguintes versões do mecanismo MySQL: MySQL 8.0 e MySQL 5.7.

  • PostgreSQL: para obter informações sobre as versões compatíveis do Amazon RDS para PostgreSQL, consulte Available PostgreSQL database versions.

  • MariaDB: o Amazon RDS oferece suporte a instâncias de banco de dados que executam as seguintes versões do mecanismo MariaDB:

    • MariaDB 10.11

    • MariaDB 10.6

    • MariaDB 10.5

Versões de produtos do Aurora

  • A transição do Amazon Aurora Global Database requer o Aurora compatível com MySQL com compatibilidade para o mecanismo MySQL 5.7, versão 2.09.1 ou versões posteriores

    Para obter mais informações, consulte Limitations of Amazon Aurora global databases.

ElastiCache Versões do produto (Redis OSS)

A Amazon ElastiCache (Redis OSS) oferece suporte às seguintes versões do Redis:

  • Redis 7.1 (aprimorado)

  • Redis 7.0 (aprimorado)

  • Redis 6.2 (aprimorado)

  • Redis 6.0 (aprimorado)

  • Redis 5.0.6 (aprimorado)

Para obter mais informações, consulte Versões suportadas ElastiCache (Redis OSS).

Arquitetura

Arquitetura do Amazon RDS

A arquitetura do Amazon RDS inclui os seguintes recursos:

  • A instância de banco de dados primária do Amazon RDS criada na região primária (us-east-1) com read/write acesso para clientes

  • Uma réplica de leitura do Amazon RDS, criada na região secundária (us-west-2), com acesso somente de leitura para clientes

  • O Framework DR Orchestrator implantado tanto na região primária quanto na região secundária

Diagrama da arquitetura do RDS distribuída em duas regiões em uma única conta da AWS.

O diagrama mostra o seguinte:

  1. Replicação assíncrona entre a instância primária e a instância secundária

  2. Acesso de leitura e de gravação para clientes na região primária

  3. Acesso somente de leitura para clientes na região secundária

Arquitetura do Aurora

A arquitetura do Amazon Aurora inclui os seguintes recursos:

  • O cluster de banco de dados principal do Aurora criado na região primária (us-east-1) com um endpoint de gravação ativo

  • Um cluster de banco de dados do Aurora criado na região secundária (us-west-2) com um endpoint de gravação inativo

  • O Framework DR Orchestrator implantado tanto na região primária quanto na região secundária

Diagrama da implantação do Aurora em duas regiões em uma única conta da AWS.

O diagrama mostra o seguinte:

  1. Replicação assíncrona entre o cluster primário e o cluster secundário

  2. O cluster de banco de dados primário com um endpoint de gravação ativo

  3. O cluster de banco de dados secundário com um endpoint de gravação inativo

ElastiCache Arquitetura (Redis OSS)

A arquitetura Amazon ElastiCache (Redis OSS) inclui os seguintes recursos:

  • Um armazenamento de dados global ElastiCache (Redis OSS) criado com dois clusters:

    1. O cluster primário na região primária (us-east-1)

    2. O cluster secundário na região secundária (us-west-2)

  • Um link da Amazon entre regiões com criptografia TLS 1.2 entre os dois clusters

  • O Framework DR Orchestrator implantado tanto na região primária quanto na região secundária

Diagrama de uma ElastiCache implantação em duas regiões com o link entre regiões da Amazon.

Automação e escala

O DR Orchestrator Framework é escalável e oferece suporte ao failover ou failback de mais de um banco de dados em paralelo. AWS

Você pode usar o seguinte código de carga útil para fazer o failover de vários AWS bancos de dados em sua conta. Neste exemplo, três AWS bancos de dados (dois bancos de dados globais, como o Aurora compatível com MySQL ou o Aurora PostgreSQL, e uma instância do Amazon RDS for MySQL) fazem o failover para a região de recuperação de desastres:

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

Ferramentas

AWS serviços

  • O Amazon Aurora é um mecanismo de banco de dados relacional totalmente gerenciado criado para a nuvem e compatível com o MySQL e o PostgreSQL.

  • ElastiCacheA Amazon ajuda você a configurar, gerenciar e escalar ambientes distribuídos de cache na memória no Nuvem AWS. Esse padrão usa Amazon ElastiCache (Redis OSS).

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado. Nesse padrão, as funções Lambda são usadas AWS Step Functions para executar as etapas.

  • O Amazon Relational Database Service (Amazon RDS) ajuda você a configurar, operar e escalar um banco de dados relacional na Nuvem AWS. Este padrão é compatível com Amazon RDS para MySQL, Amazon RDS para PostgreSQL e Amazon RDS para MariaDB.

  • AWS SDK para Python (Boto3)ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS Nesse padrão, o Boto3 APIs é usado para se comunicar com as instâncias do banco de dados ou bancos de dados globais.

  • AWS Step Functionsé um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios. Neste padrão, máquinas de estado do Step Functions são usadas para realizar a orquestração e executar o failover e o failback entre regiões das instâncias de banco de dados ou de bancos de dados globais.

Repositório de código

O código desse padrão está disponível no repositório aws-cross-region-dr-databases em. GitHub

Épicos

TarefaDescriptionHabilidades necessárias

Clone o GitHub repositório.

Para clonar o repositório, execute o seguinte comando:

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

Empacote o código das funções do Lambda em um arquivo .zip.

Crie os arquivos de compactação das funções do Lambda para incluir as dependências do DR Orchestrator Framework:

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

Crie os buckets do S3.

Os buckets do S3 são necessários para armazenar o DR Orchestrator Framework juntamente com a configuração mais recente. Crie dois buckets do S3, sendo um na região primária (us-east-1) e outro na região secundária (us-west-2):

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

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

Substitua xxxxxx por um valor com randomização para tornar os nomes dos buckets exclusivos.

Administrador da AWS

Crie sub-redes e grupos de segurança.

Tanto na região primária (us-east-1) quanto na região secundária (us-west-2), crie duas sub-redes e um grupo de segurança para a implantação da função do Lambda em sua VPC:

  • subnet-XXXXXXX

  • subnet-YYYYYYY

  • sg-XXXXXXXXXXXX

Administrador da AWS

Atualize os arquivos de parâmetros do DR Orchestrator.

Na pasta <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation, atualize os seguintes arquivos de parâmetros do DR Orchestrator:

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

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

Use os seguintes valores de parâmetro, substituindo x e y pelos nomes dos seus recursos:

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

Faça o upload do código do DR Orchestrator Framework para o bucket do S3.

O código estará mais seguro em um bucket do S3 do que no diretório local. Faça o upload do diretório DR-Orchestration-artifacts, incluindo todos os arquivos e as subpastas, nos buckets do S3.

Para fazer o upload do código, execute as seguintes etapas:

  1. Faça login no Console de gerenciamento da AWS.

  2. Acesse o console do Amazon S3.

  3. Selecione o dr-orchestrator-xxxxxx-us-east-1 bucket.

  4. Escolha Upload e, em seguida, selecione Adicionar pasta.

  5. Selecione a pasta DR-Orchestration-artifacts.

  6. Escolha Carregar.

  7. Selecione o bucket dr-orchestrator-xxxxxx-us-west-2.

  8. Repita as etapas de 4 a 7.

Administrador da AWS

Faça a implantação do DR Orchestrator Framework na região primária.

Para implantar o DR Orchestrator Framework na região primária (us-east-1), execute os seguintes comandos:

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
Administrador da AWS

Faça a implantação do DR Orchestrator Framework na região secundária.

Na região secundária (us-west-2), execute os seguintes comandos:

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
Administrador da AWS

Verificar a implantação.

Se o CloudFormation comando for executado com êxito, ele retornará a seguinte saída:

Successfully created/updated stack - dr-orchestrator

Como alternativa, você pode navegar até o CloudFormation console e verificar o status da dr-orchestrator pilha.

Administrador da AWS
TarefaDescriptionHabilidades necessárias

Crie as sub-redes e os grupos de segurança do banco de dados.

Na sua VPC, crie duas sub-redes e um grupo de segurança para a instância de banco de dados ou para o banco de dados global em ambas as regiões, primária (us-east-1) e secundária (us-west-2):

  • subnet-XXXXXX

  • subnet-XXXXXX

  • sg-XXXXXXXXXX

Administrador da AWS

Atualize o arquivo de parâmetros da instância ou do cluster de banco de dados primário.

Na pasta <YOUR LOCAL GIT FOLDER>/App-Stack, atualize o arquivo de parâmetros para a região primária.

Amazon RDS

No arquivo RDS-MySQL-parameter-us-east-1.json, atualize SubnetIds e DBSecurityGroup com os nomes dos recursos que você criou:

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

No arquivo Aurora-MySQL-parameter-us-east-1.json, atualize SubnetIds e DBSecurityGroup com os nomes dos recursos que você criou:

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

No arquivo ElastiCache-parameter-us-east-1.json, atualize SubnetIds e DBSecurityGroup com os nomes dos recursos que você criou.

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

Implante a instância ou o cluster de banco de dados na região primária.

Para implantar a instância ou o cluster na região primária (us-east-1), execute os comandos, apresentados a seguir, de acordo com o mecanismo de banco de dados que você está usando.

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

Verifique se os CloudFormation recursos foram implantados com êxito.

Administrador da AWS

Atualize o arquivo de parâmetros da instância ou do cluster de banco de dados secundário.

Na pasta <YOUR LOCAL GIT FOLDER>/App-Stack, atualize o arquivo de parâmetros para a região secundária.

Amazon RDS

No arquivo RDS-MySQL-parameter-us-west-2.json, atualize SubnetIDs e DBSecurityGroup com os nomes dos recursos que você criou. Atualize o PrimaryRegionKMSKeyArn com o valor de MySQLKmsKeyId obtido da seção Saídas da CloudFormation pilha para a instância de banco de dados primária:

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

No arquivo Aurora-MySQL-parameter-us-west-2.json, atualize SubnetIDs e DBSecurityGroup com os nomes dos recursos que você criou. Atualize o PrimaryRegionKMSKeyArn com o valor de AuroraKmsKeyId obtido da seção Saídas da CloudFormation pilha para a instância de banco de dados primária:

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

No arquivo ElastiCache-parameter-us-west-2.json, atualize SubnetIDs e DBSecurityGroup com os nomes dos recursos que você criou. Atualize o PrimaryRegionKMSKeyArn com o valor de ElastiCacheKmsKeyId obtido da seção Saídas da CloudFormation pilha para a instância de banco de dados primária:

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

Implante a instância ou o cluster de banco de dados na região secundária.

Execute os comandos apresentados a seguir, de acordo com o seu mecanismo de banco de dados.

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

Verifique se os CloudFormation recursos foram implantados com êxito.

Administrador da AWS

Recursos relacionados