Во-первых, давайте поговорим о часовом.
Sentinel управляет отработкой отказа, он не настраивает Redis для HA. Это важное различие. Во-вторых, опубликованная вами диаграмма на самом деле плохая настройка - вы не хотите запускать Sentinel на том же узле, что и узлы Redis, которыми он управляет. Когда вы теряете этого хозяина, вы теряете и то, и другое.
На вопрос «Это трата ресурсов?» это зависит от вашего варианта использования. В этой настройке вам не нужны три узла Redis, вам нужно только два. Три увеличивает вашу избыточность, но это не обязательно. Если вам нужна дополнительная избыточность, это не пустая трата ресурсов. Если вам не нужна избыточность, вы просто запускаете один экземпляр Redis и называете его хорошим - так как запуск большего количества будет «потрачен впустую».
Еще одна причина для запуска двух ведомых устройств - это разделенное чтение. Опять же, если вам это нужно, это не будет пустой тратой.
Что касается «Есть ли лучший способ использовать все доступные ресурсы?» мы не можем ответить на этот вопрос, поскольку он слишком зависит от вашего конкретного сценария и кода. Тем не менее, если объем данных для хранения «мал», а скорость выполнения команд не слишком высока, помните, что вам не нужно выделять хост для Redis.
Теперь вопрос «Является ли кластеризация Redis альтернативой Redis sentinel?». Это действительно полностью зависит от вашего варианта использования. Redis Cluster - это не решение высокой доступности - это решение с несколькими модулями записи и размером больше оперативной памяти. Если ваша цель - просто HA, то она, скорее всего, вам не подойдет. Redis Cluster имеет ограничения, особенно в отношении операций с несколькими ключами, поэтому это не обязательно простая операция «просто использовать кластер».
Если вы считаете, что наличие трех хостов, на которых запущен Redis (и трех запущенных дозорных), расточительно, вы, вероятно, будете считать кластер еще более трудным, поскольку он требует больше ресурсов.
Вопросы, которые вы задали, вероятно, слишком широки и основаны на мнении, чтобы выжить в том виде, в котором они написаны. Если у вас есть конкретный случай / проблема, над которой вы работаете, сообщите об этом, чтобы мы могли предоставить конкретную помощь и информацию.
Обновление для уточнения:
Для правильного управления аварийным переключением в вашем сценарии я бы выбрал 3 дозорных, один из которых работает на вашем сервере JBoss. Если у вас 3 узла JBoss, используйте по одному на каждом. У меня был бы модуль Redis (главный + подчиненный) на отдельных узлах, и я позволил бы дозорному управлять аварийным переключением.
Оттуда нужно подключить JBoss / Jedis для использования Sentinel для управления информацией и подключениями. Поскольку я не использую их, быстрый поиск показывает, что у Jedis есть поддержка для этого, вам просто нужно правильно его настроить. Некоторые примеры, которые я нашел, - это поиск примеров джедаев с Sentinel и https://github.com/xetorthio/jedis/issues/725, в которых говорится оJedisSentinelPool
маршруте использования пула.
Когда Sentinel выполняет аварийное переключение, клиенты будут отключены, и Jedis (должны?) Обработать повторное подключение, спросив Sentinels, кто является текущим мастером.