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

Когда одного сервера Redis перестаёт хватать, а отказоустойчивость становится критичной, мы настраиваем Redis Cluster: шардируем данные, распределяем нагрузку и обеспечиваем автоматический failover. Наша команда реализует проект под ключ — от проектирования слотов до внедрения и последующей поддержки, чтобы ваша инфраструктура работала стабильно и масштабировалась вместе с бизнесом.

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

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

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

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

Отметим: когда 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. Обращайтесь — поможем масштабировать ваш кэш.

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060