O Redis Cluster é um recurso integrado do Redis que oferece suporte a fragmentação automática, replicação e alta disponibilidade, que anteriormente era implementada usando Sentinels. Ele é projetado para dois propósitos principais: um é dividir automaticamente seu conjunto de dados entre várias instâncias e, em segundo lugar, proporcionar algum grau de disponibilidade durante partições, para continuar as 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 no caso de falhas maiores (por exemplo, quando a maioria das instâncias mestres não está disponí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 como esperado deve conter 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 e aqueles em que os endereços IP ou portas TCP são remapeados, por exemplo, sob Docker. Além disso, nem todas as bibliotecas de clientes oferecem suporte a ele.
Este artigo mostra como configurar um Cluster Redis (com Modo 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.
Nota: Para este guia, usaremos instâncias Redis frescas/vazias para executar o modo cluster. O modo cluster não funcionará com algumas configurações feitas nos dois primeiros guias de nossa Série Redis, em particular, não funciona quando o parâmetro de réplica 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 somente 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 em seguida, execute o seguinte comando para instalar o módulo Redis usando o gerenciador de pacotes DNF como mostrado.
# dnf module install redis
2. Em seguida, inicie o serviço Redis, habilite-o para iniciar automaticamente na inicialização do sistema e verifique seu status para confirmar que está em execução (verifique o serviço em todas as 6 instâncias):
# systemctl start redis # systemctl enable redis # systemctl status redis
Etapa 2: Configurando Instâncias 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, crie um backup do arquivo original antes de editá-lo usando um editor de texto de 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 da LAN da instância. Remova o 127.0.0.1 porque percebemos que deixá-lo lá retarda o processo de criação do cluster, especialmente na etapa de adesão ao cluster.
bind 10.42.0.247
Em seguida, defina o modo protegido como não
para permitir conexões das outras instâncias no cluster.
protected-mode no
O parâmetro da porta define a porta em que o servidor Redis irá escutar as conexões, o padrão é 6379. Esta é a porta de dados para comunicar com os clientes.
port 6379

5. O próximo conjunto de parâmetros irá habilitar o modo cluster e configurar algumas de suas funcionalidades ú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 útil do cluster é cluster-node-timeout, que é usada para definir o tempo máximo em milissegundos que uma instância pode ficar indisponível para ser considerada em 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 no disco. Podemos usar um dos modos de persistência, que é o Arquivo de Apenas Adição (AOF): ele registra (no arquivo appendonly.aof criado no diretório de trabalho) cada operação de escrita recebida com sucesso pelo servidor. Os dados serão reproduzidos durante a inicialização do servidor para reconstruir o conjunto de dados original.
Para habilitar, defina o parâmetro appendonly como sim
.
appendonly yes

7. Depois de fazer todas as mudanças, 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 agora ter 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 a porta 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
Etapa 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 uma réplica por mestre.
Para nossa configuração que tem 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.
A seguinte comando é formatado de uma maneira 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 um failover de 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, vamos parar o serviço do Redis em um dos nós mestres, por exemplo, 10.42.0.197 e verificar 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á no 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 mais uma vez no nó falhado 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 falhado 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 Redis Cluster
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 maneira. Use o switch -c
para habilitar o suporte ao cluster na 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 chave é que o Redis Cluster é a maneira preferida de obter fragmentação automática, 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 Redis e Especificação do cluster Redis.
Isso nos leva ao final da série de tutoriais do Redis em três partes. O formulário de feedback abaixo pode ser usado para enviar perguntas ou comentários.
Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/