Resharding

Тема дорожной карты · Redis

Перераспределение слотов в Redis Cluster перемещает хэш-слоты между узлами для перебалансировки данных или адаптации к изменениям топологии — добавлению или удалению узлов. Команда redis-cli --cluster reshard в интерактивном или неинтерактивном режиме мигрирует заданное количество хэш-слотов из исходного узла в целевой, используя внутри команду MIGRATE. Во время перераспределения владение слотами обновляется в состоянии кластера, а перенаправления ASK и MOVED, получаемые клиентами, прозрачно обрабатываются клиентскими библиотеками Redis. Команда redis-cli --cluster rebalance автоматически распределяет слоты по всем узлам с учётом их веса. Перераспределение без простоя возможно, поскольку Redis мигрирует ключи по одному, пока оба узла — источник и цель — остаются доступными для чтения и записи.

Как это работает

Resharding шардирует данные между нодами через 16384 слота. Каждый ключ хешируется в слот; каждая master-нода владеет диапазоном слотов. Реплики бекапят masters (sentinel-less HA встроен). Клиенты cluster-aware: кешируют map слот→нода, следуют MOVED/ASK редиректам. Multi-key команды работают только на ключах в одном слоте (используйте {tag} в ключах для force same-slot: user:{42}:profile и user:{42}:posts).

Когда применять

Cluster — когда (а) данные превышают RAM одного хоста, (б) write throughput выше, чем одна master может, (в) нужен авто-failover без Sentinel. Для большинства приложений с < 100GB working set — один primary + реплика (с Sentinel или без) проще и достаточно. Тестируйте cluster failover до зависимости от него; cluster-операции сложнее single-node.

Типичные ошибки

Ловушки Resharding: multi-key команды (MGET, SINTER) падают, потому что ключи в разных слотах (используйте {hashtag} для co-locate); старые клиенты не понимают cluster mode (тихие замедления от MOVED retry loop); ребалансировка в production без наблюдения за памятью + миграцией слотов (один move слота кратко стопит записи).

Связанные понятия

Полезные ресурсы