Redis sentinel против кластеризации - программирование
Подтвердить что ты не робот

Redis sentinel против кластеризации

Я понимаю, что redis sentinel - это способ настройки HA (высокая доступность) среди нескольких экземпляров redis. Как я вижу, есть один экземпляр redis, который активно обслуживает клиентские запросы в любой момент времени. В режиме ожидания находятся два дополнительных сервера (ожидая неудачи, поэтому один из них может снова действовать).

  • Это трата ресурсов?
  • Есть ли лучший способ использования полного использования доступных ресурсов?
  • Является ли Redis кластеризацией альтернативы Redis sentinel?

Я уже просмотрел документацию redis для sentinel и кластеризация, может ли кто-нибудь опыт объяснить, пожалуйста.

Master slave configuration in Redis sentinel - before failure

Master fails and slave kicks in to action

UPDATE

OK. В моем реальном сценарии развертывания у меня есть два сервера, предназначенные для redis. У меня есть другой сервер, на котором работает сервер Jboss. Приложение, запущенное в Jboss, настроено на подключение к серверу redis master (M).

Сценарий отказоустойчивости

В идеале, я думаю, что при сбое сервера главного кеша (либо процесс Redis сходит, либо сбой компьютера) приложение в Jboss должно подключиться к серверу квеста Slave. Как настроить сервер redis для этого?

+--------+          +--------+
| Master  |---------| Slave  |
|         |         |        |
+--------+          +--------+

Configuration: quorum = 1
4b9b3361

Ответ 1

Во-первых, давайте поговорим дозорным.

Sentinel управляет отказоустойчивостью, он не настраивает Redis для HA. Это важное различие. Во-вторых, диаграмма, которую вы опубликовали, на самом деле является плохой настройкой - вы не хотите запускать Sentinel на том же node, что и узлы Redis, которыми он управляет. Когда вы теряете этот хост, вы теряете оба.

Что касается "Это трата ресурсов?" это зависит от вашего варианта использования. В этой настройке вам не нужны три узла Redis, вам всего два. Три увеличивают вашу избыточность, но не требуются. Если вам нужна дополнительная избыточность, то это не пустая трата ресурсов. Если вам не нужна избыточность, вы просто запускаете один экземпляр Redis и называете это хорошим - поскольку запуск больше будет "расточительным".

Еще одна причина для запуска двух подчиненных устройств - разбить показания. Опять же, если вам это нужно, это не будет пустой тратой.

Что касается "Существует ли лучший способ использования полного использования доступных ресурсов?" мы не можем ответить на это, поскольку он слишком зависит от вашего конкретного сценария и кода. Тем не менее, если количество данных для хранения "мало", и скорость команд не является чрезвычайно высокой, помните, что вам не нужно выделять хост для Redis.

Теперь для "Является ли Redis кластеризацией альтернативу Redis sentinel?". Это действительно полностью зависит от вашего варианта использования. Redis Cluster не является решением HA - это многопользовательское решение/более крупное, чем-ram. Если ваша цель - просто HA, то она, скорее всего, вам не подходит. Redis Cluster поставляется с ограничениями, особенно в отношении операций с несколькими ключами, поэтому это не обязательно простая операция "просто использовать кластер".

Если вы считаете, что три узла, на которых запущен Redis (и три запущенных дозорных), расточительны, вы, скорее всего, будете кластером, чтобы он был еще больше, так как он требует больше ресурсов.

Вопросы, которые вы задали, вероятно, слишком широки и основаны на мнениях, чтобы выжить, как написано. Если у вас есть конкретный случай/проблема, которую вы разрабатываете, пожалуйста, уточните это, чтобы мы могли предоставить конкретную помощь и информацию.

Обновление для специфики:

Для правильного управления отказоустойчивостью в вашем сценарии я бы пошел с тремя часовыми, один на вашем сервере JBoss. Если у вас есть 3 узла JBoss, пойдите по одному на каждый. У меня был бы Redis pod (master + slave) на отдельных узлах и позволял сторонам управлять откатом.

Оттуда речь идет о подключении JBoss/Jedis к использованию Sentinel для управления информацией и подключениями. Поскольку я не использую те, быстрый поиск показывает, что у Jedis есть поддержка, вам просто нужно его правильно настроить. Некоторые примеры, которые я нашел, находятся на Ищете пример Джедаев с Sentinel и https://github.com/xetorthio/jedis/issues/725 которые говорят о JedisSentinelPool, который является маршрутом для использования пула.

Когда Sentinel выполняет переход на другой ресурс, клиенты будут отключены, и Jedis будет (должен?) обрабатывать пересоединение, задав Странам, которым принадлежит текущий мастер.

Ответ 2

Рекомендация везде должна начинаться с нечетного числа экземпляров, не используя два или несколько из двух. Это было исправлено, но позволяет исправить некоторые другие моменты.

Во-первых, сказать, что Sentinel обеспечивает переход на другой ресурс без HA, является ложным. Когда вы выполняете переход на другой ресурс, у вас есть HA с дополнительным преимуществом репликации состояния приложения. Различие заключается в том, что вы можете иметь HA в системе без репликации (это HA, но это не является отказоустойчивым).

Во-вторых, запуск сторожевого устройства на том же компьютере, что и его целевой экземпляр redis, не является "плохой настройкой": если вы потеряете ваш дозорный или ваш экземпляр redis или всю машину, результаты будут одинаковыми. Вероятно, поэтому каждый пример таких конфигураций показывает, как работает на одной машине.

Ответ 3

Это не прямой ответ на ваш вопрос, но подумайте, что это полезная информация для новичков Redis, таких как я. Также этот вопрос появляется как первая ссылка в google при поиске в "Redis cluster vs sentinel".

Redis Sentinel - это имя решения Redis с высокой доступностью... Он не имеет ничего общего с Redis Cluster и предназначен для использования людям, которым не нужен Redis Cluster, а просто способ выполнить автоматический сбой, когда мастер-экземпляр не работает правильно.

Взято из проекта проекта Redis Sentinel 1.3

Это не obviuos, когда вы новичок в Redis и реализуете решение для отказоустойчивости. Официальные документы о sentinel и кластеризации не сравниваются друг с другом, поэтому трудно выбрать правильный путь без чтения тонны документации.

Ответ 4

Это мое понимание после того, как я ударился головой о документацию.

Sentinel - это своеобразное решение с горячим резервированием, в котором рабы хранятся тиражируемыми и готовыми к продвижению в любое время. Тем не менее, он не поддерживает многоузловую запись. Рабы могут быть настроены для операций чтения. Неверно, что Sentinel не предоставляет HA, у него есть все особенности типичного активно-пассивного кластера (хотя это неправильный термин для использования здесь).

Кластер Redis - это более или менее распределенное решение, работающее поверх сегментов. Каждый кусок данных распределяется между ведущими и подчиненными узлами. Минимальный коэффициент репликации 2 гарантирует, что у вас есть два активных шарда, доступных для главного и подчиненного. Если вы знаете шардинг в Mongo или Elasticsearch, его будет легко догнать.

Ответ 5

Redis может работать в секционированном кластере (со многими мастерами и подчиненными из этих мастеров) или в режиме одного экземпляра (один мастер с подчиненными репликами).
Ссылка здесь говорит:

При использовании Redis в режиме одного экземпляра, в котором один сервер Redis управляет всей неразделенной базой данных, Redis Sentinel используется для управления ее доступностью.

Это также говорит:

Кластер Redis, в котором данные распределены между несколькими первичными экземплярами, самостоятельно управляет доступностью и не требует дополнительных компонентов.

Таким образом, HA может быть обеспечено в 2 упомянутых сценариях. Надеюсь, что это очищает сомнения. Редис кластер и часовые не являются альтернативой друг другу. Они просто используются для обеспечения высокой доступности в разных случаях разделенного или неразделенного мастера.