Redis sentinelle vs clustering

je comprends que Redis sentinel est une façon de configurer HA (haute disponibilité) parmi plusieurs instances redis. Comme je le vois, il y a une instance redis qui répond activement aux demandes des clients à tout moment. Il y a deux autres serveurs qui sont en veille (en attente d'une panne, donc l'un d'eux peut être de nouveau en action).

  • Est-ce un gaspillage de ressources?
  • Existe-t-il une meilleure façon d'utiliser pleinement les ressources disponible?
  • est-ce que Redis clustering est une alternative au Redis sentinel?

j'ai déjà cherché la documentation redis pour sentinel et clustering , quelqu'un ayant de l'expérience peut-il expliquer s'il vous plaît.

Master slave configuration in Redis sentinel - before failure

Master fails and slave kicks in to action

mise à JOUR

OK. Dans mon scénario de déploiement réel, j'ai deux serveurs dédiés à redis. J'ai un autre serveur que mon serveur Jboss exécute. L'application qui tourne dans Jboss est configurée pour se connecter au serveur maître redis(M).

scénario de Basculement

idéalement, je pense que lorsque le serveur de cache maître échoue (soit le processus Redis tombe en panne, soit la machine tombe en panne) l'application dans Jboss doit se connecter au serveur de cache esclave. Comment J'ai configuré les serveurs redis pour y arriver?

+--------+          +--------+
| Master  |---------| Slave  |
|         |         |        |
+--------+          +--------+

Configuration: quorum = 1
63
demandé sur Wernight 2015-06-30 18:59:04

4 réponses

d'abord, parlons sentinelle.

Sentinel gère le basculement, il ne configure pas Redis pour HA. C'est une distinction importante. Deuxièmement, le diagramme que vous avez posté est en fait une mauvaise configuration - vous ne voulez pas exécuter Sentinel sur le même noeud que les noeuds Redis qu'il gère. Lorsque vous perdez, l'hôte, vous perdez les deux.

pour "Est-ce un gaspillage de ressources?"cela dépend de votre cas d'utilisation. Vous n'avez pas besoin de trois noeuds Redis dans cette configuration, vous avez seulement besoin de deux. Trois augmentations votre redondance, mais n'est pas nécessaire. Si vous avez besoin de la redondance supplémentaire, ce n'est pas un gaspillage de ressources. Si vous n'avez pas besoin de redondance, alors vous n'avez qu'à lancer une seule instance Redis et l'appeler good - car en lancer plus serait "gaspillé".

une autre raison pour courir deux esclaves serait de diviser lit. Encore une fois, si vous en avez besoin, ce ne sera pas un gâchis.

pour "Est-il une meilleure façon d'utiliser la pleine utilisation des ressources disponibles?" nous ne pouvons pas répondre à cela car cela dépend beaucoup trop de votre scénario et de votre code. Cela dit, si la quantité de données à stocker est "petite" et le taux de commande n'est pas excessivement élevé, alors rappelez-vous que vous n'avez pas besoin de consacrer un hôte à Redis.

Désormais pour "le Redis clustering une alternative à Redis sentinelle?". Cela dépend vraiment entièrement votre cas d'utilisation. Le Cluster de Redis n'est pas une solution D'AP - il s'agit d'une solution d'écriture multiple/plus grande que la mémoire vive. Si votre but est juste HA alors il ne sera probablement pas approprié pour vous. Le Cluster Redis comporte des limites, particulièrement en ce qui concerne les opérations multi-clés, de sorte qu'il ne s'agit pas nécessairement d'une opération simple de "cluster d'utilisation".

si vous pensez que le fait d'avoir trois hôtes qui exécutent Redis (et trois qui exécutent sentinel) est une perte de temps, vous considérerez probablement que Cluster est encore plus important puisqu'il nécessite plus de ressources.

les questions que vous avez posées sont probablement trop larges et basées sur l'opinion pour survivre comme écrire. Si vous avez un cas/problème spécifique que vous travaillez s'il vous plaît mettre à jour avec cela afin que nous puissions fournir une assistance et des informations spécifiques.

mise à jour pour les spécificités:

pour une bonne gestion du basculement dans votre scénario, j'utiliserais 3 sentinelles, dont une sur votre serveur JBoss. Si vous avez 3 noeuds JBoss alors aller avec un sur chacun. J'aurais une capsule Redis (maître+esclave) sur des noeuds séparés, et j'aurais laissé sentinel gérer le basculement.

de là, il s'agit de brancher JBoss/Jedis pour utiliser Sentinel pour sa gestion de l'information et de la connexion. Comme je n'utilise pas ceux qu'une recherche rapide révèle que Jedis a le support pour cela, vous avez juste besoin de le configurer correctement. Quelques exemples que j'ai trouvé sont à à la recherche d'un exemple de Jedis avec Sentinel et https://github.com/xetorthio/jedis/issues/725 qui parle de JedisSentinelPool étant la route pour utiliser une piscine.

quand Sentinel exécute un basculement les clients seront déconnectés et Jedis (devrait?) gérer la reconnexion en demandant aux sentinelles qui est le maître actuel.

72
répondu The Real Bill 2017-05-23 12:34:10

la recommandation, partout, est de commencer par un nombre impair d'instances, en n'utilisant pas deux ou un multiple de deux. Cela a été corrigé, mais permet de corriger d'autres points.

tout d'abord, dire que Sentinel fournit failover sans HA est faux. Lorsque vous avez failover, vous avez HA avec l'avantage supplémentaire de l'état d'application étant répliqué. La différence est que vous pouvez avoir HA dans un système sans réplication (C'est HA mais ce n'est pas tolérant aux erreurs).

Deuxièmement, exécuter une sentinelle sur la même machine que son instance redis cible n'est pas une "mauvaise configuration": si vous perdez votre sentinelle, ou votre instance redis, ou l'ensemble de la machine, les résultats sont les mêmes. C'est probablement la raison pour laquelle chaque exemple de telles configurations montre les deux fonctionnant sur la même machine.

28
répondu Rick O'Shea 2017-09-07 17:18:23

ce n'est pas une réponse directe à votre question, mais pensez, c'est une information utile pour les débutants Redis, comme moi. Cette question apparaît également comme le premier lien dans google lors de la recherche dans le "Redis cluster vs sentinel".

Redis Sentinel est le nom de la solution de haute disponibilité Redis... Il n'a rien à voir avec Redis Cluster et est destiné à être utilisé par les gens qui n'ont pas besoin de Redis Cluster, mais simplement une façon d'effectuer reprise automatique plus quand une instance maître ne fonctionne pas correctement.

tiré du Redis Sentinel design draft 1.3

ce n'est pas évident quand vous êtes nouveau à Redis et la mise en œuvre de solution de basculement. Les documents officiels sur sentinel et clustering ne se comparent pas, il est donc difficile de choisir la bonne voie sans lire des tonnes de documents.

19
répondu Kamarey 2016-11-16 09:48:48

C'est ma compréhension après avoir frappé ma tête à travers la documentation.

Sentinel est une sorte de solution d'attente à chaud où les esclaves sont maintenus répliqués et prêts à être promus à tout moment. Cependant il ne supportera pas n'importe quel multi-noeud écrit. Les esclaves peuvent être configurés pour les opérations de lecture. Ce N'est pas vrai que Sentinel ne fournira pas D'HA, il a toutes les caractéristiques d'un cluster actif-passif typique ( bien que ce n'est pas un bon terme à utiliser ici ).

Redis cluster est plus ou moins une solution distribuée, travaillant sur les morceaux. Chaque bloc de données est distribué entre les noeuds maîtres et esclaves. Un facteur de réplication minimum de 2 garantit que vous avez deux fragments actifs disponibles à travers maître et esclaves. Si vous connaissez le sharding dans Mongo ou Elasticsearch, il sera facile de rattraper.

1
répondu anraj 2018-07-03 12:50:43