Налаштування 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
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • 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. Звертайтеся — допоможемо масштабувати ваш кеш.