AWS Admin

Como Usar RDS em Profundidade: Multi-AZ, Read Replicas e Parameter Groups em Produção Já leu

Arquitetura de Alta Disponibilidade com RDS O Amazon RDS (Relational Database Service) é uma solução gerenciada que simplifica a operação de bancos de dados em produção. Quando você trabalha em ambientes críticos, três pilares definem uma arquitetura robusta: Multi-AZ para failover automático, Read Replicas para escalabilidade de leitura, e Parameter Groups para otimização configurável. Esses mecanismos transformam um banco de dados vulnerável em uma solução resiliente e performática. A escolha correta dessas configurações não é arbitrária. Multi-AZ protege contra falhas de infraestrutura. Read Replicas distribuem carga de leitura. Parameter Groups garantem que sua aplicação funcione em sintonia com o motor do banco. Dominar esses três conceitos é fundamental para qualquer profissional que trabalhe com dados em escala. Multi-AZ: Proteção Automática contra Falhas O Que É e Por Que Usar Multi-AZ (Multi-Availability Zone) cria uma réplica síncrona do seu banco de dados em outra zona de disponibilidade. Se a primária falhar, o RDS promove automaticamente a réplica em segundos, sem perda

Arquitetura de Alta Disponibilidade com RDS

O Amazon RDS (Relational Database Service) é uma solução gerenciada que simplifica a operação de bancos de dados em produção. Quando você trabalha em ambientes críticos, três pilares definem uma arquitetura robusta: Multi-AZ para failover automático, Read Replicas para escalabilidade de leitura, e Parameter Groups para otimização configurável. Esses mecanismos transformam um banco de dados vulnerável em uma solução resiliente e performática.

A escolha correta dessas configurações não é arbitrária. Multi-AZ protege contra falhas de infraestrutura. Read Replicas distribuem carga de leitura. Parameter Groups garantem que sua aplicação funcione em sintonia com o motor do banco. Dominar esses três conceitos é fundamental para qualquer profissional que trabalhe com dados em escala.

Multi-AZ: Proteção Automática contra Falhas

O Que É e Por Que Usar

Multi-AZ (Multi-Availability Zone) cria uma réplica síncrona do seu banco de dados em outra zona de disponibilidade. Se a primária falhar, o RDS promove automaticamente a réplica em segundos, sem perda de dados. Isso é diferente de Read Replicas, que são assíncronas e servem principalmente para distribuir leitura.

Ativar Multi-AZ é simples via CLI:

aws rds modify-db-instance \
  --db-instance-identifier mydb-prod \
  --multi-az \
  --apply-immediately

O custo de Multi-AZ é aproximadamente o dobro (você paga por duas instâncias), mas a redução de downtime justifica em ambientes críticos. Durante uma falha, você experimenta tipicamente 1-2 minutos de indisponibilidade enquanto o failover ocorre — aceitável para a maioria dos SLAs.

Monitoramento e Comportamento em Falha

Use CloudWatch para monitorar o status Multi-AZ. O evento RDS-EVENT-0024 indica um failover iniciado. Configure alarmes para detecção rápida:

aws cloudwatch put-metric-alarm \
  --alarm-name rds-failover-detection \
  --alarm-description "Alert on RDS failover" \
  --metric-name FailoverCount \
  --namespace AWS/RDS \
  --statistic Sum \
  --period 300 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold

Importante: durante o failover, conexões ativas são interrompidas. Implemente retry logic na aplicação com backoff exponencial para recuperação automática.

Read Replicas: Escalando Leitura sem Sobrecarregar a Primária

Criação e Distribuição de Carga

Read Replicas são cópias assíncronas do banco que aceitam apenas leituras. Use-as para distribuir consultas pesadas, relatórios ou cargas analíticas. Você pode ter até 15 replicas por instância primária, e cada replica pode estar em uma AZ ou região diferente.

Criar uma Read Replica é direto:

aws rds create-db-instance-read-replica \
  --db-instance-identifier mydb-replica-1 \
  --source-db-instance-identifier mydb-prod \
  --db-instance-class db.t3.medium \
  --publicly-accessible false

Em Python, você pode rotear leituras automaticamente:

import pymysql
from pymysql import cursors

def get_read_connection():
    """Conecta na read replica para consultas pesadas"""
    return pymysql.connect(
        host="mydb-replica-1.xxxxx.rds.amazonaws.com",
        user="admin",
        password="senha",
        database="proddb",
        cursorclass=cursors.DictCursor
    )

def get_write_connection():
    """Conecta na instância primária para escritas"""
    return pymysql.connect(
        host="mydb-prod.xxxxx.rds.amazonaws.com",
        user="admin",
        password="senha",
        database="proddb",
        cursorclass=cursors.DictCursor
    )

# Uso
write_conn = get_write_connection()
read_conn = get_read_connection()

# Escrita sempre na primária
cursor = write_conn.cursor()
cursor.execute("INSERT INTO usuarios (nome) VALUES (%s)", ("João",))
write_conn.commit()

# Leitura na replica
cursor = read_conn.cursor()
cursor.execute("SELECT * FROM usuarios WHERE ativo = 1 LIMIT 100")
results = cursor.fetchall()

Lag de Replicação

O lag (atraso) entre primária e replica é crítico. Se sua replica estiver com 5 segundos de atraso, dados muito recentes não estarão visíveis. Monitore com:

aws rds describe-db-instances \
  --db-instance-identifier mydb-replica-1 \
  --query 'DBInstances[0].StatusInfos'

Para aplicações que exigem consistência forte imediata, roteie essas queries para a primária mesmo que seja mais lento. Use Read Replicas apenas para relatórios, analytics e operações que toleram alguns segundos de atraso.

Parameter Groups: Otimização Configurável em Produção

Customização de Parâmetros Críticos

Parameter Groups definem como o motor do banco se comporta. MySQL, PostgreSQL e Oracle têm centenas de parâmetros. Em produção, você deve customizar pelo menos os mais impactantes: max_connections, innodb_buffer_pool_size, slow_query_log, e log_bin_trust_function_creators.

Crie um parameter group personalizado:

aws rds create-db-parameter-group \
  --db-parameter-group-name mydb-params-prod \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group otimizado para produção"

# Modificar parâmetros
aws rds modify-db-parameter-group \
  --db-parameter-group-name mydb-params-prod \
  --parameters \
    ParameterName=max_connections,ParameterValue=500,ApplyMethod=immediate \
    ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate \
    ParameterName=long_query_time,ParameterValue=2,ApplyMethod=immediate

Aplicação e Boas Práticas

Sempre aplique Parameter Groups antes de colocar a instância em produção. Se precisar mudar um parâmetro que exige reinicialização (ApplyMethod=pending-reboot), agende a mudança para janela de manutenção.

Exemplo completo em Terraform para infraestrutura como código:

resource "aws_db_parameter_group" "prod" {
  name   = "mydb-params-prod"
  family = "mysql8.0"

  parameter {
    name  = "max_connections"
    value = "500"
  }

  parameter {
    name  = "slow_query_log"
    value = "1"
  }

  parameter {
    name  = "long_query_time"
    value = "2"
  }
}

resource "aws_db_instance" "prod" {
  identifier           = "mydb-prod"
  engine               = "mysql"
  engine_version       = "8.0.35"
  instance_class       = "db.r6i.xlarge"
  allocated_storage    = 100
  parameter_group_name = aws_db_parameter_group.prod.name
  multi_az             = true
  storage_encrypted    = true
}

Monitore o impacto de mudanças. Use Enhanced Monitoring do RDS para visualizar CPU, memória, IO em tempo real. Se innodb_buffer_pool_size for muito grande, você terá thrashing de memória. Se for muito pequeno, IO disco dispara.

Conclusão

Dominar RDS em profundidade significa entender que Multi-AZ, Read Replicas e Parameter Groups trabalham juntos. Multi-AZ garante alta disponibilidade. Read Replicas escalam leitura horizontalmente. Parameter Groups garantem performance através da configuração correta. Em produção, implemente os três: sempre ative Multi-AZ para dados críticos, distribua leituras pesadas em replicas, e customize parâmetros baseado no perfil real da sua aplicação através de monitoramento contínuo.

Referências


Artigos relacionados