Como Configurar um Cluster Redis no CentOS 8 – Parte 3

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:

  1. Servidores com Instalação CentOS 8

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
Redis Cluster Logical Diagram

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
Set Redis Listen Interface and Port

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
Set Cluster Node Timeout

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
Set Persistence Options

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
Check Cluster Node Log File

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
Create Redis Cluster

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.

Check All Cluster Nodes on Any Node

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
List Redis Cluster Masters

Também, tome nota dos escravos do Redis.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
List All Redis Cluster Slaves

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.

Check Cluster Failover Status

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
Check All Redis Cluster Master Status

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
Check All Redis Cluster Slaves

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
Verify Redis Cluster Data Replication

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/