Najpierw porozmawiajmy wartowniku.
Sentinel zarządza przełączaniem awaryjnym, nie konfiguruje Redis dla HA. To ważne rozróżnienie. Po drugie, opublikowany diagram jest w rzeczywistości złą konfiguracją - nie chcesz uruchamiać Sentinela na tym samym węźle, co węzły Redis, którymi zarządza. Kiedy tracisz tego hosta, tracisz jedno i drugie.
Jeśli chodzi o pytanie „Czy to marnowanie zasobów?” to zależy od twojego przypadku użycia. Nie potrzebujesz trzech węzłów Redis w tej konfiguracji, potrzebujesz tylko dwóch. Trzy zwiększa twoją redundancję, ale nie jest to wymagane. Jeśli potrzebujesz dodatkowej redundancji, nie jest to marnowanie zasobów. Jeśli nie potrzebujesz nadmiarowości, po prostu uruchom jedną instancję Redis i nazwij ją dobrą - ponieważ uruchamianie większej ilości byłoby „zmarnowane”.
Innym powodem prowadzenia dwóch niewolników byłoby podzielenie odczytów. Ponownie, jeśli tego potrzebujesz, nie byłoby to marnotrawstwem.
Jeśli chodzi o pytanie „Czy istnieje lepszy sposób na pełne wykorzystanie 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 poświęcać hosta dla Redis.
Teraz pytanie „Czy tworzenie klastrów Redis jest alternatywą dla wartownika Redis?”. To naprawdę zależy całkowicie od twojego przypadku użycia. Klaster Redis nie jest rozwiązaniem wysokiej dostępności - jest to rozwiązanie z wieloma modułami zapisującymi / większe niż pamięć RAM. Jeśli Twoim celem jest tylko HA, prawdopodobnie nie będzie dla Ciebie odpowiedni. Klaster Redis ma pewne ograniczenia, zwłaszcza dotyczące operacji z wieloma kluczami, więc niekoniecznie jest to prosta operacja „po prostu użyj klastra”.
Jeśli uważasz, że posiadanie trzech hostów z systemem Redis (i trzech działających wartownikiem) jest marnotrawstwem, prawdopodobnie będziesz utrzymywać Cluster jeszcze bardziej, ponieważ wymaga więcej zasobów.
Pytania, które zadałeś, są prawdopodobnie zbyt szerokie i oparte na opiniach, aby przetrwać tak, jak zostały napisane. Jeśli masz konkretny przypadek / problem, nad którym pracujesz, zaktualizuj go, abyśmy mogli zapewnić konkretną pomoc i informacje.
Zaktualizuj szczegółowe informacje:
Dla prawidłowego zarządzania przełączaniem awaryjnym w twoim scenariuszu wybrałbym 3 wartowników, z których jeden działa na serwerze JBoss. Jeśli masz 3 węzły JBoss, użyj po jednym na każdym. Miałbym pod Redis (master + slave) na oddzielnych węzłach i pozwoliłbym strażnikowi zarządzać przełączaniem awaryjnym.
Stamtąd jest kwestia podłączenia JBoss / Jedis do korzystania z Sentinel do zarządzania informacjami i połączeniami. Ponieważ nie używam ich, szybko wyszukuję, że Jedis ma do tego wsparcie, wystarczy je poprawnie skonfigurować. Kilka przykładów, które znalazłem, to Poszukiwanie przykładu Jedis z Sentinelem i https://github.com/xetorthio/jedis/issues/725, które mówią oJedisSentinelPool
byciu drogą do korzystania z puli.
Kiedy Sentinel wykona przełączenie awaryjne, klienci zostaną odłączeni, a Jedis (powinien?) Zająć się ponownym połączeniem, pytając Strażników, kto jest obecnym panem.