Como Configurar um Cluster Redis no CentOS 8 – Parte 3

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:

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

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

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

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

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
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 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
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, 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.

Check Cluster Failover Status

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

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

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

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/