Najpierw porozmawiajmy ze strażnikiem.
Sentinel zarządza przełączaniem awaryjnym, nie konfiguruje Redis dla HA. To ważne rozróżnienie. Po drugie, diagram, który opublikowałeś, jest w rzeczywistości złą konfiguracją – nie chcesz uruchamiać Sentinel na tym samym węźle, co węzły Redis, którymi zarządza. Kiedy tracisz tego hosta, tracisz oba.
Co do „Czy to marnowanie zasobów?” to zależy od twojego przypadku użycia. W tej konfiguracji nie potrzebujesz trzech węzłów Redis, potrzebujesz tylko dwóch. Trzy zwiększa redundancję, ale nie jest to wymagane. Jeśli potrzebujesz dodatkowej redundancji, nie jest to marnowanie zasobów. Jeśli nie potrzebujesz redundancji, po prostu uruchamiasz jedną instancję Redis i nazywasz ją dobrą - ponieważ uruchamianie większej liczby byłoby „zmarnowane”.
Innym powodem prowadzenia dwóch niewolników byłoby dzielenie odczytów. Ponownie, jeśli tego potrzebujesz, nie będzie to strata.
Co do „Czy istnieje lepszy sposób pełnego wykorzystania dostępnych zasobów?” nie możemy na to odpowiedzieć, ponieważ jest to zbyt zależne od konkretnego scenariusza i kodu. To powiedziawszy, jeśli ilość danych do przechowywania jest „mała”, a szybkość poleceń nie jest zbyt wysoka, pamiętaj, że nie musisz przydzielać hosta do Redis.
Teraz pytanie „Czy klastrowanie Redis jest alternatywą dla wartownika Redis?”. To naprawdę zależy całkowicie od przypadku użycia. Redis Cluster nie jest rozwiązaniem HA — jest to rozwiązanie z wieloma nagrywarkami/większe niż pamięć RAM. Jeśli Twoim celem jest tylko HA, prawdopodobnie nie będzie to dla Ciebie odpowiednie. Klaster Redis ma ograniczenia, szczególnie w przypadku operacji na wielu klawiszach, więc niekoniecznie jest to prosta operacja „wystarczy użyć klastra”.
Jeśli uważasz, że posiadanie trzech hostów z uruchomionym Redisem (i trzema działającymi wartownikami) jest marnotrawstwem, prawdopodobnie utrzymasz klaster jako jeszcze bardziej, ponieważ wymaga więcej zasobów.
Pytania, które zadałeś, są prawdopodobnie zbyt szerokie i oparte na opiniach, aby przetrwać w formie pisemnej. Jeśli masz konkretny przypadek/problem, który rozwiązujesz, zaktualizuj go, abyśmy mogli zapewnić konkretną pomoc i informacje.
Aktualizacja szczegółów:
Aby zapewnić prawidłowe zarządzanie przełączaniem awaryjnym w twoim scenariuszu, wybrałbym 3 strażników, z których jeden działa na twoim serwerze JBoss. Jeśli masz 3 węzły JBoss, wybierz po jednym na każdym. Miałbym pod Redis (master + slave) na osobnych węzłach i pozwoliłbym strażnikowi zarządzać przełączaniem awaryjnym.
Stamtąd jest już kwestia podłączenia JBoss/Jedis do korzystania z Sentinel do zarządzania informacjami i połączeniami. Ponieważ ich nie używam, szybko okazuje się, że Jedis ma na to wsparcie, wystarczy go poprawnie skonfigurować. Niektóre przykłady, które znalazłem, to Szukam przykładu Jedis z Sentinel i https://github.com/xetorthio/jedis/issues/725, które mówią o JedisSentinelPool
będąca trasą do korzystania z basenu.
Kiedy Sentinel wykona przełączenie awaryjne, klienci zostaną rozłączeni, a Jedi (powinni?) obsłużyć ponowne połączenie, pytając Strażników, kto jest aktualnym mistrzem.