Introdução à replicação Redis
Redis é construído com vários recursos para garantir a alta disponibilidade de suas instâncias. Além dos recursos avançados de alta disponibilidade, como clustering e Sentinel, a replicação da replica mestre está disponível para configurar e usar com o mínimo esforço. Uma instância de mestre (líder) pode ter várias instâncias de seguidor em que cada seguidor é uma cópia exata da instância do líder. Sempre que uma réplica é desconectada de sua instância do líder, ele se pergunta para estabelecer a conexão novamente e clonar o mestre automaticamente.
Como você pode ver na ilustração dada, quando o mestre e as réplicas estão bem conectadas, o mestre envia todos os comandos de gravação e as ações que alteram o conjunto de dados mestre para as réplicas de forma assíncrona. Este processo é de baixa latência e otimizado para o desempenho.
Além disso, no caso de um intervalo de replica mestre, as réplicas se reconectarão e tentarão adquirir apenas os comandos perdidos devido à desconexão. É chamado de sincronização parcial. Em alguns casos, a sincronização parcial não é possível. Portanto, uma ressincronização completa acontece onde a instância principal gera um instantâneo de seus dados, empurra -os para as réplicas e envia todos os comandos que afetam as modificações do conjunto de dados.
O comando Psync/Sync
Quando as réplicas se conectam a um mestre, elas usam o comando psync para se comunicar com a instância mestre. Neste processo de sincronização parcial, a réplica fornecida envia o ID de replicação mestre e os valores de deslocamento para o servidor mestre. No final do recebimento, essas duas informações são usadas para transmitir as mudanças incrementais do conjunto de dados do mestre para a instância da réplica.
Em resumo, o ID e deslocamento de replicação mestre representam uma versão exata do conjunto de dados mestre. Todo nó mestre recebe uma string pseudo-aleatória única, que é chamada de ID de replicação. Além disso, o mestre mantém um valor de deslocamento que é incrementado para cada pedaço de dados produzidos para serem empurrados para as réplicas.
Conforme mostrado na ilustração anterior, como o conjunto de dados mestre foi alterado devido às gravações do cliente, o valor de compensação de replicação mudou de 12324 para 15693. Portanto, a réplica chama o comando psync com o valor de deslocamento atualizado.
Sintaxe
O comando PSYNC tem a seguinte sintaxe:
Psync master_replication_id master_replication_offset
master_replication_id: Esta é a sequência pseudo-aleatória gerada que representa um determinado conjunto de dados.
master_replication_offset: O valor de deslocamento que é incrementado por cada pedaço de bytes gerado para enviar para as réplicas.
Este comando retorna uma peça de dados e grava do mestre para uma instância de réplica. Em resumo, o comando psync inicia um fluxo de replicação da instância do líder para a instância de réplica que transfere o conjunto de dados e as solicitações de gravação do cliente alteradas do deslocamento anterior.
Caso de uso - Réplica de sincronização com mestre
Vamos começar com algumas instâncias do servidor Redis em portas diferentes, como 6379 e 6380. Você pode usar o seguinte comando:
Redis-Server-Port 6379
Redis-Server-Port 6380
Em seguida, convertemos uma instância de Redis em uma réplica usando o comando réplicaof. Antes disso, precisamos nos conectar a essa instância com o Redis-cli, como mostrado no seguinte:
Redis -cli -p 6380
Agora, a conexão é feita para a instância do servidor Redis em funcionamento na porta 6380. Vamos fazer desta instância uma réplica da outra instância Redis que é executada na porta 6379.
Agora, podemos testar se esta instância se tornou uma réplica emitindo o seguinte comando:
Como você pode ver, o papel é exibido como um escravo para esta instância. Vamos executar o mesmo comando contra a outra instância e inspecionar:
É um nó principal, como mostrado na janela de saída anterior.
Vamos inspecionar de perto como a sincronização acontece entre as instâncias de mestre e escravo. Para fins de demonstração, o comando de sincronização é usado. Ele se comporta o mesmo que o comando psync, exceto que a sincronização parcial não é permitida.
Vamos emitir o comando Sync da réplica.
Agora, emitimos um comando de gravação para a instância mestre via CLI.
Como esperado, o comando de gravação é transferido para a réplica imediatamente seguida por pings. O comando PSYNC funciona da mesma forma que o comando de sincronização, mas com sincronização parcial ativada.
Conclusão
Em resumo, o Redis vem com diferentes recursos que permitem alta disponibilidade. O padrão mestre-replica é uma das técnicas suportadas pela Redis para garantir que pelo menos uma instância do servidor Redis esteja disponível em um determinado momento. Cada réplica é sincronizada com seu mestre e emite o comando psync para criar um fluxo de replicação que transmite o conjunto de dados alterado e grava as solicitações do mestre. Como mencionado, o comando psync se comporta o mesmo que o comando antigo de sincronização, mas com sincronização parcial ativada.