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.