Maison  >  Article  >  base de données  >  Principe de synchronisation maître-esclave Redis

Principe de synchronisation maître-esclave Redis

hzc
hzcoriginal
2020-06-22 13:22:525874parcourir

Principe de synchronisation maître-esclave Redis

1. Préface

Afin d'assurer la haute disponibilité de redis, un mode cluster est généralement construit, qui est le mode maître-esclave.

Le mode maître-esclave peut assurer la haute disponibilité de redis, alors comment redis assure-t-il la cohérence des données du serveur maître-esclave ? Parlons ensuite brièvement du principe de redis maître (maître) et esclave ? synchronisation (esclave).

2. Première synchronisation complète

Lorsqu'un serveur redis envoie la commande salveof au serveur maître pour la première fois, le serveur redis esclave effectuera une synchronisation complète, les étapes de synchronisation sont indiquées dans la figure ci-dessous :

Principe de synchronisation maître-esclave Redis

  • Le serveur esclave envoie la commande psync au maître (la commande psync envoyée à ce moment est psync? -1 ), dites au maître que je dois synchroniser les données.
  • Après avoir reçu la commande psync, le maître exécutera la commande BGSAVE pour générer un instantané du fichier RDB.
  • Une fois la génération terminée, le fichier RDB sera envoyé à l'esclave.
  • Lorsque l'esclave reçoit le fichier, il chargera l'instantané RDB et modifiera l'état de la base de données pour qu'il soit cohérent avec l'état du maître lors de l'exécution de BGSAVE.
  • Le maître enverra toutes les commandes d'écriture enregistrées dans le tampon pour indiquer à l'esclave que la synchronisation peut être effectuée
  • L'esclave exécute ces commandes d'écriture .

3. Propagation des commandes

L'esclave s'est déjà synchronisé avec le maître, alors si le suivant maître Pour une opération d'écriture, telle qu'un simple nom de jeu redis, une fois que le maître a exécuté la commande actuelle, il enverra la commande actuelle à l'esclave pour exécution afin d'assurer la cohérence des données.

4. Recopie

Lorsque l'esclave est déconnecté et reconnecté, il sera resynchronisé. La resynchronisation est divisée en synchronisation complète et partielle. synchronisation

Tout d'abord, jetons un coup d'œil à la tendance générale de la synchronisation partielle

Principe de synchronisation maître-esclave Redis

  • Lorsque l'esclave se déconnecte et se reconnecte , il enverra la commande psync au maître.
  • Après avoir reçu psync, le maître renverra une réponse +continue, indiquant que l'esclave peut effectuer une synchronisation partielle.
  • le maître envoie la commande d'écriture après la déconnexion à l'esclave
  • l'esclave exécute la commande d'écriture.

En fait, après que l'esclave ait envoyé la commande psync au maître, le maître doit encore juger s'il doit effectuer une synchronisation partielle en fonction des trois points suivants.

Présentons d'abord les trois aspects :

  • ID d'exécution du serveur

Chaque après un redis Le serveur est démarré, un ID en cours d'exécution sera généré.

Lors de la synchronisation initiale, le maître indiquera à l'esclave son identifiant, et l'esclave l'enregistrera lorsque l'esclave se déconnectera et se reconnectera, il tentera d'effectuer la synchronisation s'il le souhaite. constate que l'ID appartient à ce maître. Resynchronisation partielle. Une resynchronisation complète sera effectuée lorsque l'ID est différent de celui du maître actuellement connecté.

  • Décalage de réplication

Le décalage de réplication inclut le décalage de réplication maître Lorsque le décalage de réplication du deux bases de données sont identiques après la synchronisation initiale, puis le maître exécute une commande d'écriture, puis le décalage du maître est +1, le maître écrira la commande sur l'esclave, l'esclave l'exécutera une fois et le décalage de l'esclave Shift +1 donc les versions sont cohérentes.

  • Tampon du backlog de réplication

Le tampon du backlog de réplication est corrigé et maintenu par le maître Une file d'attente de longueur premier entré, premier sorti.

Lorsque l'esclave envoie pync, il enverra également son propre offset au maître. Lorsque les données après l'offset de l'esclave existent toujours dans le tampon, une notification +continue sera renvoyée. L'esclave effectue une resynchronisation partielle.

Lorsque les données après le décalage esclave ne sont plus dans le tampon, une resynchronisation complète sera effectuée.

En combinant les trois points ci-dessus, nous pouvons résumer :

  • Lorsque l'esclave est déconnecté et reconnecté, il enverra la commande psync au maître.
  • Le maître jugera d'abord l'identifiant en cours d'exécution du serveur S'il est le même que le sien, il jugera le décalage
  • Le maître. jugera de son propre biais. Si le montant du décalage est cohérent avec le décalage de l'esclave.
  • S'il est incohérent, le maître ira dans le tampon pour déterminer si les données après le décalage de l'esclave existent.
  • S'il existe, une réponse +continue sera renvoyée, indiquant que l'esclave peut effectuer une synchronisation partielle.
  • le maître envoie la commande d'écriture après la déconnexion à l'esclave
  • l'esclave exécute la commande d'écriture.

5. Le processus final de synchronisation maître-esclave

Principe de synchronisation maître-esclave Redis

6. Conclusion

Récemment, selon les besoins de l'entreprise, j'ai construit un cluster maître-esclave Redis et utilisé des sentinelles pour surveiller et implémenter le maître-esclave. commutation esclave. Par conséquent, j'ai réglé le principe maître-esclave de Redis basé sur « Conception et mise en œuvre de Redis » pour approfondir mon impression.

Tutoriel recommandé : "tutoriel redis"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn