Redis Sentinel vs Clustering


111

Ich verstehe, dass Redis Sentinel eine Möglichkeit ist, HA (Hochverfügbarkeit) unter mehreren Redis-Instanzen zu konfigurieren. Wie ich sehe, gibt es zu jedem Zeitpunkt eine Redis-Instanz, die die Client-Anforderungen aktiv bearbeitet. Es befinden sich zwei zusätzliche Server im Standby-Modus (warten auf einen Fehler, sodass einer von ihnen wieder in Aktion sein kann).

  • Ist es Verschwendung von Ressourcen?
  • Gibt es eine bessere Möglichkeit, die verfügbaren Ressourcen voll auszuschöpfen?
  • Ist Redis Clustering eine Alternative zu Redis Sentinel?

Ich habe bereits die Redis-Dokumentation für Sentinel und Clustering nachgeschlagen. Kann jemand, der Erfahrung hat, dies bitte erklären?

Master-Slave-Konfiguration in Redis Sentinel - vor dem Ausfall

Der Master fällt aus und der Slave tritt in Aktion

AKTUALISIEREN

OK. In meinem realen Bereitstellungsszenario sind zwei Server für Redis vorgesehen. Ich habe einen anderen Server, auf dem mein Jboss-Server ausgeführt wird. Die in Jboss ausgeführte Anwendung ist so konfiguriert, dass eine Verbindung zum Redis Master Server (M) hergestellt wird.

Failover-Szenario

Im Idealfall muss die Anwendung in Jboss eine Verbindung zum Slave-Cache-Server herstellen, wenn der Master-Cache-Server ausfällt (entweder der Redis-Prozess fällt aus oder der Computer fällt aus). Wie würde ich die Redis-Server konfigurieren, um dies zu erreichen?

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

Configuration: quorum = 1

Antworten:


119

Lassen Sie uns zuerst Sentinel sprechen.

Sentinel verwaltet das Failover und konfiguriert Redis nicht für HA. Es ist eine wichtige Unterscheidung. Zweitens ist das von Ihnen veröffentlichte Diagramm tatsächlich ein schlechtes Setup. Sie möchten Sentinel nicht auf demselben Knoten ausführen wie die von ihm verwalteten Redis-Knoten. Wenn Sie diesen Host verlieren, verlieren Sie beide.

Zu "Ist es Verschwendung von Ressourcen?" Dies hängt von Ihrem Anwendungsfall ab. Sie benötigen in diesem Setup nicht drei Redis-Knoten, sondern nur zwei. Drei erhöht Ihre Redundanz, ist aber nicht erforderlich. Wenn Sie die zusätzliche Redundanz benötigen, ist dies keine Verschwendung von Ressourcen. Wenn Sie keine Redundanz benötigen, führen Sie einfach eine einzelne Redis-Instanz aus und nennen sie gut - da das Ausführen von mehr "verschwendet" wäre.

Ein weiterer Grund für die Ausführung von zwei Slaves wäre die Aufteilung der Lesevorgänge. Auch wenn Sie es brauchen, wäre es keine Verschwendung.

Zu "Gibt es eine bessere Möglichkeit, die verfügbaren Ressourcen voll auszuschöpfen?" Wir können das nicht beantworten, da es viel zu abhängig von Ihrem spezifischen Szenario und Code ist. Das heißt, wenn die zu speichernde Datenmenge "klein" ist und die Befehlsrate nicht übermäßig hoch ist, denken Sie daran, dass Sie Redis keinen Host zuweisen müssen.

Nun zu "Ist Redis Clustering eine Alternative zu Redis Sentinel?". Es hängt wirklich ganz von Ihrem Anwendungsfall ab. Redis Cluster ist keine HA-Lösung, sondern eine Lösung mit mehreren Schreibern und mehr als RAM. Wenn Ihr Ziel nur HA ist, ist es wahrscheinlich nicht für Sie geeignet. Redis Cluster weist Einschränkungen auf, insbesondere bei Operationen mit mehreren Schlüsseln, sodass es sich nicht unbedingt um eine einfache Operation "Nur Cluster verwenden" handelt.

Wenn Sie der Meinung sind, dass drei Hosts, auf denen Redis ausgeführt wird (und drei Hosts, auf denen Sentinel ausgeführt wird), verschwenderisch sind, halten Sie Cluster wahrscheinlich für noch umfangreicher, da mehr Ressourcen erforderlich sind.

Die Fragen, die Sie gestellt haben, sind wahrscheinlich zu weit gefasst und meinungsbasiert, um wie geschrieben zu überleben. Wenn Sie einen bestimmten Fall / ein bestimmtes Problem haben, das Sie gerade bearbeiten, aktualisieren Sie dies bitte, damit wir Ihnen spezifische Unterstützung und Informationen bieten können.

Update für Details:

Für eine ordnungsgemäße Failover-Verwaltung in Ihrem Szenario würde ich 3 Sentinels verwenden, von denen einer auf Ihrem JBoss-Server ausgeführt wird. Wenn Sie 3 JBoss-Knoten haben, wählen Sie jeweils einen. Ich hätte einen Redis-Pod (Master + Slave) auf separaten Knoten und würde Sentinel das Failover verwalten lassen.

Von dort aus müssen JBoss / Jedis verkabelt werden, um Sentinel für das Informations- und Verbindungsmanagement zu verwenden. Da ich diese nicht benutze, zeigt eine schnelle Suche, dass Jedis die Unterstützung dafür hat. Sie müssen sie nur richtig konfigurieren. Einige Beispiele, die ich gefunden habe, finden Sie unter Suchen nach einem Beispiel für Jedis mit Sentinel und https://github.com/xetorthio/jedis/issues/725, über die gesprochen wirdJedisSentinelPool , wie man einen Pool verwendet.

Wenn Sentinel ein Failover ausführt, werden die Clients getrennt und Jedis übernimmt (sollte?) Die erneute Verbindung, indem er die Sentinels fragt, wer der aktuelle Master ist.


6
Hallo @ The-Real-Bill, könnten Sie bitte näher auf "Sentinel verwaltet das Failover, es konfiguriert Redis nicht für HA" näher eingehen. Auf dem offiziellen Dokument ( redis.io/topics/sentinel ) heißt es: "Redis Sentinel bietet Redis hohe Verfügbarkeit."
Xiao Peng - ZenUML.com

1
HA Redis benötigt mehrere Teile, um HA zu sein. Sentinel behandelt nur ein Teil: das Failover. Die Replikation wird nicht eingerichtet und es wird kein HA-Endpunkt bereitgestellt. Es bietet eine Serviceerkennung, damit ein Client weiß, mit wem er sprechen muss, um zum Master zu gelangen. Dies konfiguriert Redis nicht für HA.
The Real Bill

5
Die Behauptungen hier sind einfach nicht wahr - Redis mit Sentinel verwaltet die Replikation vom primären zum Standby-Knoten. Beim Failover wird der Master geändert und die Replikation vom neuen Master auf alle verbleibenden Knoten verschoben. Ein wiederhergestellter Knoten wird zu einem sekundären Standort als Ziel für die Replikation. Das fehlende Teil ist, dass der KUNDE mit dem Sentinel sprechen muss, um Informationen über etwaige Statusänderungen zu erhalten. Sentinel ist also eine Hochverfügbarkeitslösung.
JasonG

6
Ich sagte, es wird keine Replikation eingerichtet, und das ist wahr. Sie konfigurieren die Redis-Replikation, indem Sie Slaves einrichten. Dann wird Sentinel es erkennen und Failover verwalten. Sentinel kann keine Replikation einrichten, da nur ein vorhandenes Replikationssetup verwaltet wird. Versuch es. Schalten Sie zwei unabhängige Redis-Server ein und lassen Sie Sentinel einen Slave zu einem anderen machen, ohne Slave von direkt zu verwenden. Es wird nicht funktionieren. Es können auch keine neuen Sklaven hinzugefügt werden. So ist es auch. Es wurde die Replikation eingerichtet.
The Real Bill

35

Überall wird empfohlen, mit einer ungeraden Anzahl von Instanzen zu beginnen und nicht zwei oder ein Vielfaches von zwei zu verwenden. Das wurde korrigiert, aber lassen Sie uns einige andere Punkte korrigieren.

Zu sagen, dass Sentinel ein Failover ohne HA bereitstellt, ist falsch. Wenn Sie ein Failover haben, haben Sie HA mit dem zusätzlichen Vorteil, dass der Anwendungsstatus repliziert wird. Der Unterschied besteht darin, dass Sie HA in einem System ohne Replikation haben können (es ist HA, aber es ist nicht fehlertolerant).

Zweitens ist das Ausführen eines Sentinels auf demselben Computer wie seine Ziel-Redis-Instanz kein "schlechtes Setup": Wenn Sie Ihren Sentinel, Ihre Redis-Instanz oder den gesamten Computer verlieren, sind die Ergebnisse dieselben. Das ist wahrscheinlich der Grund, warum in jedem Beispiel für solche Konfigurationen beide auf demselben Computer ausgeführt werden.


6
Tatsächlich scheint es einen Fehler zu geben, bei dem Sentinel im Setup "Sentinel-on-the-Instance" keine Wahl einleiten kann, und ich habe ihn hier, in der ML und in der individuellen Beratung oft gesehen. Durch das Verschieben der Sentinels vom Redis-Server wurde dies jedes Mal behoben. Daher ist es ein schlechtes Setup, dies auf diese Weise zu tun, da es Sie in dem Moment scheitern lässt, in dem Sie es benötigen. Das Beispiel zeigt dies so, weil sie nicht von Personen mit umfassender Betriebserfahrung geschrieben wurden und es einfacher ist.
The Real Bill

3
Welcher Fehler ist das, gibt es einen Fehlerbericht? Wissen Sie, ob es noch existiert?
Sivann

Gibt es ähnliche Probleme beim Platzieren der Sentinels auf den Anwendungscomputern?
OrangeDog

31

Dies ist keine direkte Antwort auf Ihre Frage, aber denken Sie, es sind hilfreiche Informationen für Redis-Neulinge wie mich. Auch diese Frage erscheint als erster Link in Google bei der Suche im "Redis Cluster vs Sentinel".

Redis Sentinel ist der Name der Redis-Hochverfügbarkeitslösung ... Sie hat nichts mit Redis Cluster zu tun und ist für Personen gedacht, die Redis Cluster nicht benötigen, sondern lediglich eine Möglichkeit, ein automatisches Failover als Master durchzuführen Instanz funktioniert nicht richtig.

Entnommen aus dem Redis Sentinel-Entwurfsentwurf 1.3

Es ist nicht selbstverständlich, wenn Sie Redis noch nicht kennen und eine Failover-Lösung implementieren. Offizielle Dokumentationen über Sentinel und Clustering sind nicht miteinander vergleichbar, daher ist es schwierig, den richtigen Weg zu wählen, ohne Tonnen von Dokumentationen zu lesen.


10

Dies ist mein Verständnis, nachdem ich in der gesamten Dokumentation mit dem Kopf geschlagen habe.

Sentinel ist eine Art Hot-Standby-Lösung, bei der die Slaves repliziert bleiben und jederzeit hochgestuft werden können. Es werden jedoch keine Schreibvorgänge mit mehreren Knoten unterstützt. Slaves können für Lesevorgänge konfiguriert werden. Es ist NICHT wahr, dass Sentinel kein HA bereitstellt, es verfügt über alle Funktionen eines typischen Aktiv-Passiv-Clusters (obwohl dies hier nicht der richtige Begriff ist).

Redis Cluster ist mehr oder weniger eine verteilte Lösung, die auf Shards arbeitet. Jeder Datenblock wird auf Master- und Slave-Knoten verteilt. Ein minimaler Replikationsfaktor von 2 stellt sicher, dass zwei aktive Shards für Master und Slaves verfügbar sind. Wenn Sie die Scherben in Mongo oder Elasticsearch kennen, wird es leicht sein, sie einzuholen.


6

Redis kann in partitionierten Clustern (mit vielen Mastern und Slaves dieser Master) oder in einem Einzelinstanzmodus (Einzelmaster mit Replikat-Slaves) betrieben werden.
Der Link hier sagt:

Wenn Sie Redis im Einzelinstanzmodus verwenden, in dem ein einzelner Redis-Server die gesamte nicht partitionierte Datenbank verwaltet, wird Redis Sentinel verwendet, um die Verfügbarkeit zu verwalten

Es heißt auch:

Ein Redis-Cluster, in dem Daten auf mehrere primäre Instanzen aufgeteilt sind, verwaltet die Verfügbarkeit selbst und erfordert keine zusätzlichen Komponenten.

So kann HA in den beiden genannten Szenarien sichergestellt werden. Hoffe das klärt die Zweifel. Redis-Cluster und Sentinels sind keine Alternative zueinander. Sie werden nur verwendet, um HA in verschiedenen Fällen von partitioniertem oder nicht partitioniertem Master sicherzustellen.


4

Redis Sentinel führt das Failover zur Heraufstufung von Replikaten durch, wenn ein Master ausfällt. Normalerweise möchten Sie eine ungerade Anzahl von Sentinel-Knoten. Für das Beispiel eines Masters und eines Replikats sollten 3 Sentinels verwendet werden, damit ein Konsens über die Entscheidung erzielt werden kann. Idealerweise befindet sich der 3. Sentinel auf einem 3. Server, sodass die Entscheidung nicht verzerrt wird (abhängig vom Fehler). Sentinel sorgt dafür, dass die Einstellungen für die Master- / Replikatkonfiguration auf Ihren Knoten so geändert werden, dass die Heraufstufung und Synchronisierung in der richtigen Reihenfolge erfolgt und Sie keine Daten überschreiben, indem Sie einen alten ausgefallenen Master aktivieren, der jetzt ältere Daten enthält.

Sobald Sie Ihre Sentinel-Knoten für die Durchführung von Failovers eingerichtet haben, müssen Sie sicherstellen, dass Sie auf die richtige Instanz verweisen. Sehen Sie sich hierzu ein Beispiel für die HAProxy-Konfiguration an . HAProxy führt Integritätsprüfungen durch und zeigt auf den neuen Master, wenn ein Fehler auftritt.

Durch Clustering können Sie horizontal skalieren und hohe Lasten bewältigen. Das Einrichten und Konfigurieren im Voraus erfordert einige Arbeit.

Es gibt eine Open-Source-Verzweigung von Redis, "KeyDB", die die Notwendigkeit von Sentinel-Knoten mit einer Active-Replica-Option beseitigt hat. Dadurch kann der Replikatknoten Lese- und Schreibvorgänge akzeptieren. Wenn ein Failover auftritt, stoppt HAProxy das Lesen / Schreiben mit dem ausgefallenen Knoten und verwendet nur den verbleibenden aktiven Knoten, der bereits synchronisiert ist. Durch die Zeitstempelung können die ausgefallenen Knoten automatisch wieder verbunden und erneut synchronisiert werden, ohne dass Daten verloren gehen, wenn sie wieder online sind. Das Setup ist einfach und für höheren Datenverkehr benötigen Sie kein spezielles Upfront-Setup, um Lesevorgänge an den Replikatknoten und Lese- / Schreibvorgänge an den Master zu leiten. Siehe Beispiel für eine aktive Replikation hier . KeyDB ist auch Multithread-fähig, was für einige Anwendungen eine Alternative zum Clustering darstellt, aber wirklich von Ihren Anforderungen abhängt.

Es gibt auch ein Beispiel für das manuelle Einrichten von Clustering und mit dem Tool zum Erstellen von Clustern . Dies sind die gleichen Schritte, wenn Sie Redis verwenden (ersetzen Sie 'keydb' in der Anweisung durch 'redis').


1

Zusätzliche Informationen zu den obigen Antworten

Redis Cluster

  • Ein Hauptzweck des Redis-Clusters besteht darin, Ihre Datenlast durch Sharding gleichmäßig zu verteilen

  • Redis Cluster verwendet kein konsistentes Hashing, sondern eine andere Form des Shardings, bei der jeder Schlüssel konzeptionell Teil des sogenannten Hash-Slots ist

  • Es gibt 16384 Hash-Slots im Redis-Cluster. Jeder Knoten in einem Redis-Cluster ist für eine Teilmenge der Hash-Slots verantwortlich. Sie können also beispielsweise einen Cluster mit 3 Knoten haben, wobei:

    Knoten A enthält Hash-Slots von 0 bis 5500, Knoten B enthält Hash-Slots von 5501 bis 11000, Knoten C enthält Hash-Slots von 11001 bis 16383

Auf diese Weise können wir problemlos Knoten im Cluster hinzufügen und entfernen. Wenn wir beispielsweise einen neuen Knoten D hinzufügen möchten, müssen wir einen Hash-Slot von den Knoten A, B, C nach D verschieben

  • Der Redis-Cluster unterstützt die Master-Slave-Struktur. Sie können beim Erstellen eines Clusters die Slaves A1, B1, C2 zusammen mit Master A, B, C erstellen. Wenn also Master B ausfällt, wird Slave B1 als Master befördert

Sie benötigen keine zusätzliche Failover-Behandlung, wenn Sie Redis Cluster verwenden, und Sie sollten Sentinel-Instanzen auf keinen Fall auf einen der Cluster-Knoten verweisen.

Was bekommen Sie praktisch mit Redis Cluster?

1.Die Möglichkeit, Ihren Datensatz automatisch auf mehrere Knoten aufzuteilen.

2. Die Möglichkeit, den Betrieb fortzusetzen, wenn bei einer Teilmenge der Knoten Fehler auftreten oder die Kommunikation mit dem Rest des Clusters nicht möglich ist.

Redis Sentinel

  • Redis unterstützt mehrere Slaves, die Daten von einem Masterknoten replizieren.
  • Dies bietet eine Sicherung für Daten im Masterknoten.
  • Redis Sentinel ist ein System zur Verwaltung von Master und Slave. Es wird als separates Programm ausgeführt. Die minimale Anzahl von Sentinels, die in einem idealen System erforderlich sind, beträgt 3. Sie kommunizieren untereinander und stellen sicher, dass der Master am Leben ist. Wenn er nicht am Leben ist, befördern sie einen der Slaves als Master. Wenn sich der tote Knoten später dreht, wird dies der Fall sein als Sklave für den neuen Meister fungieren
  • Das Quorum ist konfigurierbar. Grundsätzlich ist es die Anzahl der Sentinels, die zustimmen müssen, wenn der Master ausfällt. N / 2 +1 sollte zustimmen. N ist die Anzahl der Knoten im Pod (beachten Sie, dass dieses Setup als Pod bezeichnet wird und kein Cluster ist).

Was bekommen Sie praktisch mit Redis Sentinel?

Dadurch wird sichergestellt, dass der Master immer verfügbar ist (wenn der Master ausfällt, wird der Slave zum Master befördert).

Referenz :

https://fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster/

https://redis.io/topics/cluster-tutorial

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.