Я постараюсь ответить на некоторые ваши вопросы, но сначала позвольте мне описать различные варианты развертывания Redis.Redis имеет три основных развертывания: один узел, страж и кластер.
- Один узел - базовое решение, в котором вы запускаете один процесс, выполняющий Redis.Он не масштабируется и не является высокодоступным.
- Redis Sentinel - Развертывание, состоящее из нескольких узлов, один из которых выбран в качестве главного, а остальные являются подчиненными.Это добавляет высокую доступность, так как в случае сбоя главного устройства один из подчиненных автоматически переводится в главный.Он не масштабируется, так как главный узел является единственным узлом, который может записывать данные.Вы можете настроить клиенты так, чтобы они перенаправляли запросы на чтение на ведомые устройства, которые будут нести часть нагрузки от главного устройства.Однако в этом случае ведомые могут возвращать устаревшие данные, поскольку они реплицируют мастер асинхронно.
- Redis Cluster - Развертывание, состоящее как минимум из 6 узлов (3 мастера и 3 подчиненных).где данные хранятся между мастерами.Он высокодоступен, поскольку в случае отказа мастера один из его рабов будет автоматически переведен в режим мастера.Это масштабируемо, так как вы можете добавить больше узлов и перенастроить данные, чтобы новые узлы взяли на себя часть нагрузки.
Итак, чтобы ответить на ваши вопросы:
- Преимущества Sentinel перед Redis Cluster:
- Аппаратное обеспечение - вы можете настроить полностью рабочее развертывание Sentinel с помощью трехузлы.Для Redis Cluster требуется не менее шести узлов.
- Простота - обычно ее проще обслуживать и настраивать.
- Преимущества 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