Principe de réplication maître-esclave préliminaire de la haute disponibilité Redis

Principe de réplication maître-esclave préliminaire de la haute disponibilité Redis

(1) Qu'est-ce que la réplication maître-esclave

La réplication maître-esclave fait référence à la copie des données d'un serveur Redis vers d'autres serveurs Redis. Le premier s'appelle le maître et le second s'appelle l'esclave. La réplication des données est unidirectionnelle, uniquement du nœud maître vers le nœud esclave. Le nœud maître est responsable des opérations d'écriture et le nœud esclave est responsable des opérations de lecture. La réplication maître-esclave déploie plusieurs copies de données sur d'autres nœuds, assurant ainsi une haute disponibilité des redis, réalisant une sauvegarde redondante des données et garantissant une fiabilité élevée des données et des services.

Insérez la description de l'image ici

En termes simples, la fonction principale de la réplication maître-esclave est d'assurer la fiabilité des données. En cas d'arrêt du serveur en raison d'une panne de courant ou d'un endommagement du disque dur, la sauvegarde des données multi-nœuds de la réplication maître-esclave peut être très pratique et rapide pour la récupération de données. En plus d'assurer la fiabilité, la réplication maître-esclave a d'autres fonctions:

1. Redondance des données: la réplication maître-esclave réalise une sauvegarde à chaud des données, qui est une méthode de redondance des données en plus de la persistance.
2. Reprise en cas de panne: lorsque le nœud maître a un problème, le nœud esclave peut fournir des services pour obtenir une récupération rapide en cas de panne.
3. Équilibrage de charge: sur la base de la réplication maître-esclave, avec la séparation des lectures et des écritures, le nœud maître peut fournir des services d'écriture, et les nœuds esclaves fournissent des services de lecture pour partager la charge du serveur, en particulier dans le scénario de moins d'écritures et plus de lectures. Un nœud esclave partage la charge de lecture, ce qui peut considérablement augmenter la concurrence du serveur Redis.
4. La pierre angulaire de la haute disponibilité: la réplication maître-esclave est la base de la mise en œuvre des sentinelles et des clusters, la réplication maître-esclave est donc la base de la haute disponibilité Redis.

(2) Trois étapes de réplication maître-esclave

Le flux de travail complet de la réplication maître-esclave est divisé en trois étapes suivantes, chacune ayant son propre flux de travail interne, puis nous étudierons ces trois processus.

  1. Le processus d'établissement d'une connexion: le processus de connexion de l'esclave au maître
  2. Processus de synchronisation des données: processus de synchronisation des données du maître vers l'esclave
  3. Processus de propagation des commandes: le maître synchronise à plusieurs reprises les données avec l'esclave

Insérez la description de l'image ici

1. Établissement du processus de connexion

L'établissement d'une connexion est la première étape de la réplication maître-esclave. Parlez brièvement du flux de travail de la phase d'établissement de la connexion:

  1. L'esclave définit l'adresse et le port du maître et enregistre les informations du maître
  2. Établir une connexion socket
  3. Envoyer des commandes ping en continu
  4. Authentification
  5. Envoyer les informations de port esclave au maître

Evidemment, lors du processus d'établissement d'une connexion, le nœud esclave enregistre l'adresse et le port du maître, et le nœud maître maître enregistre le port du nœud esclave. Voici l'organigramme:

Insérez la description de l'image ici

2. Processus de synchronisation des données

Lorsque le nœud esclave se connecte au nœud maître pour la première fois, il effectuera d'abord une copie complète. Cette copie complète est inévitable, bien que la copie complète demande beaucoup de ressources. Une fois la copie complète exécutée, le nœud maître enverra les données du tampon de copie au nœud esclave, puis le nœud esclave exécutera la commande bgrewriteaof pour restaurer les données, qui est également une copie partielle. Voici l'organigramme:

Insérez la description de l'image ici

3. Phase de propagation des commandes

Lorsque la base de données maître est modifiée et que les données des serveurs maître et esclave sont incohérentes, les données maître et esclave seront synchronisées pour être cohérentes à ce moment. Ce processus est appelé propagation de commande. Le maître enverra la commande de changement de données reçue à l'esclave, et l'esclave exécutera la commande après avoir reçu la commande pour rendre les données maître-esclave cohérentes.

(3) Copie intégrale et copie partielle

Parlons de la copie complète et de la copie partielle en détail ci-dessous:

Insérez la description de l'image ici

  1. Le nœud esclave envoie la commande psync? 1 psync runid offset pour trouver le nœud du runid correspondant pour demander des données, mais il y a un problème ici. Lorsque le nœud esclave se connecte pour la première fois, le runid et l'offset du nœud maître ne sont pas du tout connus. Donc, la première commande envoyée est psync? 1. Cela signifie que toutes les données du nœud maître doivent être synchronisées.
  2. Le nœud maître commence à exécuter bgsave pour générer un fichier RDB et enregistre le décalage de décalage de copie actuel.
  3. Le nœud maître envoie son runid et son offset au nœud esclave via la commande + FULLRESYNC runid offset, puis envoie le fichier RDB via le socket au nœud esclave. Dans cette étape, le nœud maître peut recevoir des instructions du client et le décalage a changé.
  4. Le nœud esclave reçoit le runid et l'offset du nœud maître et les enregistre, puis efface toutes les données actuelles de la base de données, reçoit le fichier RDB via le socket et commence à restaurer les données RDB (copie complète).
  5. Après la réplication complète, le nœud esclave a obtenu le runid et l'offset du nœud maître, et commence à envoyer la commande psync runid offset.
  6. Le nœud maître reçoit la commande, juge si le runid correspond et juge si le décalage se trouve dans le tampon de copie.
  7. Le nœud maître évalue le runid et le décalage, et si l'un d'entre eux n'est pas satisfait, il retournera à l'étape 2 pour continuer à effectuer la réplication complète. La raison de la discordance runid ici peut être un redémarrage inattendu du nœud esclave, et la non-concordance de décalage (offset) est causée par le débordement de la mémoire tampon de copie. Si le contrôle runid ou offset est réussi, si l'offset du nœud esclave est le même que l'offset du nœud maître, il sera ignoré. Si l'offset du nœud esclave n'est pas le même que l'offset du nœud maître, le nœud maître enverra + CONTINUE offset (cet offset du nœud maître ) Commande pour envoyer les opérations du décalage du nœud au décalage du nœud maître dans le tampon de copie via le socket (en fait, le nœud esclave effectue moins d'opérations que le nœud maître).
  8. Une fois que le nœud esclave reçoit le décalage envoyé par le nœud maître et reçoit les informations via le socket, il exécute bgrewriteaof pour restaurer les données.

De toute évidence, nous avons constaté que la copie partielle est beaucoup plus compliquée que la copie complète, alors jetons un coup d'œil à quelques détails de la copie partielle:

1. Runid

Ce runid est mentionné plusieurs fois ci-dessus. En fait, le runid est un identifiant aléatoire que redis générera automatiquement au démarrage (il faut noter ici que l'identifiant sera différent à chaque démarrage), qui est composé de 40 hexadécimaux aléatoires Il est composé d'une chaîne système pour identifier de manière unique un nœud redis.

Lorsque la réplication maître-esclave est lancée pour la première fois, le maître enverra son runid à l'esclave, et l'esclave enregistrera l'identifiant du maître. Lorsque l'esclave est déconnecté et reconnecté, l'esclave envoie cet identifiant au maître. Si le runid enregistré par l'esclave est le même que le runid actuel du maître, le maître essaiera d'utiliser la réplication partielle (l'autre facteur pour une réplication réussie est le décalage, comme mentionné ci-dessus) . Si le runid enregistré par l'esclave est différent du runid actuel du maître, la copie complète sera effectuée directement.

2. Copier le tampon

Le tampon de copie est une file d'attente du premier entré, premier sorti utilisée pour stocker les enregistrements de commande du maître pour collecter des données. L'espace de stockage par défaut du tampon de copie est de 1 Mo. Vous pouvez modifier la taille de repl-backlog-size de 1 Mo dans le fichier de configuration pour contrôler la taille de la mémoire tampon.

Insérez la description de l'image ici

En fait, le tampon de copie est les données persistantes AOF stockées (parmi les enregistrements persistants la commande émise par le client), et est séparé par des octets, et chaque octet a son propre offset, cet offset Le montant correspond au décalage de copie mentionné précédemment (décalage).

Comme nous l'avons mentionné précédemment, si l'espace du tampon de copie est insuffisant, cela peut conduire à une copie complète. Quelle est la raison? Dans la phase de propagation des commandes, le nœud maître stockera les commandes collectées dans le tampon de copie, puis les enverra au nœud esclave. C'est là que le problème se pose. Lorsque le nombre de commandes reçues par le nœud maître du client est extrêmement élevé en un instant et que la mémoire du tampon de copie est dépassée, certaines données seront évincées, ce qui entraînera des commandes du nœud maître et du nœud esclave Copie incohérente, donc complète. Si la taille de la mémoire tampon est définie de manière déraisonnable, il est très probable qu'elle provoquera une boucle infinie et le nœud esclave copiera toujours entièrement, videra les données et copiera entièrement.

3. Copiez le décalage

Le décalage de copie du nœud maître consiste à envoyer un enregistrement une fois au nœud esclave, et le nœud esclave reçoit un enregistrement une fois. Utilisé pour synchroniser les informations, comparer la différence entre le nœud maître et le nœud esclave et restaurer l'utilisation des données lorsque l'esclave est déconnecté. Cette valeur provient également du décalage dans la zone de backlog du tampon de copie.

Insérez la description de l'image ici

(4) Mécanisme de battement de coeur

Nous pouvons penser à un problème. Dans le processus de réplication maître-esclave, nous devons savoir si le nœud maître et le nœud esclave sont en ligne et fonctionnent normalement. Si un certain nœud a une latence élevée ou aucune réponse, des mesures correspondantes doivent être prises, telles que Arrêtez la réplication maître-esclave, etc., comment chaque nœud sait-il si d'autres nœuds sont en ligne?

Dans la phase de propagation de commande, le nœud maître et le nœud esclave ont toujours besoin d'échanger des informations. Cet échange d'informations utilise un mécanisme de pulsation pour la maintenance afin de réaliser une connaissance mutuelle de la connexion entre le nœud maître et le nœud esclave. Jetons un coup d'œil au rôle du battement de cœur du nœud maître et du battement de cœur du nœud esclave:

1. battement de cœur maître

Instruction: Le ping est
effectué toutes les 10 secondes par défaut. Il est déterminé par le paramètre repl-ping-slave-period. Il est
principalement chargé de déterminer si le nœud esclave est en ligne.
Vous pouvez utiliser la réplication d'informations pour afficher l'intervalle d'un temps de connexion après la location du nœud esclave. Si le retard est de 0 ou 1, il est état normal.

2. rythme cardiaque de l'esclave

Commande: replconf ack {offset}
est exécuté une fois par seconde. La
principale chose à faire est d'envoyer son propre offset de réplication au nœud maître, d'obtenir la dernière commande de changement de données du nœud maître et de déterminer si le nœud maître est en ligne.

Remarque: pour garantir la stabilité des données, le nœud maître refusera de synchroniser toutes les informations lorsque le nombre de nœuds esclaves bloqués dépasse une valeur définie ou que le délai est trop élevé. Deux paramètres peuvent être configurés et ajustés:

  • min-esclaves-à-écrire 2
  • min-esclaves-max-lag 8

Ces deux paramètres indiquent qu'il ne reste que 2 nœuds esclaves, ou lorsque le retard du nœud esclave est supérieur à 8 secondes, le nœud maître fermera de force la fonction maste et arrêtera la synchronisation des données. Alors, comment le nœud maître connaît-il le nombre de nœuds esclaves et le temps de retard? Comme mentionné ci-dessus, dans le mécanisme de pulsation, l'esclave envoie la commande perlconf ack toutes les secondes Cette commande peut porter le décalage, le temps de retard du nœud esclave et le nombre de nœuds esclaves.

15 septembre 2020

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43907422/article/details/105835347
conseillé
Classement