Lassen Sie uns zuerst über Sentinel sprechen.
Sentinel verwaltet das Failover, es konfiguriert Redis nicht für HA. Es ist eine wichtige Unterscheidung. Zweitens ist das von Ihnen gepostete Diagramm eigentlich ein schlechtes Setup – Sie möchten Sentinel nicht auf demselben Knoten ausführen wie die Redis-Knoten, die es verwaltet. Wenn Sie diesen Host verlieren, verlieren Sie beide.
Zu "Ist es Ressourcenverschwendung?" es hängt von Ihrem Anwendungsfall ab. Sie benötigen in diesem Setup keine 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 Ressourcenverschwendung. Wenn Sie keine Redundanz benötigen, führen Sie einfach eine einzelne Redis-Instanz aus und nennen sie gut – da die Ausführung von mehr „verschwendet“ wäre.
Ein weiterer Grund für den Betrieb von zwei Slaves wäre das Aufteilen von Lesevorgängen. Nochmals, wenn Sie es brauchen, wäre es keine Verschwendung.
Zu "Gibt es einen besseren Weg, 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. Wenn die zu speichernde Datenmenge jedoch "klein" 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 – es ist eine Lösung mit mehreren Schreibern/größer als RAM. Wenn Ihr Ziel nur HA ist, dann ist es wahrscheinlich nicht für Sie geeignet. Redis Cluster weist Einschränkungen auf, insbesondere bei Multi-Key-Vorgängen, sodass es sich nicht unbedingt um einen einfachen „Nur Cluster verwenden“-Vorgang handelt.
Wenn Sie der Meinung sind, dass drei Hosts, auf denen Redis ausgeführt wird (und drei, auf denen Sentinel ausgeführt wird), verschwenderisch sind, halten Sie Cluster wahrscheinlich für noch mehr, da es mehr Ressourcen erfordert.
Die Fragen, die Sie gestellt haben, sind wahrscheinlich zu allgemein und meinungsbasiert, um so geschrieben zu überleben. Wenn Sie einen bestimmten Fall/ein bestimmtes Problem haben, an dem Sie arbeiten, aktualisieren Sie dies bitte, damit wir spezifische Unterstützung und Informationen bereitstellen können.
Update für Einzelheiten:
Für eine ordnungsgemäße Failover-Verwaltung in Ihrem Szenario würde ich mit 3 Sentinels arbeiten, von denen einer auf Ihrem JBoss-Server ausgeführt wird. Wenn Sie 3 JBoss-Knoten haben, verwenden Sie jeweils einen. Ich würde einen Redis-Pod (Master+Slave) auf separaten Knoten haben und Sentinel das Failover verwalten lassen.
Von dort aus müssen Sie JBoss/Jedis so konfigurieren, dass Sentinel für die Informations- und Verbindungsverwaltung verwendet wird. Da ich diese nicht verwende, stellt sich bei einer schnellen Suche heraus, dass Jedis die Unterstützung dafür hat, Sie müssen es nur richtig konfigurieren. Einige Beispiele, die ich gefunden habe, finden sich unter Looking for an example of Jedis with Sentinel und https://github.com/xetorthio/jedis/issues/725, wo es um JedisSentinelPool
geht ist die Route für die Nutzung eines Pools.
Wenn Sentinel ein Failover durchführt, werden die Clients getrennt und Jedis wird (sollte?) die Wiederverbindung handhaben, indem er die Sentinels fragt, wer der aktuelle Master ist.