Como Configurar o Redis para Alta Disponibilidade com Sentinel no CentOS 8 – Parte 2

Redis fornece alta disponibilidade via sistema distribuído Redis Sentinel. Sentinel ajuda a monitorar instâncias do Redis, detectar falhas e realizar trocas de papéis automaticamente, permitindo assim que uma implantação do Redis resista a qualquer tipo de falha.

Ele oferece monitoramento de instâncias do Redis (mestre e réplicas), suporta notificação de outros serviços/processos ou do administrador do sistema via script, failover automático para promover uma réplica a mestre quando o mestre cai e fornece configuração para clientes descobrirem o mestre atual que oferece um serviço específico.

Este artigo demonstra como configurar o Redis para alta disponibilidade com o Redis Sentinel no CentOS 8, incluindo a configuração de sentinelas, verificação do status da configuração e teste de failover de um Sentinel.

Pré-requisito:

  1. Como Configurar a Replicação do Redis (com Modo Cluster Desativado) no CentOS 8 – Parte 1

Configuração do Ambiente de Teste

Master Server and Sentinel1: 10.42.0.247
Redis Replica1 and Sentinel2: 10.42.0.21
Redis Replica2 and Sentinel3: 10.42.0.34
Redis Sentinel Setup Logical Diagram

De acordo com a documentação do Redis Sentinel, é necessário ter pelo menos três instâncias do Sentinel para uma implantação robusta. Considerando a nossa configuração acima, se o master falhar, os Sentinels2 e Sentinel3 concordarão sobre a falha e serão capazes de autorizar uma troca, permitindo que as operações do cliente continuem.

Passo 1: Iniciando e Habilitando o Serviço do Redis Sentinel

1. No CentOS 8, o serviço do Redis Sentinel é instalado juntamente com o servidor do Redis (o que já fizemos na Configuração de Replicação do Redis).

Para iniciar o serviço do Redis sentinel e habilitá-lo para iniciar automaticamente durante a inicialização do sistema, utilize os seguintes comandos do systemctl. Além disso, confirme que ele está em execução verificando seu status (faça isso em todos os nós):

# systemctl start redis-sentinel
# systemctl enable redis-sentinel
# systemctl status redis-sentinel
Start Redis Sentinel Service

Passo 2: Configurando o Redis Sentinel em Todos os Nós do Redis

2. Nesta seção, explicamos como configurar o Sentinel em todos os nossos nós. O serviço do Sentinel possui um formato de configuração semelhante ao servidor do Redis. Para configurá-lo, utilize o arquivo de configuração auto-documentado /etc/redis-sentinel.conf.

Primeiramente, crie um backup do arquivo original e abra-o para edição.

# cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig
# vi /etc/redis-sentinel.conf

3. Por padrão, o Sentinel escuta na porta 26379, verifique isso em todas as instâncias. Observe que você deve deixar o parâmetro bind comentado (ou definido como 0.0.0.0).

port 26379
Set Sentinel Listen Interface and Port

4. Em seguida, diga ao Sentinel para monitorar nosso master e considerá-lo no estado de “Objetivamente Inativo” somente se pelo menos 2 sentinelas de quórum concordarem. Você pode substituir “mymaster” por um nome personalizado.

#On Master Server and Sentinel1
sentinel monitor mymaster 127.0.0.1 6379 2

#On Replica1 and Sentinel2
sentinel monitor mymaster 10.42.0.247 6379 2

#On Replica1 and Sentinel3
sentinel monitor mymaster 10.42.0.247 6379 2
Set Redis Master to Monitor

Importante: A declaração de monitoramento do sentinel DEVE ser colocada antes da declaração de auth-pass do sentinel para evitar o erro “Nenhum mestre com o nome especificado” ao reiniciar o serviço do sentinel.

5. Se o mestre Redis a ser monitorado tiver uma senha definida (no nosso caso, o mestre tem), forneça a senha para que a instância do Sentinel possa autenticar-se com a instância protegida.

 
sentinel auth-pass mymaster Securep@55Here
Set Master Auth Password

6. Em seguida, defina o número de milissegundos que o mestre (ou qualquer réplica ou sentinel anexado) deve estar inacessível para considerá-lo no estado de “Subjetivamente Inativo”.

A configuração a seguir significa que o mestre será considerado falhando assim que não recebermos nenhuma resposta de nossos pings dentro de 5 segundos (1 segundo é equivalente a 1000 milissegundos).

sentinel down-after-milliseconds mymaster 5000
Set Down Time for Master

7. Em seguida, defina o tempo limite de failover em milissegundos que define muitas coisas (leia a documentação do parâmetro no arquivo de configuração).

sentinel failover-timeout mymaster 180000
Set Fail Over Timeout

8. Em seguida, defina o número de réplicas que podem ser reconfiguradas para usar o novo mestre após uma falha ao mesmo tempo. Como temos duas réplicas, vamos configurar uma réplica como a outra será promovida para o novo mestre.

sentinel parallel-syncs mymaster 1
Set Number of Parallel Sync Replicas

Observe que os arquivos de configuração em Redis Replica1 e Sentinel2, e Reddis Replica1 e Sentinel2 devem ser idênticos.

9. Em seguida, reinicie os serviços do Sentinel em todos os nós para aplicar as alterações recentes.

# systemctl restart redis-sentinel

10. Depois, abra a porta 26379 no firewall em todos os nós para permitir que as instâncias do Sentinel comecem a se comunicar, recebendo conexões das outras instâncias do Sentinel, usando o firewall-cmd.

# firewall-cmd --zone=public --permanent --add-port=26379/tcp
# firewall-cmd --reload

11. Todas as réplicas serão descobertas automaticamente. Importante, o Sentinel atualizará a configuração automaticamente com informações adicionais sobre as réplicas. Você pode confirmar isso abrindo o arquivo de configuração do Sentinel para cada instância e verificar.

Por exemplo, quando você olha para o final do arquivo de configuração do mestre, você deveria ver as declarações known-sentinels e known-replica como mostrado na captura de tela a seguir.

Auto Generated Config in Master

Deve ser o mesmo caso em replica1 e replica2.

Auto Generated Config in Replica1
Auto Generated Config in Replica2

Observe que a configuração do Sentinel também é reescrita/atualizada toda vez que uma réplica é promovida ao status de mestre durante uma falha e toda vez que um novo Sentinel é descoberto na configuração.

Passo 3: Verificar o Status da Configuração do Redis Sentinel

12. Agora verifique o status/informações do Sentinel no mestre, usando o comando info sentinel da seguinte forma.

# redis-cli -p 26379 info sentinel

A partir da saída do comando conforme visto na captura de tela a seguir, temos dois réplicas/escravos e três sentinelas.

Check Sentinel Info on Master

13. Para mostrar informações detalhadas sobre o mestre (chamado mymaster), use o comando sentinel master.

# redis-cli -p 26379 sentinel master mymaster
Show Detailed Info About Sentinel Master

14. Para mostrar informações detalhadas sobre os escravos e sentinelas, use os comandos sentinel slaves e sentinel sentinels respectivamente.

# redis-cli -p 26379 sentinel slaves mymaster
# redis-cli -p 26379 sentinel sentinels mymaster

15. Em seguida, pergunte o endereço do mestre pelo nome das instâncias escravas usando o comando sentinel get-master-addr-by-name da seguinte forma.

A saída deve ser o endereço IP e porta da instância mestre atual:

# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
Get the Address of Master by Name on Slaves

Passo 4: Testar a Falha de Failover do Sentinel

16. Por fim, vamos testar o failover automático em nossa configuração do Sentinel. No mestre do Redis/Sentinel, faça o mestre do Redis (rodando na porta 6379) dormir por 60 segundos. Em seguida, consulte o endereço do mestre atual nas réplicas/escravos da seguinte forma.

# redis-cli -p 6379
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379>  debug sleep 60
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

A partir da saída da consulta, o novo mestre agora é replica/escravo2 com o endereço IP 10.42.0.34 conforme visto na captura de tela a seguir.

Test Redis Sentinel Failover

Você pode obter mais informações na documentação do Redis Sentinel. Mas se tiver alguma ideia para compartilhar ou dúvidas, o formulário de feedback abaixo é o seu caminho até nós.

Na próxima e última parte desta série, veremos como configurar um Cluster Redis no CentOS 8. Será um artigo independente dos dois primeiros.

Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/