Como Implementar Replicação Assíncrona para Disaster Recovery entre Datacenters

25 min de leitura Infraestrutura

Visão Geral de Disaster Recovery

O plano de Disaster Recovery (DR), ou Recuperação de Desastres, é uma estratégia fundamental de infraestrutura projetada para restaurar sistemas, dados e aplicações após um evento catastrófico. No contexto de hospedagem e cloud, um desastre não se limita apenas a incêndios ou inundações em um datacenter, mas abrange falhas críticas de hardware, ataques de ransomware massivos, corrupção de tabelas de banco de dados ou erros humanos de configuração que comprometem a integridade do ambiente de produção. O objetivo principal de um plano de DR não é apenas o backup, mas a garantia da continuidade do negócio, minimizando o tempo de inatividade e a perda de informações.

Para mensurar a eficácia de uma estratégia de DR, utilizamos dois indicadores técnicos cruciais: o Recovery Point Objective (RPO) e o Recovery Time Objective (RTO). O RPO define o volume máximo de dados que a empresa aceita perder, medido em tempo; por exemplo, um RPO de 15 minutos significa que, em caso de falha, o sistema deve ser restaurado com dados de no máximo 15 minutos atrás. Já o RTO refere-se ao tempo necessário para que os serviços voltem a operar plenamente. Em arquiteturas de alta disponibilidade, o desafio técnico reside em reduzir ambos os indicadores ao mínimo possível, equilibrando o custo de infraestrutura com a necessidade de resiliência.

A implementação de uma estratégia de DR robusta exige a descentralização da infraestrutura. Depender de um único datacenter, mesmo com redundância de energia e rede, cria um ponto único de falha (Single Point of Failure). A replicação assíncrona, tema central deste tutorial, surge como uma solução técnica para manter uma cópia de dados em um datacenter geograficamente distinto (Offsite). Ao contrário da replicação síncrona, que exige latência quase zero e pode impactar a performance da aplicação principal, a replicação assíncrona permite que o servidor primário processe transações sem aguardar a confirmação do destino, tornando-a ideal para conexões de longa distância entre regiões, desde que o lag de replicação seja monitorado rigorosamente para não comprometer o RPO estabelecido.

Conceitos de Replicação Assíncrona

A replicação assíncrona é um mecanismo de cópia de dados onde o servidor de origem (Master/Primary) confirma a gravação da transação para o cliente sem aguardar a confirmação de recebimento pelo servidor de destino (Slave/Replica). Em arquiteturas de Disaster Recovery, essa técnica é fundamental para manter a performance da aplicação, pois elimina a latência de rede entre datacenters distantes no fluxo de escrita principal.

Diferente da replicação síncrona, onde o commit só é finalizado após o handshake de confirmação entre os nós, a versão assíncrona permite que o processo de escrita ocorra de forma independente. Isso significa que o servidor primário envia os logs de transação (como o binlog no MySQL ou os wal-logs no PostgreSQL) para o destino em intervalos ou conforme a capacidade de banda disponível, criando um pequeno lag (atraso) entre as bases.

Para entender a viabilidade técnica deste método, é necessário compreender três pilares fundamentais:

  • RPO (Recovery Point Objective): Define a tolerância de perda de dados. Na replicação assíncrona, o RPO é maior que zero, pois existe uma janela de tempo entre a escrita no primário e a chegada no destino. Se o datacenter principal falhar antes do envio do último log, os dados contidos nesse intervalo serão perdidos.
  • RTO (Recovery Time Objective): Refere-se ao tempo necessário para restaurar o serviço. A replicação assíncrona auxilia no RTO baixo, pois o servidor de destino já possui uma base de dados "quente" (warm standby), pronta para ser promovida a primária após a reconfiguração do DNS ou Load Balancer.
  • Latência de Rede e Throughput: O sucesso da estratégia depende da largura de banda entre os datacenters. Se o volume de escritas (write heavy) exceder a capacidade de transmissão, o replication lag crescerá indefinidamente, tornando o plano de recuperação ineficaz.

Em termos práticos, utilizamos o conceito de log shipping. O servidor primário registra cada alteração em um arquivo de log sequencial. Um processo de background ou um agente de replicação lê esses logs e os transmite via rede para o servidor de destino, que os reaplica em seu próprio conjunto de dados. Este modelo é ideal para conexões WAN (Wide Area Network) onde a latência entre regiões geográficas impede o uso de protocolos síncronos sem degradar a experiência do usuário final.

Pré-requisitos de Infraestrutura

Para implementar uma estratégia de Disaster Recovery (DR) funcional, não basta apenas replicar dados; é necessário garantir que a infraestrutura de origem e destino possua características técnicas compatíveis para suportar a carga de trabalho em caso de failover. A replicação assíncrona exige um planejamento rigoroso de rede e hardware para evitar que o atraso na sincronização (lag) torne os dados obsoletos.

  • Servidores com Versões Compatíveis: Ambos os nós (Primary e Standby) devem rodar a mesma versão principal do motor de banco de dados (ex: MySQL 8.0 ou PostgreSQL 15). Diferenças de versões podem causar erros de sintaxe no log binário ou incompatibilidade de formatos de arquivos.
  • Conectividade de Rede de Baixa Latência: É indispensável uma conexão estável entre os datacenters. Embora a replicação seja assíncrona, uma latência excessiva aumenta o replication lag, o que impacta o RPO (Recovery Point Objective) da sua operação.
  • Acesso Privado ou VPN: A comunicação entre os servidores deve ocorrer preferencialmente através de uma VPN Site-to-Site ou rede privada. Expor a porta de replicação (como a 3306 do MySQL) diretamente para a internet pública é um risco crítico de segurança.
  • Capacidade de Armazenamento Redundante: O servidor de destino deve possuir capacidade de disco igual ou superior ao servidor primário. O crescimento do banco de dados no nó principal precisa ser refletido no nó de DR sem causar interrupções por falta de espaço.
  • Configuração de Firewall e ACLs: As regras de firewall (iptables, ufw ou Security Groups) devem permitir o tráfego de entrada na porta de serviço do destino, originado exclusivamente do IP do servidor primário.
  • Usuário de Replicação com Privilégios Restritos: É necessário criar um usuário dedicado para o processo de replicação, utilizando o comando CREATE USER com permissões limitadas apenas ao host de origem, seguindo o princípio do privilégio mínimo.
  • Logs Binários Ativados: O servidor primário deve estar configurado para gerar Binary Logs (ou WAL no PostgreSQL) com retenção suficiente para que o servidor de destino consiga ler as alterações mesmo em caso de breve desconexão.

Preparação dos Servidores e Rede

Antes de iniciar a configuração lógica da replicação, é fundamental garantir que a camada de infraestrutura e conectividade entre os datacenters esteja devidamente preparada. A replicação assíncrona depende de uma comunicação estável para que o atraso (lag) entre o servidor primário e o secundário não comprometa o RPO (Recovery Point Objective) do seu plano de Disaster Recovery.

O primeiro passo é garantir que o tráfego de replicação seja permitido através dos firewalls de ambos os servidores. Se você utiliza o ufw (Uncomplicated Firewall) no Ubuntu ou Debian, deve liberar a porta do serviço (ex: 3306 para MySQL) para o IP específico do servidor de destino.

  1. Liberação de porta no servidor primário:
    sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
    A flag from 203.0.113.10 restringe o acesso apenas ao IP do servidor de destino, garantindo que a porta não fique exposta à internet pública, enquanto proto tcp especifica o protocolo necessário para a comunicação do banco de dados.
  2. Configuração de DNS ou Hostname: Para evitar problemas de resolução de nomes durante um desastre, mapeie os IPs dos servidores no arquivo /etc/hosts de ambos os nodes. Isso garante que, mesmo se o serviço de DNS falhar, os servidores consigam se localizar via nome.
    echo "192.0.2.1 server-primario.toda-solucao.com.br" | sudo tee -a /etc/hosts
    O comando tee -a anexa a entrada ao final do arquivo sem sobrescrever o conteúdo existente.
  3. Ajuste do MTU (Maximum Transmission Unit): Em conexções entre datacenters distintos (via VPN ou túnel), é comum haver fragmentação de pacotes. Verifique se o MTU das interfaces de rede é compatível para evitar perda de performance.
    ip link show eth0
    Este comando exibe o status da interface; verifique se o valor de mtu está padronizado (geralmente 1500) em ambos os pontos para evitar overhead de retransmissão.
  4. Verificação de latência entre os sites: Realize um teste de latência e perda de pacotes para mensurar o impacto do atraso na replicação.
    ping -c 10 server-secundario.toda-solucao.com.br
    A flag -c 10 envia exatamente 10 pacotes. Analise o mdev (desvio padrão) no output; valores muito altos indicam instabilidade na rota entre os datacenters.

Certifique-se também de que o servidor de destino possua recursos de CPU e I/O de disco equivalentes ou superiores ao primário. Em cenários de Disaster Recovery, o servidor secundário precisará assumir a carga de produção instantaneamente, e um gargalo de escrita (write bottleneck) impedirá que ele acompanhe o fluxo de dados do primário.

Configurando o Servidor Primário

O servidor primário, também conhecido como Master, é a origem de todos os dados. A configuração correta é vital para que o log de transações seja gerado de forma íntegra e disponibilizado para o servidor de destino. Neste guia, utilizaremos o MySQL/MariaDB como motor de banco de dados.

  1. Acesse o servidor via SSH com privilégios de superusuário para editar os arquivos de configuração do sistema.

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

    O caminho pode variar dependendo da sua distribuição Linux, mas em sistemas baseados em Debian/Ubuntu, este é o local padrão para o arquivo de configuração do mysqld.

  2. Localize ou adicione as diretivas de replicação no bloco de configuração do servidor. Você deve habilitar o log binário e definir um identificador único para este nó.

    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = nome_do_seu_banco
    bind-address = 0.0.0.0

    A diretiva server-id deve ser única na topologia; o valor 1 é o padrão para o primário. O log_bin define o caminho onde as transações serão gravadas. A flag binlog_do_db restringe a replicação apenas ao banco de dados crítico, reduzindo o overhead de rede. Por fim, o bind-address em 0.0.0.0 permite conexões externas, essencial para que o segundo datacenter alcance o primário.

  3. Crie um usuário de replicação dedicado. Nunca utilize o usuário root para este fim por questões de segurança. Este usuário será responsável por autenticar o servidor de destino no primário.

    mysql -u root -p -e "CREATE USER 'repl_user'@'%' IDENTIFIED BY 'senha_forte_aqui'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES;"

    O comando CREATE USER cria a conta, o GRANT REPLICATION SLAVE concede a permissão específica para o slave ler os logs binários, e o FLUSH PRIVILEGES recarrega as tabelas de permissão do MySQL.

  4. Reinicie o serviço do banco de dados para aplicar as novas configurações de log binário e ID de servidor.

    sudo systemctl restart mysql

    Este comando força o encerramento e reinicialização do processo, garantindo que o engine de armazenamento inicie a gravação do log binário conforme configurado.

Configurando o Servidor de Destino

Após preparar o servidor primário e garantir que a rede entre os datacenters esteja comunicante, o próximo passo é configurar o servidor de destino para atuar como um Slave (escravo) no processo de replicação. O objetivo aqui é transformar este servidor em uma instância de leitura que consome os logs binários gerados pelo primário.

  1. Acesse o servidor de destino via SSH e realize o login no console do banco de dados.
  2. Crie o banco de dados de destino com a mesma estrutura do primário. Para garantir a integridade, o banco deve existir, mesmo que vazio inicialmente, para receber os dados via logs.
    /etc/mysql/mysql.conf.d/mysqld.cnf ou /etc/my.cnf) para habilitar o modo de leitura e identificar o servidor.
    
    
    server-id deve ser obrigatoriamente diferente do primário. A diretiva read_only = 1 é crítica para evitar que aplicações ou administradores escrevam dados localmente no destino, o que causaria um desvio de sincronia (split-brain). O relay_log define onde os logs recebidos serão armazenados temporariamente.

     

  3. Reinicie o serviço do banco de dados para aplicar as novas diretivas de configuração.
    read_only e server-id.

     

  4. Execute o comando de apontamento para o servidor primário, utilizando as credenciais de replicação criadas anteriormente.
    MASTER_HOST define o IP do primário, enquanto MASTER_LOG_FILE e MASTER_LOG_POS indicam o ponto exato de onde a replicação deve começar, garantindo que nenhum dado seja perdido entre o último backup e o início do processo.

     

  5. Inicie o processo de replicação propriamente dito.
    
    # O parâmetro -u define o usuário e -p solicita a senha de acesso administrativo.
  6. Execute o comando de diagnóstico para analisar o status atual da replicação:
    
    # Este comando isolado permite monitorar rapidamente o atraso de sincronização.
    

O output esperado para uma replicação saudável deve ser similar ao exemplo abaixo, onde o valor de atraso é zero ou muito próximo de zero:

<
               Slave_IO_Running: Yes
              Slave_SQL_Running: Yes
            Relay_Log_Info_Files: relay-bin.000001
               Relay_Log_Next: relay-bin.000001
             Relay_Log_Purged: No
        Seconds_Behind_Master: 0
                Master_Log_Pos: 4582
<

Para uma validação de integridade de dados, realize um teste de escrita manual. Crie uma tabela de teste no servidor primário e verifique sua existência no destino:


# Consulta o dicionário de dados para confirmar a replicação do novo schema.

Se a tabela aparecer no servidor de destino após alguns segundos, a replicação assíncrona está operando corretamente, garantindo que as alterações de DDL (Data Definition Language) estão sendo propagadas entre os datacenters.

Troubleshooting de Sincronização

Manter a integridade de uma replicação assíncrona entre datacenters exige monitoramento constante, pois qualquer latência excessiva ou falha de rede pode aumentar o RPO (Recovery Point Objective), deixando seus dados desatualizados. Abaixo, listamos os problemas mais comuns encontrados em ambientes de produção.

  • Sintoma: O status da replicação indica Slave_IO_Running: No ou Slave_SQL_Running: No.

    Boas Práticas de Continuidade

    Implementar a replicação assíncrona é apenas o primeiro passo para garantir a resiliência da sua infraestrutura. Para que o plano de Disaster Recovery (DR) seja efetivo, é necessário adotar camadas de governança e monitoramento que garantam que o dado no destino seja uma cópia fiel e útil do dado de origem.

    • Implemente Monitoramento de Lag de Replicação: O maior risco da replicação assíncrona é o replication lag (atraso de replicação). Configure alertas via Zabbix, Prometheus ou Grafana para notificar sua equipe sempre que o atraso exceder um limite pré-definido (ex: 30 segundos). Um lag crescente indica que seu link de rede ou a escrita no servidor de destino não está suportando o volume de transações do primário.
    • Mantenha a Regra do Backup 3-2-1: Nunca confie exclusivamente na replicação para recuperação de dados. A replicação protege contra falhas de hardware ou datacenter, mas não protege contra corrupção de dados ou deleção acidental (o erro será replicado instantaneamente). Mantenha pelo menos 3 cópias dos dados, em 2 mídias diferentes, com 1 cópia offsite (fora do ambiente de replicação).
    • Realize Testes de Failover Periódicos: Um plano de DR que nunca foi testado é apenas uma teoria. Agende janelas de manutenção para realizar o switchover controlado, promovendo o servidor de destino a primário. Isso valida se as permissões de rede, as configurações de aplicação e o tempo de recuperação (RTO) estão dentro do esperado pelo negócio.
    • Segurança e Criptografia no Trânsito: Como os dados trafegam entre datacenters distintos, a interceptação é um risco real. Utilize sempre túneis VPN (Site-to-Site) ou configure o protocolo de replicação para utilizar TLS/SSL. Isso garante a integridade e a confidencialidade dos dados durante o percurso pela internet pública ou links dedicados.
    • Documentação de Runbook Atualizada: O momento de um desastre é de alta pressão. Tenha um Runbook (manual de procedimentos) claro, detalhando os comandos necessários para promover o secundário e como reverter o processo (failback) após a normalização do datacenter primário.

    FAQ sobre Replicação Assíncrona

    Qual é a principal diferença entre replicação síncrona e assíncrona em termos de performance?

    A principal diferença reside no overhead de latência aplicado à aplicação. Na replicação síncrona, o servidor primário aguarda a confirmação de gravação no destino antes de finalizar a transação, o que garante consistência total, mas penaliza a performance se houver distância física entre datacenters. Já na replicação assíncrona, o commit é realizado localmente no primário e os dados são enviados para o destino em um segundo momento. Isso permite uma baixa latência de escrita, sendo ideal para conexões de longa distância, embora introduza o risco de perda mínima de dados (RPO) caso o primário falhe antes do envio do log.

    O que acontece com os dados que ainda não foram replicados durante um desastre?

    Em um cenário de Disaster Recovery utilizando o método assíncrono, os dados que residem apenas no buffer ou nos logs do servidor primário e que ainda não foram transmitidos para o servidor de destino são considerados dados perdidos. Esse volume de perda é medido pelo RPO (Recovery Point Objective). Para mitigar esse impacto, é crucial monitorar o lag de replicação. Se o atraso estiver muito alto, o risco de perda de dados em uma falha catastrófica aumenta proporcionalmente.

    A replicação assíncrona substitui o backup tradicional?

    Não. Este é um erro comum em infraestruturas de TI. A replicação serve para continuidade de negócios e alta disponibilidade, mas ela replica erros, como deleções acidentais ou corrupção de banco de dados, para o destino quase instantaneamente. Se você executar um comando DROP TABLE no primário, ele será replicado para o secundário. O backup é a sua única proteção contra corrupção lógica e ransomware, enquanto a replicação é sua proteção contra falhas de hardware e indisponibilidade de datacenter.

    Como o aumento da latência de rede afeta a replicação assíncrona?

    O aumento da latência de rede não interrompe a escrita no servidor primário, mas causa o aumento do lag de replicação. À medida que o tempo de trânsito dos pacotes entre os datacenters cresce, o servidor de destino fica cada vez mais "atrasado" em relação ao estado atual do primário. Em casos extremos, o acúmulo de logs binários (binlogs) pode causar o esgotamento de espaço em disco no servidor de origem, pois o sistema precisa reter os logs até que a transmissão seja concluída com sucesso.

    Conclusão e Próximos Passos

    Implementar uma estratégia de replicação assíncrona entre datacenters distintos é um marco fundamental para elevar a maturidade da sua infraestrutura. Ao concluir esta configuração, você não apenas criou uma cópia dos seus dados, mas estabeleceu uma camada de resiliência que protege sua operação contra falhas catastrógicas de hardware, desastres naturais ou indisponibilidade de rede no datacenter principal. No entanto, é vital compreender que a replicação assíncrona, por natureza, introduz um RPO (Recovery Point Objective) não nulo, o que significa que existe uma pequena janela de perda de dados potencial entre o último commit no primário e a chegada do log no destino.

    Para que este plano de Disaster Recovery seja verdadeiramente eficaz, o trabalho não termina com o status Slave_IO_Running: Yes. O sucesso de uma estratégia de continuidade de negócios depende da capacidade de resposta e da validação constante dos processos de failover. O próximo passo lógico para administradores e equipes de DevOps é a criação de um Runbook de Disaster Recovery. Este documento deve detalhar, de forma técnica e sequencial, exatamente quais comandos executar para promover o servidor de destino a primário, como reconfigurar as pontas de aplicação (DNS ou Load Balancer) e como reestabelecer a topologia de replicação após o incidente ser resolvido.

    Para evoluir sua infraestrutura além da replicação de banco de dados, recomendamos os seguintes passos técnicos:

    • Implementação de Monitoramento de Lag: Configure alertas via Prometheus ou Zabbix para monitorar a métrica Seconds_Behind_Master. Um aumento súbito no atraso é o primeiro sinal de que seu RPO está em risco.
    • Automação de Failover: Avalie ferramentas como o Orchestrator ou soluções de High Availability (HA) para automatizar a promoção do réplica, reduzindo o RTO (Recovery Time Objective) ao mínimo possível.
    • Testes de Disaster Recovery (Drills): Realize simulações de queda do datacenter principal em ambientes de staging pelo menos trimestralmente. Testar o processo de recuperação é a única forma de garantir que o plano funcionará sob pressão real.
    • Sincronização de Camada de Aplicação: Não esqueça que o banco de dados é apenas parte do ecossistema. Planeje a replicação de volumes de arquivos (via RSync ou DRBD) e a consistência de sessões de usuário entre as regiões.

    A Toda Solução apoia sua jornada rumo a uma infraestrutura inabalável. Se precisar de suporte para arquiteturas complexas de multi-datacenter ou servidores com alta performance para suportar grandes volumes de logs de replicação, nossa equipe de engenharia está à disposição.

Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000
WhatsApp