Redis
 sql >> Base de données >  >> NoSQL >> Redis

Cluster Redis/équilibrage de charge

Tout d'abord vous pouvez changer la configuration par défaut si vous travaillez peu dans

redis-trib.rb

dans la fonction def check_create_parameters . Vous pouvez définir une réplique maître et une réplique esclave.

Le but de cette configuration est la tolérance aux pannes. Les esclaves peuvent également être utilisés en lecture (READONLY). Dans les trois maîtres, les hashslots sont également répartis et avec un algorithme d'équilibrage de charge, vous pouvez redistribuer et les clés réelles. Les étapes d'un algorithme possible qui distribue les clés entre les nœuds sont (testé par moi et cela fonctionne comme prévu) :

  1. Trouvez la foule des maîtres
  2. Obtenir le nombre total de clés qu'ils détiennent
  3. Pour chaque nœud maître, stockez le nom d'hôte, le port et le nombre de clés
  4. Calculer les clés que chaque maître doit détenir pour que la répartition des clés soit équilibrée (total des clés du cluster / nombre de maîtres)
  5. Trouvez quels nœuds maîtres doivent prendre ou donner des clés et le nombre total de clés qu'ils doivent donner/prendre
  6. Caractériser les maîtres en tant que nœuds source ou cible selon qu'ils reçoivent ou donnent respectivement des clés
  7. Commencez la migration du nœud source vers les nœuds cibles, d'abord les emplacements de hachage, puis les clés pertinentes et itérez jusqu'à ce que tous les maîtres aient le même nombre de clés

Cet algorithme aidera à minimiser le temps de réponse. Ce que je veux dire :

Avec trois maîtres, le temps de réponse peut être minimisé. Si vous avez une configuration avec un maître et que ce maître contient par exemple 30000 #clés, le temps de réponse pour obtenir 1000clés à la fois est> d'une configuration avec 2 maîtres qui en contiennent 15000 chacun.

Si vous créez une clé dans master1, alors si vous essayez d'atteindre (lire) cette clé à partir de master2, vous obtiendrez une erreur MOVED. Ainsi, la solution consiste à créer un client intelligent qui mappe les hashslots au nœud correspondant. Ainsi, vous pouvez supprimer la clé de master2 uniquement dans le cas où master2 redirige votre demande vers le bon master.

J'espère que ça aide.