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
- Emprega um estilo de master/slave, tornando a replicação assíncrona entre os servidores subordinados ao master, proporcionando um ganho de leitura significativo
- Em casos de queda, permite habilitar snapshots do cenário atual e escrita em AOF (Append Only File), permitindo rápida restauração
- É 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
Após validar se o Docker está rodando corretamente, vamos baixar a última versão do Ubuntu disponível no repositório.
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
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"]
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*
Configurando Replicação Master-Slave
A replicação do Redis possui características importantes:
- O master mantém os slaves sincronizados
- Em caso de queda do master, um slave assume como novo master
- Ressincronização parcial em caso de falhas temporárias
- Ressincronização completa quando necessário
Configurando o Slave
cd /etc/redis
cp redis.conf redis-slave.conf
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
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
- Inicie o Redis master:
redis-server redis.conf
- Inicie o Redis slave:
redis-server redis-slave.conf
- Inicie os Sentinels:
redis-sentinel sentinel.conf
redis-sentinel sentinel2.conf
redis-sentinel sentinel3.conf
Para monitorar o funcionamento:
redis-cli monitor
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/