Maison  >  Article  >  base de données  >  Savez-vous comment assurer une concurrence élevée de Redis ?

Savez-vous comment assurer une concurrence élevée de Redis ?

藏色散人
藏色散人avant
2020-11-10 14:52:252489parcourir

Ci-dessous, la colonne Tutoriel Redis vous présentera comment assurer une simultanéité élevée de Redis. J'espère que cela sera utile aux amis dans le besoin !

Il est presque impossible pour un redis autonome d'avoir un QPS de plus de 100 000+, généralement des dizaines de milliers .

Sauf circonstances particulières, telles que les performances de votre machine sont particulièrement bonnes, la configuration est particulièrement élevée, la machine physique est bien entretenue et le fonctionnement global de votre machine n'est pas trop compliqué.

Redis réalise la séparation lecture-écriture via l'architecture maître-esclave. Le nœud maître est responsable de l'écriture et de la synchronisation des données. vers d'autres nœuds esclaves, le nœud esclave est responsable de la lecture, atteignant ainsi une concurrence élevée.

Bien que Redis ait une concurrence élevée, il doit également accueillir une grande quantité de données : un maître et plusieurs esclaves, et chaque instance peut accueillir des données complètes par exemple. , le maître redis Avec 10 Go de mémoire, vous ne pouvez en réalité conserver que 10 Go de données. Si votre cache doit accueillir une grande quantité de données, atteignant des dizaines de gigaoctets, voire des centaines de gigaoctets, ou plusieurs tonnes, alors vous avez besoin d'un cluster Redis, et avec le cluster Redis, vous pouvez fournir des centaines de milliers de données par seconde. Lire et écrire simultanément.

Le mécanisme de base de la réplication

Redis copie les données sur le nœud esclave de manière asynchrone. Cependant, à partir de Redis 2.8, le nœud esclave confirmera périodiquement la quantité de données qu'il copie à chaque fois
Un nœud maître peut être configuré avec plusieurs nœuds esclaves
esclave nœud Vous pouvez également vous connecter à d'autres nœuds esclaves
Lorsque le nœud esclave se réplique, il ne bloquera pas le travail normal du nœud maître
Lorsque le nœud esclave est en répliquant, il ne bloquera pas ses propres opérations de requête. Il utilisera l'ancien ensemble de données pour fournir des services ; mais une fois la copie terminée, l'ancien ensemble de données devra être supprimé et le nouvel ensemble de données chargé. sera suspendu
Le nœud esclave est principalement utilisé pour l'expansion horizontale et la séparation de la lecture et de l'écriture. Le nœud esclave étendu peut améliorer le débit de lecture

<.>

L'importance de la persistance maître pour la sécurité de l'architecture maître-esclave

Si une architecture maître-esclave est adoptée, il est recommandé que la persistance de le nœud maître doit être activé !

Il n'est pas recommandé d'utiliser le nœud esclave comme sauvegarde à chaud des données du nœud maître, car dans ce cas, si vous désactivez la persistance du maître, les données peuvent être vide lorsque le maître plante et redémarre, puis les données du nœud salve peuvent être perdues dès qu'elles sont copiées

Deuxièmement, devriez-vous effectuer divers plans de sauvegarde pour le maître, au cas où tous les fichiers locaux sont perdus ; Sélectionnez un rdb dans la sauvegarde pour restaurer le maître ; cela garantira qu'il y a des données au démarrage du maître

Le processus de synchronisation des données du maître vers l'esclave

Lorsqu'un nœud esclave est démarré, il enverra une commande PSYNC au nœud maître

S'il s'agit du nœud esclave qui se reconnecte au nœud maître, alors le nœud maître copiera uniquement les données manquantes sur l'esclave, sinon, si le nœud esclave se connecte au nœud maître pour la première fois ; À ce moment-là, une resynchronisation complète sera déclenchée

Lors du démarrage de la resynchronisation complète, le maître démarrera un thread d'arrière-plan et commencera à générer un fichier instantané RDB en même temps, toutes les commandes d'écriture reçues de. le client sera mis en cache en mémoire.

Une fois le fichier RDB généré, le maître enverra le RDB à l'esclave. L'esclave l'écrira d'abord sur le disque local, puis le chargera depuis le disque local dans la mémoire. . Ensuite, le maître enverra les commandes d'écriture mises en cache dans la mémoire à l'esclave, et l'esclave synchronisera également les données.

Si le nœud esclave a une panne de réseau avec le nœud maître et est déconnecté, il se reconnectera automatiquement. Si le maître constate que plusieurs nœuds esclaves se reconnectent, il lancera uniquement une opération de sauvegarde rdb et utilisera une copie des données pour servir tous les nœuds esclaves.

Reprendre le point d'arrêt de la réplication maître-esclave

À partir de Redis 2.8, la reprise du point d'arrêt de la réplication maître-esclave est prise en charge. Si la connexion réseau est déconnectée pendant le processus de réplication maître-esclave, vous pouvez continuer la copie à partir de l'endroit où vous avez copié pour la dernière fois, au lieu de faire une copie. à partir de zéro

Le nœud maître aura un backlog dans la mémoire. Le maître et l'esclave enregistreront un décalage de réplique et un identifiant de maître. Le décalage est enregistré dans le backlog.

Si la connexion réseau entre le maître et l'esclave est déconnectée, l'esclave laissera le maître continuer la réplication à partir du décalage de la dernière réplique

Mais sinon Lorsque le décalage correspondant sera trouvé, une resynchronisation sera effectuée

copie sans disque

Le maître est directement dans la mémoire Créez rdb puis envoyez-le à l'esclave Le disque ne sera pas débarqué localement

 repl-diskless-sync
 repl-diskless. -sync-delay, Attendez un certain temps avant de démarrer la réplication, car vous devez attendre que d'autres esclaves se reconnectent

Traitement des clés expirées

esclave La clé n'expirera pas, mais attendra seulement que le maître expire la clé.

Si le maître fait expirer une clé ou élimine une clé via LRU, une commande del sera simulée et envoyée à l'esclave.

Processus de copie complet

Le nœud esclave démarre et enregistre uniquement les informations du nœud maître , y compris l'hôte et l'adresse IP du nœud maître (configuré par slaveof dans redis.conf), mais le processus de réplication n'a pas démarré

Il y a une tâche planifiée à l'intérieur du nœud esclave pour vérifier s'il y a de nouvelles données chaque seconde. Le nœud maître doit se connecter et se répliquer. S'il est trouvé, établissez une connexion réseau socket avec le nœud maître
Le nœud esclave envoie une commande ping au nœud maître
Authentification par mot de passe, si le maître Si requirepass est défini, le nœud esclave doit envoyer le mot de passe masterauth pour l'authentification
Le nœud maître effectue une réplication complète pour la première fois et envoie tout données au nœud esclave
maître Le nœud continuera à écrire des commandes et à les copier de manière asynchrone sur le nœud esclave

Le noyau le mécanisme lié à la synchronisation des données

fait référence à Autrement dit, lorsque l'esclave se connecte à msater pour la première fois, la copie complète est effectuée dans ce processus, certains de vos mécanismes détaillés

(1) Le maître et l'esclave maintiendront un décalage

Le maître accumulera continuellement des décalages sur lui-même, et l'esclave accumulera également continuellement des décalages sur lui-même.

L'esclave rapportera son propre décalage au maître toutes les secondes, et le maître enregistrera également chaque décalage Le décalage de chaque esclave
Cela ne signifie pas qu'il est spécifiquement utilisé pour la réplication complète. La raison principale est que le maître et l'esclave doivent connaître le décalage de leurs propres données pour savoir que les données entre eux sont incohérentes. 🎜>

(2) backlog

Le nœud maître a un backlog, la taille par défaut est de 1 Mo

master Lorsqu'un nœud copie données sur le nœud esclave, il écrira également une copie des données de manière synchrone dans le backlog

Le backlog est principalement utilisé pour la copie incrémentielle lorsque la réplication complète est interrompue

(3) identifiant d'exécution maître

Serveur d'informations, vous pouvez voir l'identifiant d'exécution maître

Si vous localisez le nœud maître en fonction de l'hôte + ip, ce n'est pas fiable. Si le nœud maître redémarre ou si les données changent, le nœud esclave doit être distingué en fonction de différents identifiants d'exécution. Si les identifiants d'exécution sont différents, faites une copie complète

Si vous le faites. besoin de redémarrer sans changer l'identifiant d'exécution redis, vous pouvez utiliser la commande redis-cli debug reload

(4) psync

L'esclave Le nœud utilise psync pour copier à partir du nœud maître, psync runid offset

Le nœud maître renverra les informations de réponse en fonction de sa propre situation. Il peut s'agir du décalage FULLRESYNC runid déclenchant une copie complète ou de CONTINUE déclenchant une copie incrémentielle.


Copie intégrale

Le maître exécute bgsave et génère un fichier instantané rdb localement
Le nœud maître envoie le fichier instantané rdb au nœud salve si le temps de copie rdb dépasse 60 secondes (repl-. timeout), alors le nœud esclave pensera que la copie a échoué, et vous pourrez ajuster ce paramètre de manière appropriée
Pour les machines équipées de cartes réseau Gigabit, généralement 100 Mo, 6 Go de fichiers sont transférés par seconde, ce qui est probable pour dépasser 60s
Lorsque le nœud maître génère rdb, il mettra en cache toutes les nouvelles commandes d'écriture en mémoire. Une fois que le nœud salve aura enregistré le rdb, il copiera les nouvelles commandes d'écriture sur le nœud salve
client-output-buffer-limit esclave 256 Mo 64 Mo 60. Si pendant la réplication, la mémoire tampon continue de consommer plus de 64 Mo, ou dépasse 256 Mo à la fois, alors la réplication s'arrête et la réplication échoue
Le nœud esclave reçoit Après rdb, efface ses propres anciennes données, puis recharge rdb dans sa propre mémoire, et en même temps fournit des services externes basés sur l'ancienne version des données
Si le nœud esclave active AOF, alors BGREWRITEAOF sera exécuté immédiatement. Réécriture AOF

Copie incrémentielle.

Si la copie complète est en cours, maître- Si la connexion réseau de l'esclave est déconnectée, alors lorsque l'esclave se reconnectera au maître, une réplication incrémentielle sera déclenchée
Le maître obtient directement une partie des données perdues de son propre backlog et l'envoie au nœud esclave. Le backlog par défaut est de 1 Mo
msater obtient les données du backlog en fonction du décalage dans psync envoyé par l'esclave

battement de coeur

Les nœuds maître et esclave s'enverront des informations de battement de coeur

Par défaut, le maître envoie un battement de cœur toutes les 10 secondes et le nœud salve envoie un battement de cœur toutes les 1 seconde

Réplication asynchrone

Chaque fois que le maître reçoit une commande d'écriture, il écrit désormais les données en interne puis les envoie de manière asynchrone au nœud esclave

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer