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:
- A réplica envia um comando
PSYNCpara o primário. - O primário inicia um processo de salvamento em segundo plano para gerar um arquivo de snapshot RDB (
.rdb). - O primário armazena em buffer todos os novos comandos de gravação recebidos enquanto o RDB está sendo criado.
- Assim que o arquivo RDB estiver completo, o primário o envia para a réplica.
- A réplica carrega o arquivo RDB na memória.
- 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:
- Vinculação: Certifique-se de que o primário esteja vinculado a um endereço IP público ou
0.0.0.0se 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. - 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:
- Porta: Use uma porta diferente se estiver executando na mesma máquina.
- Diretiva de Replicação: Use
replicaofouslaveof(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émmasteruserquando 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.
Conecte-se à instância que deseja converter em uma réplica (executando na porta 6380 em nosso exemplo):
redis-cli -p 6380Execute 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 onenessa 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:masterconfirma sua função.connected_slaves:1confirma que a réplica é vista.state=onlineé o estado estável desejado.lag=0ou 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:slaveconfirma sua função.master_link_status:upconfirma que a conexão está ativa e saudável.master_sync_in_progress:0significa 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:
- Largura de Banda de Rede: Garanta largura de banda suficiente entre o primário e as réplicas para a transferência RDB.
- 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.
- 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.