Настройка Redis Cluster: шардирование и масштабирование

Отметим: когда RAM одного сервера упирается в потолок, а CPU ядро захлёбывается от запросов — одиночный Redis перестаёт справляться. [Redis Cluster](https://en.wikipedia.org/wiki/Redis#Redis_Cluster) решает обе проблемы: данные шардируются по узлам, каждый узел отвечает за свой диапазон ключей. Мы р

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка Redis Cluster: шардирование и масштабирование
Сложный
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    998

Отметим: когда RAM одного сервера упирается в потолок, а CPU ядро захлёбывается от запросов — одиночный Redis перестаёт справляться. Redis Cluster решает обе проблемы: данные шардируются по узлам, каждый узел отвечает за свой диапазон ключей. Мы разбирали кейс, когда e-commerce проект с 50 млн сессий перешёл с standalone на кластер: нагрузка на один инстанс упала с 80% до 15%, а время ответа стабилизировалось на уровне 2 мс. В этой статье расскажем, как настроить кластер из 6 узлов и избежать типовых ошибок.

Наш опыт показывает: без правильного проектирования хэш-тегов и обработки MOVED-ошибок кластер принесёт больше проблем, чем пользы. Гарантируем, что при соблюдении рекомендаций отказоустойчивость достигает 99.9% при условии корректного failover.

Ограничения Redis Cluster и хитрости

Шардирование: от CRC16 до решардинга

Redis Cluster делит пространство ключей на 16 384 хэш-слота. Каждый мастер-узел отвечает за диапазон слотов. При операции с ключом Redis вычисляет CRC16(key) % 16384 и маршрутизирует запрос на нужный узел.

При добавлении нового узла слоты мигрируют между узлами без остановки кластера. Клиент получает MOVED ошибку при обращении к слоту не на тот узел и автоматически переключается. Однако перераспределение слотов требует ручного решардинга — автоматического балансирования нет.

Что такое хэш-теги?

В кластере нельзя выполнять multi-key команды (MGET, MSET, пайплайн), если ключи на разных слотах. Для группировки ключей на одном слоте — хэш-теги: часть ключа в {} используется для вычисления слота. Без хэш-тега вы получите ошибку MOVED. Например, MGET user:1:profile user:2:profile приведёт к ошибке, а с хэш-тегом {user:1}:profile и {user:1}:settings — выполнится корректно.

В Laravel хэш-теги настраиваются через теги:

Cache::tags(["user:{$userId}"])->put("profile", $data, 3600); Cache::tags(["user:{$userId}"])->put("settings", $data, 3600); Cache::tags(["user:{$userId}"])->flush(); 

Сравнение: Standalone Redis vs Redis Cluster

Redis Cluster обрабатывает запросы в два раза быстрее standalone при равном объёме данных за счёт распараллеливания. Sentinel не шардирует данные, а только обеспечивает отказоустойчивость.

Характеристика Standalone Redis Redis Cluster
Максимальный объём данных RAM одного сервера RAM всех мастер-узлов
Пропускная способность 1 ядро CPU N ядер (по числу мастеров)
Отказоустойчивость Replica + Sentinel Автоматический failover реплики
Multi-key операции Поддерживаются Только через хэш-теги
Клиентское перенаправление Нет MOVED/ASK ошибки

Как развернуть кластер: пошагово

Минимальная конфигурация — 6 узлов (3 master + 3 replica). Кластер можно развернуть на bare metal, виртуальных машинах или в Docker-контейнерах. Конфигурация redis-cluster.conf для каждого узла (меняется только port):

port 7001 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 appendonly yes appendfsync everysec bind 0.0.0.0 requirepass ClusterPassword123 masterauth ClusterPassword123 

Запуск 6 инстансов и создание кластера одной командой:

for port in 7001 7002 7003 7004 7005 7006; do mkdir -p /var/redis/$port cp redis-cluster.conf /var/redis/$port/redis.conf sed -i "s/port 7001/port $port/" /var/redis/$port/redis.conf sed -i "s/nodes-7001/nodes-$port/" /var/redis/$port/redis.conf redis-server /var/redis/$port/redis.conf --daemonize yes done redis-cli --cluster create \ 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \ 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \ --cluster-replicas 1 -a ClusterPassword123 

Как настроить отказоустойчивость с минимальным даунтаймом?

При падении мастер-узла реплика автоматически повышается до мастера в течение cluster-node-timeout (по умолчанию 5 секунд). Приложение получает CLUSTERDOWN ошибку в это время — нужна retry-логика.

Пример retry-логики на PHP
$attempts = 0; while ($attempts < 3) { try { $result = $redis->get($key); break; } catch (\RedisClusterException $e) { if (++$attempts >= 3) throw $e; usleep(500000); // 500ms } } 

Для мониторинга используйте Prometheus с redis_exporter — достаточно указать один узел.

Подключение клиентов

В Laravel настройка кластерного подключения в config/database.php:

'redis' => [ 'client' => 'phpredis', 'clusters' => [ 'default' => [ ['host' => '127.0.0.1', 'port' => 7001, 'password' => env('REDIS_PASSWORD')], ['host' => '127.0.0.1', 'port' => 7002], ['host' => '127.0.0.1', 'port' => 7003], ], ], ] 

Управление кластером

Основные команды: cluster info, cluster nodes, --cluster check, --cluster add-node, --cluster reshard. Для полной документации обратитесь к официальной.

Что входит в работу

При заказе настройки Redis Cluster под ключ мы предоставляем:

  • Развёртывание 6-узлового кластера (3 master + 3 replica) на ваших серверах или в облаке.
  • Настройка кластерных клиентов (phpredis, Predis, Laravel).
  • Адаптация кода: внедрение хэш-тегов, обработка MOVED/ASK ошибок, retry-логика.
  • Мониторинг через Prometheus и Grafana.
  • Документация по архитектуре и инструкция по эксплуатации.
  • Обучение команды основам работы с кластером.
Этап Длительность
Развёртывание кластера (6 узлов) 1–2 дня
Настройка клиентов и адаптация кода 1–2 дня
Мониторинг и документация 1 день
Обучение команды 0.5 дня

Свяжитесь с нами для оценки вашего проекта. Получите консультацию по адаптации кода и настройке мониторинга.

Наш опыт

Работаем с Redis в продакшене более 5 лет. Развернули кластеры для 15+ проектов с нагрузкой до 100 тысяч запросов в секунду. Имеем сертификацию Redis Developer. Есть кейсы миграции с Redis Sentinel на Cluster для e-commerce, FinTech и AdTech.

Гарантируем, что после настройки кластер будет работать без сбоев при условии соблюдения SLA. Обращайтесь — поможем масштабировать ваш кэш.