Redis + Redundância com Sentinel + Docker

airton_lirajunior_2ddebd

Airton Lira junior

Posted on November 2, 2024

Redis + Redundância com Sentinel + Docker

Redis: Configuração, Manipulação e Alta Disponibilidade com Sentinel

Neste artigo, vamos abordar sobre o que é o Redis, sua utilização, alguns comandos de manipulação de valores em memória e utilização do Redis com Sentinel, tudo dentro de diversos containers Docker. Vamos iniciar desde a montagem da imagem, ferramentas necessárias até a configuração e implementação de vários Redis (Master-Slave) junto de 2 Sentinel e mostrar na prática como os slaves e o Sentinel trabalham com redundância.

O que é o Redis?

Redis é um banco de dados não relacional que tem dentro de sua estrutura o armazenamento chave-valor. Ele oferece diversas estruturas de armazenamento de dados na memória, o que permite ter diversos formatos na chave-valor, podendo ser:

  • Hashes
  • Lists
  • Sets
  • Strings

Além disso, o Redis oferece várias funcionalidades para trabalhar com essa chave-valor para comparar, buscar ou manipular os valores. Como isso está tudo em memória, o Redis acaba sendo uma opção extremamente rápida para trabalhar com dados.

Importante Salientar

O Redis executa seus comandos de forma atômica, ou seja, trabalha de forma single-threaded - somente um comando é executado por vez.

Considerações Importantes

Devemos considerar alguns pontos sobre o Redis para validar em qual cenário melhor se enquadra sua usabilidade:

  • Não é um banco de dados para armazenar dados por um longo período, por mais que possua recursos para isso
  • Não deve ser utilizado para substituir um banco de dados relacional
  • Não possui suporte oficial para Windows
  • Por ser em memória, não se pode armazenar muitos dados

Vantagens do Redis

  1. Emprega um estilo de master/slave, tornando a replicação assíncrona entre os servidores subordinados ao master, proporcionando um ganho de leitura significativo
  2. Em casos de queda, permite habilitar snapshots do cenário atual e escrita em AOF (Append Only File), permitindo rápida restauração
  3. É de código aberto, sendo compatível com diversas linguagens:
    • C#
    • C++
    • JavaScript
    • Node.js
    • Ruby
    • Go
    • Java
    • PHP
    • E outras...

Caso de Uso

Imagine que você tenha uma etapa de sua aplicação que precisa buscar algumas informações no banco de dados relacional:

  • A tabela possui cerca de 100 registros
  • Essas informações têm pouca DML (mudança nos dados)
  • Sua aplicação possui em média 15 usuários utilizando esse recurso
  • Depois de 2 anos, sua aplicação passa a ter 1000 usuários

Por que não buscar esses 100 registros no Redis ao invés de gastar recurso do banco de dados relacional?

Instalação do Redis

O Redis possui suporte oficial para Mac e Linux. Existe uma versão para Windows criada pela comunidade, mas não é oficial. Neste artigo, realizaremos a instalação via Docker.

Para outras informações sobre o download do Redis, acesse: https://redis.io/download

Docker: Uma Breve Introdução

Docker é uma plataforma de software de código aberto para criar, implantar e gerenciar contêineres de aplicativos virtualizados em um sistema operacional comum. Pode ser baixado através do link: https://www.docker.com/get-started

Subindo um Container e Instalando Redis

Image description

Image description

Após validar se o Docker está rodando corretamente, vamos baixar a última versão do Ubuntu disponível no repositório.

Image description

Image description

Image description

Agora vamos acessar o container através do comando “docker exec -it [ID CONTAINER] bash” onde utilizamos o parâmetro -it para acessar mais de uma sessão do mesmo host:

Vamos agora atualizar nosso ubuntu, instalar alguns recursos faltantes ubuntu e em seguida o redis:

apt-get update:

apt-get install sudo:

apt-get install redis-server:

Testando instalação do redis:

Com o Redis em funcionamento, vamos conhecer um pouco mais sobre o redis.conf que é o arquivo de configuração do redis:

Configuração do Redis

O arquivo de configuração principal do Redis é o redis.conf. Podemos acessar e modificar suas configurações usando o editor nano:

apt-get install nano
nano redis.conf
Enter fullscreen mode Exit fullscreen mode

Configuração via Dockerfile

Para automatizar o processo de configuração, podemos usar um Dockerfile:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y sudo
RUN apt-get install -y redis-server
RUN apt-get install -y nano
EXPOSE 6379
CMD ["redis-server", "--protected-mode no"]
Enter fullscreen mode Exit fullscreen mode

Manipulando Chaves e Valores

Exemplos básicos de manipulação de chaves no Redis:

# String simples
SET nome "valor"

# String com espaço
SET "chave com espaço" "valor com espaço"

# String composta
MSET chave1 "valor1" chave2 "valor2"

# Listando chaves
KEYS *

# Querying
KEYS *nome*
Enter fullscreen mode Exit fullscreen mode

Configurando Replicação Master-Slave

A replicação do Redis possui características importantes:

  1. O master mantém os slaves sincronizados
  2. Em caso de queda do master, um slave assume como novo master
  3. Ressincronização parcial em caso de falhas temporárias
  4. Ressincronização completa quando necessário

Configurando o Slave

cd /etc/redis
cp redis.conf redis-slave.conf
Enter fullscreen mode Exit fullscreen mode

Edite o arquivo redis-slave.conf:

  • Altere a porta para 6380
  • Configure o slaveof para apontar para o master

Configurando o Sentinel

O Sentinel monitora a saúde dos Redis nodes e decide qual slave será o novo master em caso de falhas.

apt-get install redis-sentinel
Enter fullscreen mode Exit fullscreen mode

Configure o sentinel.conf:

  • Ajuste down-after-milliseconds para 10 segundos
  • Configure o IP e porta do master
  • Ajuste a porta do sentinel

Testando a Alta Disponibilidade

  1. Inicie o Redis master:
redis-server redis.conf
Enter fullscreen mode Exit fullscreen mode
  1. Inicie o Redis slave:
redis-server redis-slave.conf
Enter fullscreen mode Exit fullscreen mode
  1. Inicie os Sentinels:
redis-sentinel sentinel.conf
redis-sentinel sentinel2.conf
redis-sentinel sentinel3.conf
Enter fullscreen mode Exit fullscreen mode

Para monitorar o funcionamento:

redis-cli monitor
Enter fullscreen mode Exit fullscreen mode

Neste artigo, abordamos os conceitos básicos do Redis bem como uma simulação de disponibilidade e redundância. Existem muitas outras abordagens possíveis, como o uso de channels do Redis para comunicação ou a utilização de tipos de dados como lists, Pub/sub e sorted lists.


Autor: Airton Lira Junior

LinkedIn: linkedin.com/in/airton-lira-junior-6b81a661/

💖 💪 🙅 🚩
airton_lirajunior_2ddebd
Airton Lira junior

Posted on November 2, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related