Guia para Configurar Replicação Primária-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 uma instância primária (anteriormente chamada de master) e uma ou mais réplicas (anteriormente chamadas de slaves), você garante que os dados gravados na primária sejam copiados automaticamente para todas as réplicas conectadas.
Este guia fornece um tutorial abrangente e passo a passo sobre a configuração da replicação primária-réplica do Redis. Cobriremos as diretivas de configuração essenciais, métodos de configuração dinâmica e etapas críticas de monitoramento necessárias para construir uma implantação robusta e confiável do Redis.
1. Compreendendo os Fundamentos da Replicação do Redis
A replicação do Redis é assíncrona (o que significa que a primária não espera que a réplica confirme as gravações), permitindo alto desempenho. Ela opera principalmente em duas fases: sincronização inicial e sincronização contínua.
Sincronização Completa (SYNC)
Quando uma réplica se conecta a uma primária pela primeira vez, ou após uma interrupção de rede que impede a resincronização parcial, ocorre uma sincronização completa:
- A réplica envia um comando
PSYNCpara a primária. - A primária inicia um processo de salvamento em segundo plano para gerar um arquivo de snapshot RDB (
.rdb). - A primária armazena em buffer todos os novos comandos de gravação recebidos enquanto o RDB está sendo criado.
- Assim que o arquivo RDB for concluído, a primária o envia para a réplica.
- A réplica carrega o arquivo RDB na memória.
- Finalmente, a primária envia todos os comandos de gravação em buffer para a réplica para que ela se atualize.
Resincronização Parcial (PSYNC)
O Redis 2.8+ suporta resincronização parcial. Se o link entre a primária e a réplica cair brevemente, a réplica pode solicitar apenas os comandos que faltam desde que o link foi interrompido, usando o buffer de backlog de replicação (um buffer circular configurável na primária).
2. 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 executando em portas diferentes no mesmo servidor para testes).
Para este guia, assumimos a seguinte configuração:
| Instância | Papel | Endereço IP | Porta | Arquivo de Configuração |
|---|---|---|---|---|
| Primária | Primária | 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 esteja configurada para gerenciar a persistência (RDB ou AOF), se necessário para a própria estabilidade da primária.
Configurações Cruciais da Primária:
- Binding: Certifique-se de que a primária esteja vinculada a um endereço IP público ou
0.0.0.0, se estiver executando 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 replicação em si, habilitar RDB/AOF é altamente recomendado para a persistência de dados da primária.
# 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 cerne da configuração de uma réplica está na diretiva replicaof. Isso informa à instância qual primária 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
# Recomendar desabilitar a persistência em réplicas se a HA for tratada pelo Sentinel/Cluster
# Se a persistência for necessária para reinícios rápidos, mantenha-a habilitada.
save ""
Nota: Se a primária estiver protegida por senha (usando
requirepass), a réplica deve ser configurada commasterauth <password>para autenticar com sucesso.
3. Métodos de Implementação
Você pode implementar a configuração de replicação editando o arquivo de configuração (redis.conf) e reiniciando o servidor, ou dinamicamente usando o comando CONFIG SET.
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ária
redis-server redis-primary.conf
# Iniciar Réplica 1
redis-server redis-replica-1.conf
Ao iniciar, a Réplica 1 tentará imediatamente se conectar à primária 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ê desejar configurá-la como uma réplica sem reiniciar, use CONFIG SET via redis-cli.
-
Conecte-se à instância que você deseja converter em uma réplica (executando na porta 6380 em nosso exemplo):
bash redis-cli -p 6380 -
Execute o comando de replicação:
bash 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 a nova primária.
⚠️ 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 na primária quanto na réplica.
4.1 Verificando o Status da Primária
Conecte-se à primária (6379) e verifique quantas réplicas estão conectadas e seu status:
redis-cli -p 6379 INFO replication
Trecho de Saída Esperada (Primária):
# 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 seu papel.connected_slaves:1confirma que a réplica é vista.state=onlineé o estado estável desejado.lag=0(ou um número muito baixo) indica desempenho bem-sucedido de transferência síncrona de dados.
4.2 Verificando o Status da Réplica
Conecte-se à réplica (6380) e verifique o status do link da primária:
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 seu papel.master_link_status:upconfirma que a conexão está ativa e saudável.master_sync_in_progress:0significa que a sincronização inicial foi concluída.
5. Melhores Práticas e Otimização de 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 gravar 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 substituídas se o link de replicação cair e ocorrer uma sincronização completa.
5.2 Otimizando o Tempo de Sincronização
Se o seu conjunto de dados for muito grande, o processo SYNC inicial pode ser lento. Considere estes fatores:
- Largura de Banda da Rede: Garanta largura de banda suficiente entre a primária e as réplicas para a transferência RDB.
- Geração RDB: A primária 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 de Disco em Réplicas (Opcional): Se a primária gerencia toda a persistência e a réplica é apenas para escalabilidade de leitura, definir
save ""na réplica evita o overhead de I/O da gravação de arquivos RDB, acelerando os reinícios.
5.3 Segurança e Configuração de Rede
É crucial que a primária não exponha publicamente sua porta de replicação (6379 ou outra) à internet. Configure regras de firewall para permitir o 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 é a distribuição da carga de leitura. Direcione aplicações que realizam principalmente operações de leitura para as instâncias réplica, reservando a primária para operações de gravação, melhorando a taxa de transferência geral do sistema.
Conclusão
A configuração da replicação primária-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 o Redis Sentinel para promoção automática da primária e detecção de falhas, ou o Redis Cluster para particionamento e distribuição automáticos de dados em vários nós.