Índice
2. Replicação mestre-escravo Redis
1. O que é replicação mestre-escravo?
2. O papel da replicação mestre-escravo
3. Princípio do fluxo de trabalho da replicação mestre-escravo
3.1. Etapa de estabelecimento do link
3.2. Estágio de sincronização de dados
3.3. Estágio de propagação de comando
3. Perguntas frequentes sobre replicação mestre-escravo
2. Interrupções frequentes de rede
3. Os dados são inconsistentes
1. O que é Redis
Redis é um dos bancos de dados NoSQL mais populares da atualidade. Redis é um código aberto, escrito em ANSI C, contém uma variedade de estruturas de dados, suporta banco de dados de armazenamento de pares de valores-chave de persistência opcional baseado em rede e baseado em memória. Possui as seguintes características. :
- Funciona com base na memória e tem desempenho eficiente
- Suporta distribuição e pode, teoricamente, ser expandido infinitamente
- sistema de armazenamento de valores-chave
- O código aberto é escrito em linguagem ANSI C, está em conformidade com o protocolo BSD, suporta a rede, pode ser do tipo log persistente e baseado em memória, banco de dados de valores-chave e fornece APIs em vários idiomas.
OK! Vamos falar brevemente sobre o que é Redis, que é NoSQL para armazenamento de dados. Geralmente é usado para armazenamento em cache. Este artigo também é uma compreensão adicional da camada subjacente do Redis baseada em Redis!
2. Replicação mestre-escravo Redis
Desenho simples para fácil compreensão
Configuração multiservidor: um servidor mestre apenas grava dados e os sincroniza com outros servidores escravos. O problema é a sincronização de dados . Portanto, usamos a replicação mestre-escravo para resolver o problema de sincronização de dados.
1. O que é replicação mestre-escravo?
A replicação mestre-escravo consiste em copiar os dados do mestre para o escravo de forma imediata e eficaz . Isso é chamado de replicação mestre-escravo!
Características: Um mestre pode ter vários escravos, e um escravo corresponde apenas a um mestre.
Responsabilidades:
- mestre
- gravar dados
- Ao realizar uma operação de gravação, os dados alterados são automaticamente sincronizados com o escravo.
- Ler dados (geralmente apenas operações de gravação são executadas e a leitura é feita pelo servidor escravo)
- pomada
- Ler dados
- Proibido escrever
2. O papel da replicação mestre-escravo
Separação de leitura e escrita: escritas mestre, leituras escravas, melhorando a capacidade de carga de leitura e gravação do servidor
Balanceamento de carga: baseado na estrutura mestre-escravo, combinado com a separação de leitura e gravação, o escravo compartilha a carga mestre e altera o número de escravos de acordo com as mudanças na demanda e compartilha a carga de leitura de dados através de vários nós escravos, melhorando muito a simultaneidade e a taxa de transferência do servidor Redis.
Recuperação de falhas: Quando ocorre um problema no mestre, o escravo fornece serviços para obter uma recuperação rápida de falhas.
Redundância de dados: implementar backup de dados dinâmico é um método de redundância de dados além da persistência.
Base de alta disponibilidade: com base na replicação mestre-escravo, crie modo sentinela e cluster para implementar a solução de alta disponibilidade Redis.
3. Princípio do fluxo de trabalho da replicação mestre-escravo
Deixe-me dar uma visão geral primeiro. Eu divido o princípio de replicação mestre-escravo em dois estágios. O princípio de funcionamento é dividido em: estágio de estabelecimento de conexão , estágio de sincronização de dados e estágio de propagação de comando .
3.1. Etapa de estabelecimento do link
O servidor escravo envia o endereço IP e o número da porta do mestre , e o mestre recebe e responde de volta. Após receber a resposta, o escravo salva o IP e o número da porta do mestre, estabelece um canal de estoque com base nas informações salvas e inicia o ping periódico, e o mestre também responderá com pong. Finalmente, o escravo envia seu próprio número de porta ao mestre, e o mestre salva o número da porta do escravo.
Passo 1: O escravo define o endereço e a porta do mestre e salva as informações do mestre.
Etapa 2: escravo estabelece conexão de soquete
Etapa 3: escravo envia comando ping (tarefa de timer)
Etapa 4: Autenticação (como o redis é usado internamente pelo servidor e não é fornecido ao mundo externo, ele não está definido)
Etapa 5: Mestre salva informações da porta escrava
3.2. Estágio de sincronização de dados
Quando o servidor mestre ativar o AOF ou se tornar o servidor mestre, um buffer de replicação será criado.
① Quando o escravo envia uma solicitação psync2 pela primeira vez, ele carregará dois dados psync2 ? -1(psync2 <runid> <offset>), o que significa que ele precisa ser copiado por completo pela primeira vez. ②O mestre executa bgsave para gerar um arquivo RDB e registra o deslocamento de cópia atual. ③Ao receber a instrução, ele enviará +fullresync seu próprio deslocamento uid. Ao enviar o arquivo RDB para o escravo através do stocket, o comando do cliente é aceito, e o deslocamento muda. ④O escravo recebe a sincronização completa, salva o uid e o deslocamento (deslocamento) do mestre, limpa todos os dados atuais, aceita o arquivo RDB por meio do estoque e restaura os dados RDB.
O acima é uma cópia completa
⑤Enviar comando: deslocamento masterid psync2. ⑥Aceite o comando, determine se o id corresponde e se o deslocamento está no buffer de cópia.
⑦ Se um dos masterid ou offset não for satisfeito, será feita uma cópia completa. Se os enviados forem iguais aos do master, eles serão omitidos. Se o masterid ou offset for satisfeito, mas o offset for inconsistente com o deslocamento salvo no mestre, o deslocamento contínuo será enviado e passado. O soquete envia os dados do deslocamento no mestre no buffer de cópia para o deslocamento mestre transferido. ⑧O escravo recebe +concatiue e salva o deslocamento do mestre. Após receber a mensagem, execute bgrewriteaof para restaurar os dados.
Cópia incremental acima
3.3. Estágio de propagação de comando
Envie o comando replconf ack offset durante a fase de propagação do comando
3. Perguntas frequentes sobre replicação mestre-escravo
1. Cópia completa frequente
Sintomas do problema:
O ambiente de rede não é bom, há interrupção da rede e o escravo não fornece serviços.
causas do problema:
O buffer de cópia é muito pequeno. Depois que a rede é desconectada, o deslocamento do escravo sai dos limites, acionando a cópia completa.
Resultados finais:
O escravo executa repetidamente a replicação completa
resolver:
Modificar o tamanho do buffer de cópia
repl-backlog-size
2. Interrupções frequentes de rede
Fenômeno:
A conexão entre salve e master está desconectada
razão:
O mestre envia comandos ping com menos frequência
O mestre define um curto tempo limite
O comando ping causa perda de pacotes na rede
resolver:
Aumente a frequência de envio de comandos ping
repl-ping-slave-period
O tempo limite de resposta deve ser pelo menos 5 a 10 vezes a frequência do comando ping, caso contrário, o escravo atingirá facilmente o tempo limite.
3. Os dados são inconsistentes
Fenômeno:
Vários escravos obtêm os mesmos dados sem sincronização
razão:
As informações da rede estão fora de sincronia e há um atraso no envio de dados.
plano:
1. Otimize o ambiente de rede mestre e escravo, geralmente implantado na mesma sala de computadores, como Alibaba Cloud, etc.
2. Monitore o atraso no estágio mestre-escravo (via offset) Se o atraso do escravo for muito grande, bloqueie temporariamente o acesso de dados do programa ao escravo.
slave-serve-stale-data yes|no
Após a abertura, ele responde apenas a alguns comandos, como info e slaveof (use com cuidado, a menos que os requisitos de consistência de dados sejam altos)