Maison  >  Article  >  base de données  >  Comment regrouper Redis

Comment regrouper Redis

(*-*)浩
(*-*)浩original
2019-06-12 17:06:533805parcourir

Redis Sharding Cluster

Redis Sharding est une technologie de Sharding côté client.

Comment regrouper Redis

Redis Sharding peut être considéré comme une méthode de clustering multi-instances Redis couramment utilisée dans l'industrie avant la sortie de Redis Cluster. L'idée principale est d'utiliser un algorithme de hachage pour hacher la clé des données Redis. Grâce à la fonction de hachage, une clé spécifique sera mappée à un nœud Redis spécifique. (Apprentissage recommandé : Tutoriel vidéo Redis)

De cette façon, le client sait sur quel nœud Redis exploiter les données. Il est à noter que celui-ci se trouve sur le. côté client Terminé.

Le client java redis jedis prend déjà en charge la fonction Redis Sharding, à savoir ShardedJedis et ShardedJedisPool combinés avec un pool de cache. L'implémentation Redis Sharding de Jedis présente les caractéristiques suivantes :

1. Utiliser un algorithme de hachage cohérent (hachage cohérent)

Hashez la clé et le nom du nœud en même temps, et puis Mapping matching, l'algorithme utilisé est MURMUR_HASH. La principale raison d'un hachage cohérent est que lors de l'ajout ou de la soustraction de nœuds, il n'y aura pas de rehachage causé par la nouvelle correspondance. Un hachage cohérent n'affecte que l'allocation de clé des nœuds adjacents et l'impact est faible. Pour plus d'informations sur les algorithmes de hachage cohérents, veuillez vous référer à : http://blog.csdn.net/cywosp/article/details/23397179/

Nœud virtuel

<.>ShardedJedis virtualisera chaque nœud Redis en 160 nœuds virtuels pour le hachage en fonction de son nom. En utilisant des nœuds virtuels pour le mappage et la correspondance, lors de l'ajout ou de la réduction de nœuds Redis, les clés peuvent être déplacées plus uniformément entre les nœuds Redis, au lieu que seuls les nœuds adjacents soient affectés. Comme le montre la figure, le nœud Redis 1 est virtualisé en NODE1-1 et NODE1-2, qui se trouvent dans l'anneau de hachage. De cette façon, lorsque object1 et object2 sont hachés, les nœuds les plus proches NODE1-1 et NODE1-2 sont sélectionnés, et NODE1-1 et NODE1-2 sont des nœuds virtuels du nœud NODE, c'est-à-dire qu'ils sont en fait stockés sur le NODE. nœud.

L'ajout de nœuds virtuels peut garantir l'équilibre, c'est-à-dire que chaque machine Redis stocke des données similaires, au lieu qu'une machine stocke plus de données et d'autres moins.

3. ShardedJedis prend en charge le mode keyTagPattern

Extrayez une partie du keyTag pour le partitionnement, de sorte qu'en nommant la clé de manière raisonnable, un groupe de clés associées puisse être placé dans le mêmes nœuds Redis pour éviter l’accès entre nœuds. Autrement dit, le client spécifie et stocke les valeurs clés des mêmes règles sur le même nœud Redis.

Lors de l'ajout ou de la soustraction de nœuds ?

Redis Sharding adopte la méthode client Sharding, et le Redis côté serveur est toujours un nœud d'instance Redis relativement indépendant. Dans le même temps, nous n'avons pas besoin d'ajouter de composants de traitement intermédiaires supplémentaires. Il s'agit d'une solution de cluster multi-instance Redis très légère et flexible.

Bien entendu, cette approche légère et flexible doit compromettre les autres capacités du cluster. Par exemple, lors d'une mise à l'échelle, lorsque vous souhaitez ajouter des nœuds Redis, même si un hachage cohérent est utilisé, différentes clés seront distribuées aux différents nœuds Redis.

Lorsque nous avons besoin de nous développer, ajoutez des machines à la liste des fragments. À ce moment-là, le client calcule en fonction de la clé et atterrit sur une machine différente de celle d'origine. De cette façon, si une certaine valeur doit être obtenue, elle risque de ne pas l'être.

Dans cette situation, l'approche générale consiste à recharger les données directement à partir de la base de données principale une fois qu'elles ne peuvent pas être récupérées. Cependant, parfois, percer la couche de cache et accéder directement à la couche de base de données causera de gros dommages. à l'accès au système.

L'auteur de Redis a donné une voie - le pré-sharding.

est une méthode d'extension en ligne. Le principe est d'exécuter plusieurs instances Redis avec des ports différents sur chaque machine physique. Par exemple, s'il y a trois machines physiques, chaque machine physique exécutera trois instances Redis. , alors il y a en fait 9 instances Redis dans notre liste de partitionnement. Lorsque nous devons augmenter la capacité, ajoutez une machine physique :

1. Exécutez le serveur Redis sur la nouvelle machine physique. 🎜>

2. Le serveur Redis appartient à un certain serveur Redis (supposons qu'il s'appelle RedisA) dans la liste de fragments.

3. Une fois la réplication maître-esclave (réplication) terminée, remplacez l'adresse IP et le port de RedisA dans la liste des fragments client par l'adresse IP et le port de Redis-Server sur la nouvelle machine physique.

4. Arrêtez RedisA

Cela équivaut à transférer un certain Redis-Server vers une nouvelle machine. Cependant, il dépend toujours fortement de la fonction de réplication de Redis lui-même. Si le fichier de données d'instantané de la base de données principale est trop volumineux, le processus de réplication prendra beaucoup de temps et exercera également une pression sur le Redis principal. Il est donc préférable de choisir. une méthode d'accès à faible activité pour ce processus fractionné effectué pendant les heures de pointe.

Lorsqu'un nœud tombe en panne

Ce n'est pas seulement l'ajout ou la suppression de nœuds Redis qui entraîne une perte de valeur clé. Le plus gros obstacle vient du temps d'arrêt soudain de Redis. nœud.

Afin de ne pas affecter les performances de Redis, essayez de ne pas activer les fonctions de sauvegarde des fichiers AOF et RDB. Par conséquent, il est nécessaire de créer un mode actif et veille de Redis. Si le Redis actif est en panne, le. Redis en veille aura une sauvegarde et les données ne seront pas perdues.

Le partage a évolué comme suit :

De cette façon, notre modèle architectural devient une tranche de nœud Redis contenant un Redis principal et un Redis de secours forment ensemble un nœud Redis via un basculement automatique. . , garantissant la haute disponibilité des nœuds.

Redis Sentinel

fournit des fonctions telles que la surveillance Redis et le basculement en modes actif et de sauvegarde pour atteindre une haute disponibilité du système.

Séparation de la lecture et de l'écriture

Dans des temps d'accès élevés, même si Sharding est utilisé, un seul nœud supporte encore beaucoup de pression d'accès. À l'heure actuelle, nous devons aller plus loin. décompose-le.

Normalement, la lecture est souvent plusieurs fois plus rapide que l'écriture. Dans ce cas, on peut séparer la lecture et l'écriture, et la lecture fournit plus d'instances. Le mode maître-esclave est utilisé pour réaliser la séparation de la lecture et de l'écriture. Le maître est responsable de l'écriture et l'esclave est responsable de la lecture uniquement. En même temps, un maître peut connecter plusieurs esclaves. Sous la surveillance Redis Sentinel, la surveillance automatique des pannes de nœuds peut également être assurée.

Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Introduction au didacticiel d'utilisation de la base de données Redis pour apprendre !

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