Automatize o failover e o 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á.

Automatize o failover e o failback entre regiões usando o DR Orchestrator Framework

Criado por Jitendra Kumar (AWS), Oliver Francis (AWS) e Pavithra Balasubramanian (AWS)

Repositório de código: aws-cross-region-dr -databases

Ambiente: produção

Tecnologias: bancos de dados; infraestrutura; migração; modernização

Serviços da AWS: Amazon Aurora; AWS; Amazon; CloudFormation ElastiCache Amazon RDS; AWS Step Functions

Resumo

Esse padrão descreve como usar o DR Orchestrator Framework para orquestrar e automatizar as etapas manuais e propensas a erros para realizar a recuperação de desastres nas 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 Amazon Aurora MySQL ou edição compatível com Amazon Aurora PostgreSQL (usando um arquivo centralizado)

  • Amazon ElastiCache para Redis

Para demonstrar a funcionalidade do DR Orchestrator Framework, você cria duas instâncias de banco de dados ou clusters. 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 do motor

  • 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 usar us-west-2 como região secundária.

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

Limitações do Amazon RDS

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

  • Essa solução foi testada usando uma instância de banco de dados primária com uma réplica de leitura. Se você quiser 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 o suporte dos recursos variam entre as versões específicas de cada mecanismo de banco de dados Regiões da AWS. Para obter mais informações sobre a disponibilidade de recursos e regiões para replicação entre regiões, consulte Réplicas de leitura entre regiões.

  • 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 Requisitos de configuração de um banco de dados global do Amazon Aurora.

  • Essa solução foi testada usando uma instância de banco de dados primária com uma réplica de leitura. Se você quiser 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 do produto Amazon RDS Up

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

Versões do produto Aurora

ElastiCache para versões do produto Redis

O Amazon ElastiCache for Redis 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 Compatível com ElastiCache versões do Redis.

Arquitetura

Arquitetura 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 acesso de leitura/gravação 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

  • Estrutura do DR Orchestrator implantada nas regiões primária e secundária

Diagrama da arquitetura RDS de 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/gravação para clientes na região principal

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

Arquitetura Aurora

A arquitetura do Amazon Aurora inclui os seguintes recursos:

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

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

  • Estrutura do DR Orchestrator implantada nas regiões primária e 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 principal com um endpoint de gravação ativa

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

ElastiCache para arquitetura Redis

A arquitetura Amazon ElastiCache for Redis inclui os seguintes recursos:

  • Um armazenamento de dados global ElastiCache para Redis 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 entre regiões da Amazon com criptografia TLS 1.2 entre os dois clusters

  • Estrutura do DR Orchestrator implantada nas regiões primária e 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 que é construído 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 for Redis.

  • 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 no. Nuvem AWS Esse padrão é compatível com Amazon RDS para MySQL, Amazon RDS para PostgreSQL e Amazon RDS para MariaDB.

  • AWS SDK for Python (Boto3)ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS Nesse padrão, as APIs do Boto3 são usadas 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. Nesse padrão, as máquinas de estado do Step Functions são usadas para orquestrar e executar o failover e o failback entre regiões das instâncias do banco de dados ou dos 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

TarefaDescriçãoHabilidades 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

O código de funções do Package Lambda em um arquivo de arquivos.zip.

Crie os arquivos de arquivamento das funções 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 buckets S3.

Os buckets S3 são necessários para armazenar o DR Orchestrator Framework junto com sua configuração mais recente. Crie dois buckets S3, 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

xxxxxxSubstitua por um valor aleatório 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 Lambda em sua VPC:

  • subnet-XXXXXXX

  • subnet-YYYYYYY

  • sg-XXXXXXXXXXXX

Administrador da AWS

Atualize os arquivos de parâmetros do DR Orchestrator.

Na <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation pasta, 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âmetros, 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 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 upload do DR-Orchestration-artifacts diretório, incluindo todos os arquivos e subpastas, para os buckets do S3.

Para fazer o upload do código, faça o seguinte:

  1. Faça login no AWS Management Console.

  2. Acesse o console do Amazon S3.

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

  4. Escolha Carregar e, em seguida, escolha Adicionar pasta.

  5. Selecione a pasta DR-Orchestration-artifacts.

  6. Escolha Carregar.

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

  8. Repita as etapas de 4 a 7.

Administrador da AWS

Implante o 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

Implante o 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 AWS 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 AWS CloudFormation console e verificar o status da dr-orchestrator pilha.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

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

Em sua VPC, crie duas sub-redes e um grupo de segurança para a instância de banco de dados ou banco de dados global nas 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 para a instância de banco de dados ou cluster primário.

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

Amazon RDS

No RDS-MySQL-parameter-us-east-1.json arquivo, SubnetIds atualize 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 Aurora-MySQL-parameter-us-east-1.json arquivo, SubnetIds atualize 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 para Redis

No ElastiCache-parameter-us-east-1.json arquivo, SubnetIds atualize 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 sua instância de banco de dados ou cluster na região primária.

Para implantar sua instância ou cluster na região primária (us-east-1), execute os comandos a seguir com base no seu mecanismo de banco de dados.

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 para Redis

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 AWS CloudFormation recursos foram implantados com êxito.

Administrador da AWS

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

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

Amazon RDS

No RDS-MySQL-parameter-us-west-2.json arquivo, SubnetIDs atualize 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 AWS 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 Aurora-MySQL-parameter-us-west-2.json arquivo, SubnetIDs atualize 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 AWS 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 para Redis

No ElastiCache-parameter-us-west-2.json arquivo, SubnetIDs atualize 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 AWS 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 sua instância de banco de dados ou cluster na região secundária.

Execute os comandos a seguir, com base em 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 para Redis

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 AWS CloudFormation recursos foram implantados com êxito.

Administrador da AWS

Recursos relacionados