Pesquisa de site

Como configurar a replicação do Redis (com modo cluster desabilitado) no CentOS 8 - Parte 1


Redis (Servidor de Dicionário Remoto) é um servidor de banco de dados/estrutura de dados de código-fonte aberto muito popular e amplamente utilizado, rápido, distribuído e eficiente na memória.

Ele oferece um rico conjunto de recursos que o tornam eficaz para uma ampla variedade de casos de uso: como banco de dados, camada de cache, intermediário de mensagens ou fila; aplicável em aplicativos da web, aplicativos de bate-papo e mensagens, jogos, análise de dados em tempo real e muito mais.

Ele suporta estruturas de dados flexíveis, replicação assíncrona mestre-escravo para dimensionar o desempenho de leitura e proteger contra perda de dados, fragmentação do lado do cliente para dimensionar o desempenho de gravação, duas formas de persistência para gravar dados na memória em disco em um formato compacto, clustering e particionamento. Ele também oferece failovers automáticos para implantação de alta disponibilidade via Redis Sentinel, lua scripting, transações e muito mais.

Sendo um banco de dados NO SQL ou não relacional, o Redis oferece alguns benefícios de desempenho em relação aos sistemas de banco de dados tradicionais (como MySQL/MariaDB, PostgreSQL, etc.), porque todos os seus dados residem ou são armazenados na memória, tornando-os facilmente acessíveis a uma aplicação, enquanto os bancos de dados tradicionais precisam gravar ou ler todos os dados do disco ou de uma fonte externa.

O Redis tornou-se uma escolha cada vez mais comum para armazenamento em cache, que permite a reutilização de dados armazenados em cache (armazenados no espaço de memória principal de um aplicativo) em vez de sempre consultar um banco de dados em busca de dados usados com frequência. Portanto, é um companheiro fantástico de RDMS (Relational Database Management Systems) para melhorar o desempenho do aplicativo.

Nesta série de tutoriais do Redis em três partes, abordaremos como configurar e usar alguns dos principais recursos do Redis, que são replicação, alta disponibilidade usando o Redis Sentinel e o Redis Cluster, os artigos são:

Este guia mostra como configurar a Replicação do Redis (com o Modo Cluster desativado) no CentOS 8 Linux, incluindo como instalar o Redis, configurar o mestre e réplicas e teste a replicação.

Importante: um Cluster Redis (ou seja, um Cluster de Replicação) com o modo cluster desabilitado tem um único grupo de nós ( por exemplo, um mestre e uma ou duas réplicas), onde um cluster Redis com modo de cluster habilitado pode consistir em dois ou mais grupos de nós (por exemplo, três mestres, cada um com escravos ou dois).

Pré-requisitos:

  1. Servidores com instalação CentOS 8

Configuração do ambiente de teste

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34

Com a configuração acima (que tem um único nó primário/mestre de leitura/gravação e 2 nós de réplica somente leitura), temos um único grupo de nós que contém todos os dados do cluster em cada nó. Assim que um escravo se conecta a um mestre, ele recebe uma cópia inicial do banco de dados completo e quaisquer dados que existiam anteriormente no escravo serão descartados.

Além disso, um cliente pode escrever apenas no mestre, mas ler em qualquer nó do cluster. E à medida que as gravações são realizadas no mestre, elas são propagadas para todos os escravos conectados para atualização dos conjuntos de dados dos escravos em tempo real.

Etapa 1: Instalando o Redis no CentOS 8

1. Para começar, faça login em todos os nós do CentOS 8 via SSH e instale o pacote Redis em todos os nós (mestre e réplicas). ) usando o gerenciador de pacotes DNF conforme mostrado.


dnf install @redis

2. Após a conclusão da instalação do pacote Redis, inicie o serviço Redis, habilite-o para iniciar automaticamente a cada inicialização do sistema e verifique se está instalado e funcionando da seguinte maneira.

systemctl start redis
systemctl enable redis
systemctl status redis

3. Você também pode confirmar se o servidor Redis está funcionando verificando as portas de escuta usando o comando ss, como segue.

ss -ltpn | grep redis-server

Etapa 2: configurando o servidor mestre Redis

4. O Redis é configurado usando o arquivo de configuração /etc/redis.conf, um arquivo de configuração de exemplo autodocumentado. Primeiro, crie um backup do arquivo original e, em seguida, abra-o para edição usando o editor de linha de comando de sua preferência.

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

5. Por padrão, uma instância do Redis é configurada para escutar e aceitar conexões na interface loopback, usando a diretiva bind. Para se comunicar com as réplicas, o mestre deve ser configurado para escutar o endereço de loopback IPv4 e seu endereço IP da LAN, ou seja, 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. Em seguida, defina o parâmetro de modo protegido como no para permitir a comunicação com as réplicas, conforme mostrado.

protected-mode no

Além disso, o Redis escuta na porta 6379 que é definida usando a diretiva port. Esta é a porta de dados para comunicação com APIs de aplicativos ou clientes CLI.

port 6379

7. Para opcionalmente proteger as comunicações master-replica, podemos proteger o master usando a diretiva requirepass, para que os clientes/réplicas tenham que emita uma senha de autenticação antes de executar qualquer comando ou iniciar um processo de sincronização de replicação, caso contrário o mestre recusará a solicitação do cliente/réplica (lembre-se de definir uma senha segura).

Usaremos a seguinte opção para fins de demonstração, para mostrar como funciona.

requirepass  Securep@55Here

8. Além disso, os logs do Redis são armazenados no arquivo /var/log/redis/redis.log, isso é definido usando a diretiva logfile e o nível de detalhamento padrão do servidor é notice, definido usando o parâmetro loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log

9. Como o systemd é o gerenciador de sistema e serviço padrão no CentOS 8, você pode configurar o Redis para interagir com a árvore de supervisão do systemd definindo o parâmetro supervisionado como systemd.

supervised systemd

10. Após realizar todas as configurações necessárias, salve o arquivo e feche-o. Em seguida, reinicie o serviço Redis para aplicar as novas alterações.

systemctl daemon-reload
systemctl restart redis

11. Para acessar o servidor Redis, precisamos usar o redis-cli (uma interface de linha de comando para o servidor redis). Por padrão, ele se conecta ao servidor no localhost (na porta 127.0.0.1 6379). Observe que, como o servidor é protegido contra clientes por meio de uma senha, a execução de um comando antes da autenticação deverá falhar.

Use o comando auth para fornecer a senha de autenticação conforme mostrado na captura de tela a seguir.

redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list

12. Para conectar-se a uma réplica (depois de configurá-las conforme descrito na próxima seção), use -h e -p opções para especificar o endereço IP/nome do host e a porta da réplica, respectivamente (não que a porta 6379 deva estar aberta no firewall da réplica).

redis-cli -h 10.42.0.21 -p 6379

13. Em seguida, abra a porta de dados do servidor Redis no firewall para permitir conexões de entrada com o mestre e, posteriormente, recarregue as regras do firewall usando o comando firewall-cmd conforme mostrado.

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

Etapa 3: configurar servidores de réplica/escravos Redis

14. Para definir rapidamente uma instância do Redis como uma réplica em tempo real, use o utilitário redis-cli e chame o REPLICAOF comando conforme mostrado.

redis-cli replicaof 10.42.0.247 6379
OR
redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

15. Para tornar uma conexão de replicação permanente, você precisa fazer as seguintes alterações no arquivo de configuração. Comece fazendo backup do arquivo original e abra-o para edição.

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

16. Para permitir que os clientes se conectem à réplica para ler dados, adicione o endereço IP da réplica à diretiva de ligação.

replica1
bind 127.0.0.1 10.42.0.21

replica2
bind 127.0.0.1 10.42.0.34

Configurando uma instância do Redis como uma réplica

17. Para configurar uma instância Redis como uma réplica, use o parâmetro replicaof e defina o endereço IP (ou nome do host) do nó mestre e a porta como valores.

replicaof 10.42.0.247 6379

Configurando a réplica para autenticação no mestre

18. Em seguida, como nossa instância mestre é protegida por senha, precisamos definir a senha na configuração da réplica para permitir que ela se autentique no mestre, usando o masterauth parâmetro.

masterauth Securep@55Here

19. Além disso, quando uma réplica perde a conexão com o mestre, ou quando a replicação está em andamento, a réplica é configurada para responder às solicitações do cliente, possivelmente com “desatualizado ”dados. Mas se for a primeira sincronização, o conjunto de dados pode estar vazio. Esse comportamento é controlado pelo parâmetro replica-serve-stale-data.

E, como as réplicas do Redis 2.6 são somente leitura por padrão, isso é controlado pelo parâmetro replica-read-only. Você pode fazer outros ajustes na configuração da réplica para atender às necessidades do seu aplicativo.

20. Depois de fazer todas as alterações necessárias, reinicie o serviço Redis em todas as réplicas.

systemctl restart redis

21. Além disso, abra a porta 6379 no firewall para permitir conexões do mestre e dos clientes com as réplicas e recarregue as regras do firewall.

firewall-cmd --zone=public --permanenent --add-port=6379/tcp
firewall-cmd --reload

Etapa 4: verificar o status da replicação da réplica mestre

22. Assim que a configuração da replicação da réplica mestre for concluída, podemos verificar se a configuração está funcionando bem da seguinte maneira.

No mestre, execute os seguintes comandos.

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication

23. Além disso, verifique o status de replicação nas réplicas/escravos como segue.

redis-cli
127.0.0.1:6379> info replication

23. Agora vamos testar a replicação definindo um valor-chave na instância mestre e verificar se os dados estão sincronizados com as réplicas.

No mestre, faça isso:

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'linux-console.net'

24. Em seguida, verifique se os dados foram sincronizados com as réplicas conforme mostrado.

redis-cli
127.0.0.1:6379> get domain

Protegendo a instância mestre contra o risco de perder algumas gravações

25. O Redis possui um recurso que permite que uma instância mestre limite o risco de perda de algumas gravações caso não haja réplicas suficientes disponíveis, a um número especificado de segundos.

Isso significa que um mestre pode parar de aceitar escritas se houver menos de N réplicas conectadas, com atraso menor ou igual a M segundos, conforme controlado pelo min Opções -replicas-to-write e min-replicas-max-lag respectivamente.

Para defini-los, remova o comentário e defina os valores de acordo com seus requisitos de configuração em /etc/redis.conf, conforme mostrado na captura de tela a seguir. Esta configuração significa que, desde o último ping para as réplicas, após 10 segundos, se houver menos de 2 réplicas online, o mestre deixará de aceitar escritas.

min-replicas-to-write 2
min-replicas-max-lag 10

Você pode encontrar mais opções no restante do arquivo de configuração /etc/redis.conf e para obter mais detalhes, leia sobre replicação na documentação do Redis.

No próximo artigo, abordaremos como configurar o Redis para alta disponibilidade com o Sentinel no CentOS 8. Até então, fique trancado e lembre-se de compartilhar suas idéias e perguntas usando nosso formulário de comentários abaixo para você entrar em contato conosco.