Configuração e Gerenciamento de Clusters Redis

O Redis a partir da versão 3.0 introduziu suporte a clusters, com melhorias contínuas até a versão atual. Este artigo aborda a configuração e operação de um cluster Redis, utilizando a versão 5.0.4 em um sistema operacional baseado em Linux.

Fundamentos do Cluster Redis

Um cluster Redis é um conjunto de nós que compartilham dados de forma descentralizada. Cada nó mantém uma parte dos dados e informações de estado do cluster, comunicando-se via protocolo Gossip para sincronização. Os dados são distribuídos usando hash slots — existem 16.384 slots no total, e cada chave é atribuída a um slot através do cálculo CRC16 módulo 16.384.

Para alta disponibilidade, o cluster emprega um modelo de replicação mestre-escravo. Se um nó mestre falhar, um escravo corrsepondente asume automaticamente o papel de mestre.

Preparação do Ambiente

Para este exemplo, configuraremos um cluster com 3 nós mestres e 3 nós escravos em uma única máquina. Primeiro, crie um diretório principle e subdiretórios para cada nó:

mkdir -p /redis-cluster/{master1,master2,master3,slave1,slave2,slave3}

Em seguida, configure cada nó com uma porta exclusiva e ative o modo cluster. Exemplo para master1 (porta 6380):

port 6380
daemonize yes
pidfile /var/run/redis_master1.pid
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes-master1.conf

Repita o processo para os demais nós, variando as portas (por exemplo, 6381, 6382, 6383, 6384, 6385) e os nomes de arquivos. Inicie todos os nós:

redis-server /redis-cluster/master1/redis.conf &
redis-server /redis-cluster/master2/redis.conf &
redis-server /redis-cluster/master3/redis.conf &
redis-server /redis-cluster/slave1/redis.conf &
redis-server /redis-cluster/slave2/redis.conf &
redis-server /redis-cluster/slave3/redis.conf &

Verifique se os processos estão em execução com o comando ps aux | grep redis-server.

Criação do Cluster

Use o utilitário redis-cli para formar o cluster especificando os endereços e portas dos nós, com a opção --replicas 1 para definir um escravo por mestre:

redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1

Confirme a configuração digitando yes quando solicitado. A saída mostrará a alocação de slots e as associações mestre-escravo.

Testando o Cluster

Conecte-se a qualquer nó no modo cluster com a flag -c:

redis-cli -h 127.0.0.1 -p 6380 -c

Ao armazenar uma chave, o cliente redirecionará automaticamente para o nó responsável pelo slot correspondente. Por exemplo:

set chave valor
-> Redirecionado para slot [X] em 127.0.0.1:6382
OK

Isso confirma que o cluster está operacional.

Expansão do Cluster

Para adicionar novos nós, primeiro inicie-os com configurações semelhantes. Exemplo: adicione um novo mestre na porta 6386 e um escravo na porta 6387.

Adicione o novo mestre ao cluster:

redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6380

Em seguida, adicione o escravo associado ao mestre recém-adicionado (substitua MASTER_ID pelo ID do novo mestre):

redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6380 --cluster-slave --cluster-master-id MASTER_ID

Para distribuir slots ao novo mestre, execute uma redistribuição de slots. Mova uma quantidade desejada (por exemplo, 1000 slots) de todos os nós existentes:

redis-cli --cluster reshard 127.0.0.1:6386

Siga as instruções interativas para especificar o número de slots e o ID do nó de destino.

Redução do Cluster

Para remover um nó, primeiro remova seu escravo associado:

redis-cli --cluster del-node 127.0.0.1:6387 ESCRAVO_ID

Em seguida, redistribua os slots do mestre que será removido para outros nós existentes. Use o comando reshard para mover todos os slots do mestre alvo para um mestre de destino específico:

redis-cli --cluster reshard 127.0.0.1:6386
# Mova slots do mestre a ser removido para outro mestre
Source node #1: MESTRE_ID_REMOVER
Source node #2: done

Por fim, remova o nó mestre vazio:

redis-cli --cluster del-node 127.0.0.1:6386 MESTRE_ID_REMOVER

Use cluster nodes para verificar o estado final do cluster.

Tags: Redis cluster high-availability hash-slots gossip-protocol

Publicado em 6-23 18:54