web-dev-qa-db-fra.com

Cluster Redis: 3 nœuds maîtres minimum?

J'évalue les capacités de cluster de Redis 3 (j'utilise Redis 2 autonome pour le moment), donc je lis les informations sur http://redis.io/topics/cluster-tutorial .

Dans ce document, j'ai lu une information très importante:

Notez que le cluster minimal qui fonctionne comme prévu requiert de contenir au moins trois nœuds maîtres. Pour vos premiers tests, il est fortement suggéré de démarrer un cluster à six nœuds avec trois maîtres et trois esclaves.

Est-ce vraiment vrai? Dans mon esprit, c'est correct si j'utilise des capacités de partage (les données sont partagées entre les nœuds), mais que se passe-t-il si je n'en ai pas besoin et que je serais heureux d'avoir des données sur un seul nœud?

J'ai essentiellement besoin d'un maître et de deux esclaves (pour que le cluster soit actif si un nœud tombe en panne), puis-je avoir cette configuration dans un environnement de production? Si oui, quelles sont les contre-indications?

Merci beaucoup pour votre aide!

9
Mat

Est-ce vraiment vrai?

Oui, c'est pourquoi c'est dans la documentation :)

Dans mon esprit, c'est correct si j'utilise des capacités de partage (les données sont partagées entre les nœuds), mais que se passe-t-il si je n'en ai pas besoin et que je serais heureux d'avoir des données sur un seul nœud?

L'utilisation de Redis en mode cluster signifie un partage. Si vous êtes satisfait d'une seule instance, n'utilisez simplement pas le cluster. Sinon, reportez-vous à la spécification de cluster elle-même pour mieux comprendre les hypothèses sous-jacentes. Plus précisément, dans le cas d'une configuration de cluster minimale, vous aurez besoin de 3 maîtres pour assurer la disponibilité du cluster en cas de partition, sinon vous ne pourrez pas vous mettre d'accord sur la majorité.

5
Itamar Haber

Si vous comptez sur Redis pour basculer, vous avez besoin d'un minimum de trois nœuds maîtres et de trois nœuds esclaves (un minimum de 3 serveurs, chacun exécutant un maître et un esclave).

Si vous utilisez un logiciel de cluster externe, par exemple Heartbeat, vous pouvez configurer deux nœuds, l'un étant maître et l'autre esclave en mode cluster, allouer tous les 16384 emplacements au maître et utiliser des scripts de basculement pour "CLUSTER FAILOVER TAKEOVER" lorsque le maître est VERS LE BAS. Bien sûr, vous pouvez également configurer une IP de service pour le basculement avec redis. Cette disposition supplémentaire vous permet également d'utiliser le client redis non cluster.

La production tourne pendant un an et échoue plusieurs fois (redémarrage de la machine pour la mise à jour du noyau) et jusqu'à présent aucun problème n'a été signalé par l'équipe d'exploitation.

4
Ken Cheung

Je sais que cette question est ancienne, mais si quelqu'un a besoin d'une configuration similaire, vous pouvez utiliser la configuration Master-Slaves à la place de Cluster. Vous avez besoin:

  • 2 serveur Redis au moins
  • 3 Redis Sentinel pour surveiller la santé et éviter le Split-Brain
  • Un moyen de vérifier qui est le maître (j'utilise HAProxy sur le serveur client avec quelques commandes de vérification)

Si vous pouvez le rendre suffisamment intelligent, vous pouvez simplement écrire sur master et lire à partir de tous les nœuds. J'utilise cette configuration sur certains sites Wordpress mais le plugin n'est pas fait pour détecter qui est le maître, donc j'utilise juste HAProxy pour détecter le maître et envoyer tout le trafic vers ce nœud. Si le nœud maître meurt , un nœud esclave prend le rôle de maître (redis-sentinel gère cela). HAProxy détecte que le maître a changé, puis changez le nœud qui reçoit tout le trafic.

Désolé de ne pas publier de code et d'exemples, mais maintenant je ne peux pas le faire.

Salutations!!

4
Daniel Carrasco

Est-ce vraiment vrai?

Non, ce n'est pas vraiment vrai. C'est une recommandation forte (comme vous pouvez le voir dans le langage "qui fonctionne comme prévu"; si vous ne vous attendez pas à ce que vos données soient durables et que vous vous attendiez à ce qu'elles disparaissent, etc. - vous pouvez configurer un cluster à nœud unique. Pourquoi le feriez-vous au lieu de simplement désactiver le mode cluster ... c'est à vous de décider.)

Donc, oui, vous pouvez configurer un cluster à nœud unique, même si cela n'est pas conseillé (pour toutes les raisons mentionnées dans d'autres réponses et la documentation.) Il n'y a rien dans le code du cluster redis cela vous arrêtera, à part un contrôle dans l'aide redis-trib.rb qui est là pour dissuader les utilisateurs naïfs.

Pour contourner cette vérification et configurer un cluster de nœuds unique (si vous êtes sûr que c'est ce que vous voulez - rappelez-vous, ce n'est certainement pas le cas), vous pouvez soit affecter manuellement les fragments à votre nœud avec CLUSTER ADDSLOTS 1 2 3 ... (etc, pour tous les 16384 fragments). Ou utilisez la version Python de redis-trib qui n'a pas le contrôle de sécurité à 3 nœuds (redis-trib.py create 127.0.0.1:6379).

3
Dominic Scheirlinck