Redis преимущества Sentinel и Cluster - PullRequest
0 голосов
/ 07 июня 2019

Я планирую создать высокодоступный кластер Redis. Прочитав много статей о создании кластера Redis, я запутался. Так что же такое

  • преимущества кластера Redis Sentinel Master1 Slave1 Slave2? Является ли он более надежным как кластер Redis Multinode Sharded?
  • преимущества кластера Redis Multinode Sharded? Является ли он более надежным в качестве кластера Redis Sentinel Master1 Slave1 Slave2?

Дополнительные вопросы к кластеру Redis Sentinel Master1 Slave1 Slave2:

  • когда у меня есть 1 ведущий и два ведомых, и трафик становится все выше и выше, так что этот кластер будет маленьким, как я могу увеличить его?

Дополнительные вопросы к кластеру Redis Multinode Sharded:

  • Почему так много демонстраций с запуском кластера на одном экземпляре, но на разных портах? Это не имеет смысла для меня.
  • когда у меня есть кластер с 4 мастерами и 4 репликами, как приложение или клиент могут быть уверены, что записывают в кластер? Когда Master1 и Slave1 умирают, но мое приложение всегда пишет на IP-адрес Master1, оно больше не будет работать. Какие существуют решения для реализации хорошо защищенного кластера, чтобы приложения могли найти его с одним ip и портом? Keepalived? HAproxy
  • когда я использую 4 основных мастера, например, Keepalived - разве это не отменяет разных мастеров?
  • Кроме того, мне нужно понять, почему многоузловой кластер предназначен только для решений, в которых необходимо будет записывать больше данных по мере доступности памяти. Зачем? Для меня настройка мультимастера звучит хорошо, чтобы быть масштабируемой.
  • Правильно ли, что установка кластерного кластера не поддерживает многопользовательские операции, когда кластер не находится в режиме кэширования?

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

1 Ответ

1 голос
/ 24 июля 2019

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

  • Один узел - базовое решение, в котором вы запускаете один процесс, выполняющий Redis.Он не масштабируется и не является высокодоступным.
  • Redis Sentinel - Развертывание, состоящее из нескольких узлов, один из которых выбран в качестве главного, а остальные являются подчиненными.Это добавляет высокую доступность, так как в случае сбоя главного устройства один из подчиненных автоматически переводится в главный.Он не масштабируется, так как главный узел является единственным узлом, который может записывать данные.Вы можете настроить клиенты так, чтобы они перенаправляли запросы на чтение на ведомые устройства, которые будут нести часть нагрузки от главного устройства.Однако в этом случае ведомые могут возвращать устаревшие данные, поскольку они реплицируют мастер асинхронно.
  • Redis Cluster - Развертывание, состоящее как минимум из 6 узлов (3 мастера и 3 подчиненных).где данные хранятся между мастерами.Он высокодоступен, поскольку в случае отказа мастера один из его рабов будет автоматически переведен в режим мастера.Это масштабируемо, так как вы можете добавить больше узлов и перенастроить данные, чтобы новые узлы взяли на себя часть нагрузки.

Итак, чтобы ответить на ваши вопросы:

  1. Преимущества Sentinel перед Redis Cluster:
    • Аппаратное обеспечение - вы можете настроить полностью рабочее развертывание Sentinel с помощью трехузлы.Для Redis Cluster требуется не менее шести узлов.
    • Простота - обычно ее проще обслуживать и настраивать.
  2. Преимущества Redis Cluster перед Sentinel в том, что он масштабируемый.

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

Если один узел не может обработать ожидаемую нагрузку, вы должны перейти к развертыванию кластера.

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

Redis Cluster, работающий на одном узле с несколькими портами, предназначен только для разработки.и демонстрационные цели.В производстве это бесполезно.

В развертывании Redis Cluster клиенты должны иметь сетевой доступ ко всем узлам (и только узлу Master1).Это потому, что данные хранятся между мастерами.В случае, если клиент пытается записать данные в Master1, но Master2 является владельцем данных, Master1 вернет сообщение MOVE клиенту, направляя его для отправки запроса в Master2.Вы не можете иметь один HAProxy перед всеми узлами Redis.

Тот же ответ, что и в 5, в развертывании кластера клиенты должны иметь прямое соединение со всеми хозяевами и ведомыми устройствами не через LB или Keepalived.

Не уверен, что я полностью понял ваш вопрос, но Redis Cluster - единственное решение для Redis, которое является масштабируемым.

Поддержка развертывания Redis Cluster multikeyоперации только тогда, когда все ключи находятся в одном узле.Вы можете использовать «хэш-теги» для принудительной обработки нескольких ключей одним и тем же мастером.

Несколько полезных ссылок, которые помогут вам лучше понять его:

Описание включеноразличные варианты развертывания Redis: https://blog.octo.com/en/what-redis-deployment-do-you-need

Подробное описание архитектуры кластера Redis: https://blog.usejournal.com/first-step-to-redis-cluster-7712e1c31847

...