Dimensionando o Redis: Guia para Configurar o Cluster Redis

Aprenda a configurar e gerenciar um Cluster Redis para alta disponibilidade e escalabilidade horizontal. Este guia passo a passo abrange instalação, configuração de múltiplos nós Redis, criação do cluster usando redis-trib.rb, adição de réplicas para tolerância a falhas e comandos essenciais de gerenciamento. Leitura essencial para dimensionar sua implantação Redis.

Escalando Redis: Guia para Configurar um Cluster Redis

O Cluster Redis ajuda quando uma única instância Redis não é mais suficiente para o tamanho dos seus dados, tráfego ou meta de disponibilidade. Ele fragmenta chaves entre vários nós primários e pode promover réplicas quando um primário falha.

Este guia mostra o fluxo de trabalho atual do redis-cli --cluster, um exemplo local com seis nós e os comandos de gerenciamento que você precisa após o cluster estar em execução.

Entendendo os Conceitos do Cluster Redis

O Cluster Redis é construído em torno de algumas ideias práticas:

  • Fragmentação: O Cluster Redis divide o espaço de chaves em 16.384 slots de hash. Cada nó primário possui um intervalo de slots, e clientes cientes do cluster roteiam comandos para o nó que possui o slot da chave.
  • Replicação: Cada primário pode ter uma ou mais réplicas. Se um primário falhar e o cluster ainda conseguir atingir o quórum, uma réplica pode ser promovida.
  • Barramento do cluster: Os nós se comunicam entre si na porta do cliente e em uma porta do barramento do cluster, geralmente a porta do cliente mais 10000. Para a porta 7000, isso significa a porta do barramento 17000.
  • Suporte ao cliente: O cliente da sua aplicação deve suportar redirecionamentos do Cluster Redis, como MOVED e ASK. Um cliente não ciente do cluster se comportará mal quando as chaves estiverem em nós diferentes.

Pré-requisitos

Para um cluster em estilo de produção, planeje pelo menos seis nós Redis: três primários e uma réplica para cada primário. Você pode executar o exemplo abaixo em uma única máquina para praticar, mas os nós de produção devem ser distribuídos entre hosts ou zonas de disponibilidade.

Você também precisa ter o Redis instalado, o redis-cli disponível e acesso de rede entre todos os nós nas portas do cliente Redis e nas portas do barramento do cluster. Use uma versão do Redis atualmente suportada quando possível.

Configurando um Cluster Redis Passo a Passo

Este exemplo usa seis processos Redis locais nas portas 7000 a 7005.

1. Instalar o Redis

No Debian ou Ubuntu, a instalação do pacote é assim:

sudo apt update
sudo apt install redis-server

As versões dos pacotes variam conforme a distribuição. Se você precisar de uma versão mais recente do Redis, use os pacotes oficiais do Redis ou o serviço Redis gerenciado da sua plataforma.

2. Configurar Instâncias Redis para Modo Cluster

Crie um diretório e um arquivo de configuração para cada processo Redis:

mkdir cluster
cd cluster

for port in 7000 7001 7002 7003 7004 7005; do
  mkdir "$port"
  cp /etc/redis/redis.conf "$port/redis.conf"
done

Edite cada redis.conf e defina os valores específicos da porta. Para 7000/redis.conf, use:

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind 127.0.0.1

Repita o mesmo padrão para 7001 a 7005, alterando tanto port quanto cluster-config-file. O arquivo nodes-7000.conf é gerenciado pelo Redis. Não o edite manualmente.

Para servidores remotos, vincule à interface de rede privada em vez de 127.0.0.1 e proteja o acesso com firewalls, autenticação e TLS quando suportado pela sua compilação ou serviço Redis.

3. Iniciar Instâncias Redis

Inicie cada instância com sua própria configuração:

for port in 7000 7001 7002 7003 7004 7005; do
  redis-server "$port/redis.conf"
done

Se o seu gerenciador de pacotes já executa um serviço Redis padrão na porta 6379, mantenha-o separado deste cluster de teste ou pare-o enquanto você experimenta.

4. Criar o Cluster com redis-cli --cluster

Use redis-cli --cluster create para atribuir slots e réplicas:

redis-cli --cluster create \
  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
  127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
  --cluster-replicas 1

O Redis mostrará o layout de slot proposto e pedirá confirmação. Digite yes se a colocação do primário e da réplica parecer correta.

5. Verificar o Cluster

Verifique o cluster a partir de qualquer nó:

redis-cli -c -p 7000 CLUSTER INFO
redis-cli -c -p 7000 CLUSTER NODES
redis-cli --cluster check 127.0.0.1:7000

CLUSTER INFO deve mostrar cluster_state:ok. A flag -c informa ao redis-cli para seguir redirecionamentos do cluster, o que é útil quando você testa comandos contra chaves que pertencem a outro nó.

Tente uma escrita e leitura básicas:

redis-cli -c -p 7000 SET user:1 "Ada"
redis-cli -c -p 7001 GET user:1

Mesmo que a chave pertença a um slot servido por outro nó, um cliente ciente do cluster pode seguir o redirecionamento.

Adicionando Réplicas a um Cluster Existente

Se você já tem um cluster e deseja adicionar uma nova réplica, inicie uma nova instância Redis com o modo cluster ativado. Em seguida, encontre o ID do nó primário:

redis-cli -p 7000 CLUSTER NODES

Adicione o novo nó como réplica desse primário:

redis-cli --cluster add-node \
  127.0.0.1:7006 127.0.0.1:7000 \
  --cluster-slave \
  --cluster-master-id <master_node_id>

O primeiro endereço é o novo nó. O segundo endereço é qualquer nó acessível no cluster existente. Substitua <master_node_id> pelo ID do CLUSTER NODES.

Gerenciando o Cluster

Tarefas comuns de gerenciamento incluem:

  • Verificar saúde: redis-cli --cluster check 127.0.0.1:7000
  • Adicionar um primário: redis-cli --cluster add-node <new_host:port> <existing_host:port>
  • Redistribuir slots: redis-cli --cluster reshard <existing_host:port>
  • Remover um nó: mova os slots para longe do nó primeiro se for um primário, depois execute redis-cli --cluster del-node <existing_host:port> <node_id>
  • Teste de failover manual: execute CLUSTER FAILOVER a partir de uma réplica, não do primário

Evite mover slots manualmente com comandos de baixo nível, a menos que você conheça a sequência completa de migração. Os ajudantes do redis-cli --cluster reduzem a chance de deixar slots em um estado inconsistente.

Melhores Práticas para Cluster Redis

  • Use pelo menos seis nós: Três primários e três réplicas dão ao cluster espaço para tolerar uma falha de primário.
  • Distribua réplicas entre domínios de falha: Não coloque um primário e sua réplica no mesmo host ou zona de disponibilidade quando puder evitar.
  • Proteja o Redis: Não exponha o Redis diretamente a redes não confiáveis. Use rede privada, regras de firewall, autenticação e TLS quando disponível.
  • Planeje memória por primário: O Cluster Redis fragmenta chaves, mas cada primário ainda precisa de memória suficiente para seus dados atribuídos, sobrecarga e crescimento.
  • Use clientes cientes do cluster: Confirme se sua biblioteca cliente suporta o Cluster Redis antes de cortar o tráfego.
  • Monitore failover e equilíbrio de slots: Acompanhe memória, latência, conexões rejeitadas, atraso de replicação e estado do cluster.

Conclusão

Para um Cluster Redis prático, comece com pelo menos três primários e uma réplica por primário, crie o cluster com redis-cli --cluster create e verifique com CLUSTER INFO mais redis-cli --cluster check. Depois disso, seu trabalho diário é monitorar memória, equilíbrio de slots, comportamento de failover e compatibilidade do cliente.