Guia para Configurar Replicação Primário-Réplica do Redis

Configure a replicação primário-réplica do Redis com replicaof, autenticação, monitoramento e verificações de segurança em produção.

Guia para Configurar Replicação Primário-Réplica do Redis

A replicação do Redis é um padrão fundamental para alcançar alta disponibilidade, redundância de dados e escalabilidade de leitura. Ao configurar um primário (anteriormente chamado de mestre) e uma ou mais réplicas (anteriormente chamadas de escravos), você garante que os dados gravados no primário sejam automaticamente copiados para todas as réplicas conectadas.

Este guia mostra como configurar a replicação primário-réplica do Redis, verificar se a sincronização funciona e evitar os erros comuns que expõem o Redis ou deixam as réplicas silenciosamente desatualizadas.


Compreendendo os Fundamentos da Replicação do Redis

A replicação do Redis é assíncrona (o que significa que o primário não espera que a réplica confirme as gravações), permitindo alto desempenho. Ela opera principalmente através de duas fases: sincronização inicial e sincronização contínua.

Sincronização Completa (SYNC)

Quando uma réplica se conecta a um primário pela primeira vez, ou após uma interrupção de rede que impede a ressincronização parcial, ocorre uma sincronização completa:

  1. A réplica envia um comando PSYNC para o primário.
  2. O primário inicia um processo de salvamento em segundo plano para gerar um arquivo de snapshot RDB (.rdb).
  3. O primário armazena em buffer todos os novos comandos de gravação recebidos enquanto o RDB está sendo criado.
  4. Assim que o arquivo RDB estiver completo, o primário o envia para a réplica.
  5. A réplica carrega o arquivo RDB na memória.
  6. Finalmente, o primário envia todos os comandos de gravação em buffer para a réplica para atualizá-la.

Ressincronização Parcial (PSYNC)

O Redis 2.8+ suporta ressincronização parcial. Se o link entre o primário e a réplica cair brevemente, a réplica pode solicitar apenas os comandos perdidos desde a queda do link, usando o buffer de backlog de replicação (um buffer circular configurável no primário).

Pré-requisitos e Configuração

Antes de configurar a replicação, certifique-se de ter pelo menos duas instâncias Redis separadas em execução (ou configurações separadas em execução em portas diferentes no mesmo servidor para teste).

Para este guia, assumimos a seguinte configuração:

Instância Função Endereço IP Porta Arquivo de Configuração
Primário Primário 192.168.1.100 6379 redis-primary.conf
Réplica 1 Réplica 192.168.1.101 6380 redis-replica-1.conf

Etapa 2.1: Configurar a Instância Primária

Certifique-se de que sua instância primária esteja pronta para aceitar conexões das réplicas e configurada para gerenciar persistência (RDB ou AOF), se necessário para a estabilidade do próprio primário.

Configurações Cruciais do Primário:

  1. Vinculação: Certifique-se de que o primário esteja vinculado a um endereço IP público ou 0.0.0.0 se estiver sendo executado em várias máquinas. Se estiver usando firewalls, certifique-se de que a porta 6379 esteja aberta para os IPs das réplicas.
  2. Persistência: Embora não seja estritamente necessário para a própria replicação, é altamente recomendável habilitar RDB/AOF para persistência de dados do primário.
# redis-primary.conf
port 6379
bind 0.0.0.0 # Vincula a todas as interfaces (necessário para réplicas externas)
# Habilitar persistência RDB
save 900 1
save 300 10
save 60 10000

Etapa 2.2: Configurar a Instância Réplica

O núcleo da configuração de uma réplica está na diretiva replicaof. Ela informa à instância com qual primário ela deve sincronizar seus dados.

Configurações Cruciais da Réplica:

  1. Porta: Use uma porta diferente se estiver executando na mesma máquina.
  2. Diretiva de Replicação: Use replicaof ou slaveof (o nome legado).
# redis-replica-1.conf
port 6380

# *** Configuração Essencial de Replicação ***
replicaof 192.168.1.100 6379

# Garantir que as réplicas sejam somente leitura (padrão desde o Redis 5)
replica-read-only yes

# Recomenda-se desabilitar a persistência nas réplicas se a HA for tratada pelo Sentinel/Cluster
# Se a persistência for necessária para reinicializações rápidas, mantenha-a habilitada.
save ""

Nota: Se o primário exigir uma senha, configure a réplica com masterauth <senha>. No Redis 6 e configurações ACL posteriores, configure também masteruser quando o usuário de replicação não for o usuário padrão.

Métodos de Implementação

Você pode implementar a replicação editando o arquivo de configuração e reiniciando o servidor, ou dinamicamente executando o comando REPLICAOF a partir do redis-cli.

Método 3.1: Arquivo de Configuração (Recomendado para Produção)

Após atualizar redis-replica-1.conf conforme mostrado acima, inicie ambas as instâncias:

# Iniciar Primário
redis-server redis-primary.conf

# Iniciar Réplica 1
redis-server redis-replica-1.conf

Após a inicialização, a Réplica 1 tentará imediatamente se conectar ao primário em 192.168.1.100:6379 e iniciar o processo de sincronização.

Método 3.2: Configuração Dinâmica

Se uma instância Redis já estiver em execução e você quiser convertê-la em uma réplica sem reiniciar, execute REPLICAOF via redis-cli.

  1. Conecte-se à instância que deseja converter em uma réplica (executando na porta 6380 em nosso exemplo):

    redis-cli -p 6380
    
  2. Execute o comando de replicação:

    127.0.0.1:6380> replicaof 192.168.1.100 6379
    OK
    

A instância na porta 6380 descartará quaisquer dados anteriores e iniciará uma sincronização completa (SYNC) com o novo primário.

⚠️ Aviso: Desabilitando a Replicação

Para transformar uma réplica de volta em uma instância primária independente, execute replicaof no one nessa instância.

4. Monitorando o Status da Replicação

Monitorar o status da conexão é vital para garantir a consistência dos dados. Use o comando INFO replication via redis-cli tanto no primário quanto na réplica.

4.1 Verificando o Status do Primário

Conecte-se ao primário (6379) e verifique quantas réplicas estão conectadas e seu status:

redis-cli -p 6379 INFO replication

Trecho de Saída Esperada (Primário):

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6380,state=online,offset=2048,lag=0
master_replid:a9b1c2...
master_replid2:000000...
master_repl_offset:2048
  • role:master confirma sua função.
  • connected_slaves:1 confirma que a réplica é vista.
  • state=online é o estado estável desejado.
  • lag=0 ou um valor baixo significa que a réplica está respondendo prontamente. A replicação do Redis ainda é assíncrona, portanto isso não é uma garantia de zero perda de dados.

4.2 Verificando o Status da Réplica

Conecte-se à réplica (6380) e verifique o status do link primário:

redis-cli -p 6380 INFO replication

Trecho de Saída Esperada (Réplica):

# Replication
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
  • role:slave confirma sua função.
  • master_link_status:up confirma que a conexão está ativa e saudável.
  • master_sync_in_progress:0 significa que a sincronização inicial está completa.

Melhores Práticas e Otimização da Replicação

5.1 Modo Somente Leitura da Réplica

Por padrão, as réplicas são somente leitura (replica-read-only yes). Este é um mecanismo de segurança crítico. Tentar escrever em uma réplica resultará em um erro, garantindo a consistência dos dados em todo o cluster.

Se você desabilitar o modo somente leitura, quaisquer gravações na réplica serão locais e serão sobrescritas se o link de replicação cair e ocorrer uma sincronização completa.

5.2 Otimizando o Tempo de Sincronização

Se seu conjunto de dados for muito grande, o processo SYNC inicial pode ser lento. Considere estes fatores:

  1. Largura de Banda de Rede: Garanta largura de banda suficiente entre o primário e as réplicas para a transferência RDB.
  2. Geração RDB: O primário precisa de CPU e I/O de disco para gerar o arquivo RDB. Certifique-se de que o servidor tenha recursos disponíveis durante a sincronização.
  3. Desabilitar Persistência em Disco nas Réplicas (Opcional): Se o primário lida com toda a persistência e a réplica é apenas para escalabilidade de leitura, definir save "" na réplica evita a sobrecarga de I/O de escrever arquivos RDB, acelerando as reinicializações.

5.3 Segurança e Configuração de Rede

É crucial que o primário não exponha publicamente sua porta de replicação (6379 ou outra) para a internet. Configure regras de firewall para permitir tráfego de replicação apenas dos endereços IP designados dos servidores réplica.

5.4 Usar Réplicas para Escalabilidade de Leitura

O principal benefício da replicação é distribuir a carga de leitura. Direcione aplicativos que realizam principalmente operações de leitura para as instâncias réplica, reservando o primário para operações de gravação, melhorando a taxa de transferência geral do sistema.

O Que Fazer a Seguir

Configurar a replicação primário-réplica do Redis é essencial para construir aplicações resilientes e de alto desempenho. Ao configurar corretamente a diretiva replicaof e monitorar regularmente o status do link usando INFO replication, você cria uma base para alta disponibilidade e escalabilidade de leitura eficaz.

Embora este guia se concentre na configuração básica, ambientes de produção geralmente integram camadas adicionais de automação, como Redis Sentinel para promoção automática do primário e detecção de falhas, ou Redis Cluster para particionamento automático e distribuição de dados em vários nós.