Introdução: Replicação e otimização mestre-escravo do Redis
Replicação e otimização mestre-escravo Redis
Replicação mestre-escravo
Antes de prestarmos atenção à replicação mestre-escravo, devemos primeiro considerar o que há de errado com uma única máquina.
- Mau funcionamento da máquina
- Gargalo de capacidade
- Gargalo QPS
Estes são os problemas encontrados por um único nó, portanto, desta vez, há uma replicação mestre-escravo (um mestre e um escravo, um mestre e vários escravos)
Use a replicação mestre-escravo para:
- Cópia de dados
- Desempenho de leitura estendido
Nota:
- Um mestre pode ter vários escravos
- Um escravo tem apenas um mestre
- O fluxo de dados é unilateral, de mestre para escravo
Configuração de replicação mestre-escravo
Duas maneiras de alcançar
- escravo de comando
Duas máquinas: nó mestre: 47.11.11.11 nó escravo 47.22.22.22
Execute o comando slaveof no nó escravo
47.22.22.22-6379 > slacefof 47.11.11.11 6379
OK
Cancelar cópia:
47.22.22.22-6379 > slacefof no one
OK
- Alterar configuração
slaveof ip port //从节点ip + 端口
slave-read-only yes //开启只做读的操作
- Comparação de duas maneiras
- Ver mestre e escravo
127.0.0.1:6379> info replication
# Replication
role:master //主节点
connected_slaves:0
master_replid:1d43401335a5343b27b1638fc9843e3a593fc1a7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
Pontos de conhecimento:
- Nó principal runID:
Depois que cada nó redis é iniciado, uma string hexadecimal de 40 dígitos é alocada dinamicamente como o ID em execução. A principal função do ID em execução é identificar exclusivamente o nó redis. Por exemplo, o nó escravo salva o ID em execução do nó mestre para identificar qual nó mestre está replicando. Se apenas o método ip + port for usado para identificar o nó mestre, então o nó mestre reinicia e altera o conjunto de dados geral (como substituir o arquivo RDB / AOF), e não é seguro para o nó escravo copiar dados com base no deslocamento, portanto, quando o ID em execução muda Em seguida, o nó escravo fará a replicação completa. Você pode ver o ID de execução do nó atual no comando do servidor de informações.
Deve-se observar que quando o redis é fechado e reiniciado, o id de execução será alterado de acordo.
Cópia completa e cópia parcial, etc.
Cópia completa
Usado para replicação inicial ou outras situações em que a replicação parcial não pode ser executada, para enviar todos os dados do nó mestre para o nó escravo. Quando a quantidade de dados é muito grande, isso causa muita sobrecarga na rede.
redis2.8 + processo de cópia completa
Custo:
- bgsave tempo
- Transmissão de rede de arquivos RDB
- Hora de limpar os dados do nó
- Tempo de carga RDB do nó
- Possível tempo de reescrita AOF
Cópia parcial
Usado para lidar com cenários de perda de dados causados por falhas de rede na replicação mestre-escravo. Quando o nó escravo se conectar ao nó mestre novamente, se as condições permitirem, o nó mestre reenviará os dados perdidos para o nó escravo porque os dados reemitidos estão longe Menos do que a quantidade total de dados pode efetivamente evitar a sobrecarga excessiva da cópia completa. No entanto, deve-se observar que se o tempo de interrupção da rede for muito longo e o nó mestre não puder salvar completamente os comandos de gravação executados durante a interrupção, a replicação parcial não pode ser executada e a replicação completa ainda é usada.
Processo:
Deslocamento de cópia:
- Os nós mestre e escravo que participam da replicação manterão seu próprio deslocamento de replicação. Após o nó mestre processar a operação do comando de gravação, ele acumulará o comprimento de byte do comando. As informações estatísticas estão no indicador master_repl_offset na replicação de informações.
- O nó escravo relata seu deslocamento de replicação para o nó mestre a cada segundo, então o nó mestre também salvará o deslocamento de replicação do nó escravo escravo0: ip = 192.168.1.3, porta = 6379, estado = online, deslocamento = 116424, atraso = 0
- Depois que o nó escravo recebe o comando enviado pelo nó mestre, ele também acumula e registra seu próprio deslocamento. As estatísticas estão em slave_repl_offset na replicação de informações.
Copie o buffer de backlog:
- O buffer de backlog de cópia é uma fila de comprimento fixo armazenada no nó mestre, com um tamanho padrão de 1 MB. É criada quando o nó mestre tem um nó escravo conectado. Nesse momento, quando o nó mestre responder a um comando de gravação, ele não enviará o comando apenas para o nó escravo , E escrever no buffer de backlog de cópia.
Na fase de propagação do comando, além de enviar o comando de gravação para o nó escravo, o nó mestre também enviará uma cópia para o buffer de backlog de cópia como um backup do comando de gravação; além de armazenar o comando de gravação, o buffer de backlog de cópia também armazena cada um deles O deslocamento da cópia correspondente ao byte (deslocamento). Como o buffer de backlog de cópia tem um comprimento fixo e o primeiro a entrar, primeiro a sair, ele salva os comandos de gravação executados recentemente pelo nó mestre; os comandos de gravação mais antigos serão empurrados para fora do buffer.
Problemas comuns na produção
Separação de leitura e gravação
Shunt para o nó escravo. O nó mestre grava dados e o nó escravo lê os dados, pode encontrar problemas de leitura
- Atraso na replicação de dados
- Ler dados expirados
- Falha do nó escravo
Configuração mestre-escravo inconsistente
- Por exemplo, memória máxima inconsistente causará perda de dados
- Por exemplo, parâmetros de otimização de estrutura de dados (como entradas hash-max-ziplist): a memória é inconsistente
Evite a cópia completa
- Ao copiar totalmente pela primeira vez
- a primeira vez é inevitável, tente manter os nós tão pequenos quanto possível e lidar com o pico baixo - O ID de execução do nó não corresponde a
-failover, como sentinela ou cluster - Área de buffer de backlog de cópia insuficiente -
aumentar a configuração da área de buffer de cópia rel_backlog_size, aprimoramento de rede
Evite a tempestade de replicação
- Tempestade de replicação de máquina única (redis <4.0 Quando o mestre é desativado e reiniciado, fará com que todos os escravos sob a máquina se replicem ao mesmo tempo. Evite implantar um conjunto de redis mestre-escravo em uma única máquina) ====》 O nó mestre está espalhado por várias máquinas
Notas finais:
- Na implementação do processo acima, se a persistência de AOF não for ativada na biblioteca, se a persistência de AOF da biblioteca estiver ativada, a replicação completa ainda será usada ao reiniciar.
- Os dados copiados do mestre não serão perdidos, mas os dados gravados pelo mestre anterior (nó 6379 na figura acima) não serão mais sincronizados.
- O Slaveof pode ser usado para alterar o nó mestre a que pertence, ou seja, para se tornar escravo de outro mestre novamente, mas o novo mestre primeiro limpará todos os dados do nó escravo
- Com relação ao atraso de separação de leitura e gravação: Separação de leitura e gravação, o mestre irá copiar os dados para o escravo em uma etapa.Se o escravo for bloqueado, o comando de gravação dos dados do mestre será atrasado, causando inconsistência de dados. ------- Geralmente não considere este problema
- Ler dados expirados: o Redis tem duas estratégias ao excluir chaves. Uma é a estratégia preguiçosa, ou seja, a chave é excluída apenas quando o redis opera a chave, e a segunda é experimentar periodicamente a chave para excluir ------ --Quando há muitos dados chave, a velocidade de amostragem não é tão rápida quanto a velocidade de geração de chave, o que fará com que muitos dados desatualizados não sejam excluídos, porque o redis geralmente está no nó mestre (adicionando e excluindo dados) e o escravo não pode excluir os dados desatualizados, mesmo se for consultado. Fará com que o escravo leia os dados expirados (resolvido no redis3.2)
- Artigo master-slave recomendado do redis https://www.cnblogs.com/wdliu/p/9407179.html
- Recomendar redis cópia completa e artigos de cópia parcial https://blog.csdn.net/gaobinzhan/article/details/106536326
Blog pessoal: [ http://blog.yanxiaolong.cn/] ( Blog pessoal: http://blog.yanxiaolong.cn/
)
Link original: https://developer.aliyun.com/article/775627?
Declaração de direitos autorais: O conteúdo deste artigo é fornecido voluntariamente por usuários registrados em nome real do Alibaba Cloud. Os direitos autorais pertencem ao autor original. A comunidade de desenvolvedores do Alibaba Cloud não possui seus direitos autorais e não assume as responsabilidades legais correspondentes. Para regras específicas, consulte o "Contrato de Serviço de Usuário da Comunidade de Desenvolvedores de Nuvem Alibaba" e as "Diretrizes de Proteção de Propriedade Intelectual da Comunidade de Desenvolvedores de Nuvem Alibaba". Se você achar que há suspeita de plágio nesta comunidade, preencha o formulário de reclamação de violação para denunciá-lo. Depois de verificado, a comunidade excluirá imediatamente o conteúdo suspeito de violação.