O Redis Cluster é um recurso integrado ao Redis que suporta shardamento automático, replicação e alta disponibilidade, que anteriormente eram implementados usando Sentinels. Ele é projetado para dois propósitos principais: um é dividir automaticamente seu conjunto de dados entre várias instâncias e o segundo é fornecer um certo grau de disponibilidade durante partições, para continuar operações quando algumas instâncias (especialmente mestres) falham ou não conseguem se comunicar com a maioria dos nós no cluster.
No entanto, o cluster para de operar em caso de falhas maiores (por exemplo, quando a maioria das instâncias mestres está indisponível). Além disso, se um mestre e um escravo falharem ao mesmo tempo, o cluster não pode continuar as operações normais (embora a solução alternativa seja adicionar mais nós ou criar uma assimetria no cluster, para alterar automaticamente o layout do cluster).
De acordo com a documentação do cluster Redis, o “cluster mínimo” que funciona conforme o esperado requer pelo menos 3 nós mestres. Mas a configuração mais adequada para alta disponibilidade deve ter pelo menos 6 nós, com três mestres e três escravos, cada mestre tendo um escravo.
Importante: O Redis Cluster também tem algumas limitações, como a falta de suporte para ambientes NATted, bem como aqueles onde os endereços IP ou portas TCP são remapeados, por exemplo, sob Docker. Além disso, nem todas as bibliotecas de clientes o suportam.
Este artigo mostra como configurar um Cluster Redis (com Modo de Cluster Desativado) no CentOS 8. Inclui como instalar o Redis, configurar os nós do cluster, criar um cluster e testar a falha do cluster.
Observação: Para este guia, usaremos instâncias Redis novas/vazias para executar o modo de cluster. O modo de cluster não funcionará com algumas configurações feitas nos dois primeiros guias de nossa Série Redis, particularmente quando o parâmetro replica está sendo usado.
Pré-requisitos:
Configuração do Ambiente de Teste
Redis Master1: 10.42.0.247 Redis Master2: 10.42.0.197 Redis Master3: 10.42.0.132 Redis Slave1: 10.42.0.200 Redis Slave2: 10.42.0.21 Redis Slave3: 10.42.0.34

Nossa configuração tem 3 nós mestres de leitura/escrita e 3 nós réplicas de apenas leitura, cada mestre tendo uma réplica, então três fragmentos contêm todos os dados do cluster em cada nó. Uma aplicação API ou cliente CLI pode escrever apenas nos nós mestres, mas ler de qualquer nó no cluster.
Passo 1: Instalando o Redis em Todos os Nós
1. Faça login em todas as instâncias via SSH, e execute o seguinte comando para instalar o módulo Redis usando o gerenciador de pacotes DNF conforme mostrado.
# dnf module install redis
2. Em seguida, inicie o serviço Redis, habilite-o para iniciar automaticamente no boot do sistema e verifique seu status para garantir que esteja em execução (verifique o serviço em todas as 6 instâncias):
# systemctl start redis # systemctl enable redis # systemctl status redis
Passo 2: Configurando Instâncias do Redis em todos os Nós
3. Esta seção descreve como configurar os nós do cluster Redis. Lembre-se de realizar as configurações aqui em todos os nós.
Use o arquivo de configuração /etc/redis.conf para configurar o servidor Redis. Como prática recomendada, faça um backup do arquivo original antes de editá-lo usando um editor de texto da linha de comando de sua escolha.
# cp /etc/redis.conf /etc/redis.conf.orig # vi /etc/redis.conf
4. Em seguida, encontre os seguintes parâmetros de configuração e edite seus valores conforme mostrado. O parâmetro bind define a interface na qual o servidor Redis irá escutar, defina seu valor para o IP LAN da instância. Remova o 127.0.0.1 porque percebemos que deixá-lo lá retarda o processo de criação do cluster, particularmente na etapa de junção ao cluster.
bind 10.42.0.247
Em seguida, defina o modo protegido para não
para permitir conexões das outras instâncias no cluster.
protected-mode no
O parâmetro da porta define a porta na qual o servidor Redis irá ouvir conexões, o padrão é 6379. Esta é a porta de dados para comunicação com os clientes.
port 6379

5. O próximo conjunto de parâmetros irá ativar o modo cluster e definir algumas de suas características úteis. O parâmetro cluster-enabled, quando definido como sim
, ativa o modo cluster.
cluster-enabled yes
Em seguida, o parâmetro cluster-config-file define o nome do arquivo de configuração do cluster de um nó do cluster (por exemplo, nodes-6379.conf). O arquivo é criado no diretório de trabalho (o padrão é /var/lib/redis definido usando o parâmetro dir) e não é editável pelo usuário.
cluster-config-file nodes-6379.conf
A próxima opção de cluster útil é cluster-node-timeout, ele é usado para definir o tempo máximo em milissegundos que uma instância pode estar indisponível para ser considerada em um estado de falha. Um valor de 15000 é equivalente a 15 segundos.
cluster-node-timeout 15000

6. Também precisamos habilitar a persistência do Redis em disco. Podemos usar um dos modos de persistência, que é o Arquivo de Apenas Acrescentar (AOF): ele registra (no arquivo appendonly.aof criado no diretório de trabalho) cada operação de gravação recebida com sucesso pelo servidor. Os dados serão reproduzidos durante a inicialização do servidor para reconstruir o conjunto de dados original.
Para ativá-lo, defina o parâmetro appendonly como sim
.
appendonly yes

7. Após fazer todas as alterações, reinicie o serviço Redis em todos os nós para aplicar as alterações recentes.
# systemctl restart redis
8. Neste ponto, cada nó do cluster deve ter agora um ID. Você pode verificar isso no arquivo de log localizado em /var/log/redis/redis.log.
# cat /var/log/redis/redis.log

9. Em seguida, abra a porta 6397 e 16379 em todas as instâncias. A última porta é usada para o barramento do cluster (um canal de comunicação de nó para nó usando um protocolo binário). Este é um requisito básico para as conexões TCP do cluster Redis.
# firewall-cmd --zone=public --permanent --add-port=6379/tcp # firewall-cmd --zone=public --permanent --add-port=16379/tcp # firewall-cmd --reload
Passo 3: Criando o Cluster Redis
10. Para criar o cluster, use o cliente de linha de comando redis-cli da seguinte forma. O --cluster create
habilita a criação do cluster e --cluster-replicas 1
significa criar um réplica por mestre.
Para nossa configuração que possui 6 nós, teremos 3 mestres e 3 escravos.
Observe que os primeiros 6 nós serão considerados mestres (M)
e os próximos três serão considerados escravos (S)
. O primeiro escravo, ou seja, 10.42.0.200:6379 replica o primeiro mestre, ou seja, 10.42.0.247:6379, o segundo escravo replica o segundo mestre, nessa ordem.
O comando a seguir está formatado de forma que o resultado representará nossa configuração lógica acima.
# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1

11. Uma vez que a criação do cluster for bem-sucedida, execute o seguinte comando em qualquer host (especifique seu endereço IP usando a opção -h
) para listar todos os nós do cluster.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes
Você deve ser capaz de ver todos os nós do cluster, com os escravos indicando seus mestres, como mostrado na captura de tela a seguir.

Os diferentes campos estão nesta ordem: ID do nó, endereço IP:porta, flags, último ping enviado, último pong recebido, época de configuração, estado de link, slots (para mestres).
Passo 4: Testando a Falha de Failover do Redis Cluster
12. Nesta seção, demonstraremos como testar uma falha de failover do cluster. Primeiro, vamos tomar nota dos mestres.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

Também, tome nota dos escravos do Redis.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

13. Em seguida, pare o serviço Redis em um dos nós mestres, por exemplo, 10.42.0.197 e verifique todos os nós mestres no cluster.
# systemctl stop redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
Da captura de tela a seguir, você pode ver que o nó 10.42.0.197:6367 está em estado de falha e seu escravo 10.42.0.21:6379 foi promovido ao status de mestre.

14. Agora vamos iniciar o serviço Redis novamente no nó falido e verificar todos os mestres no cluster.
# systemctl start redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

Também, verifique os escravos do cluster para confirmar que o mestre falido agora é um escravo.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

Passo 5: Testando a Replicação de Dados em Todo o Cluster Redis
15. Esta última seção explica como verificar a replicação de dados do cluster. Vamos criar uma chave e valor em um dos mestres, e então tentar lê-lo de todos os nós do cluster da seguinte forma. Use o interruptor -c
para habilitar o suporte ao cluster sob a utilidade redis-cli e acessar dados no modo cluster.
# redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com' # redis-cli -c -h 10.42.0.247 -p 6379 get name # redis-cli -c -h 10.42.0.21 -p 6379 get name # redis-cli -c -h 10.42.0.132 -p 6379 get name # redis-cli -c -h 10.42.0.200 -p 6379 get name # redis-cli -c -h 10.42.0.197 -p 6379 get name # redis-cli -c -h 10.42.0.34 -p 6379 get name

O ponto crucial é que o Redis Cluster é a maneira preferida de obter shard automático, replicação e alta disponibilidade. Existem muitos outros parâmetros de configuração bem documentados no restante do arquivo /etc/redis.conf, você pode encontrar mais informações na documentação oficial: Tutorial do cluster do Redis e Especificação do cluster do Redis.
Isso nos traz ao fim da série de tutoriais Redis em três partes. O formulário de feedback abaixo pode ser usado para postar perguntas ou comentários.
Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/