Масштабирование шардов в режиме кластера
Архитектура Redis Cluster обеспечивает горизонтальное масштабирование за счёт распределения данных по нескольким шардам. По мере изменения требований к нагрузке может потребоваться корректировка количества шардов для оптимизации производительности, использования ресурсов и распределения данных. В этом документе изложены технические аспекты, требования к ресурсам и рекомендации по выполнению операций масштабирования шардов.
Содержание
Предварительные условияТребования к ресурсамОперации масштабирования вверхОперации масштабирования внизПроцедураПодключение клиентов во время масштабированияПродолжительность операцииПредварительные условия
Перед изменением конфигурации шардов в Redis Cluster необходимо убедиться в выполнении следующих условий:
- Состояние работы: кластер должен находиться в стабильном состоянии
Running, все узлы должны функционировать корректно. - Доступность ресурсов: в кластере должно быть достаточно памяти для перераспределения данных в процессе масштабирования.
- Окно обслуживания: планируйте операции масштабирования в периоды низкой нагрузки, чтобы минимизировать возможное влияние на сервис.
- Пропускная способность сети: убедитесь в наличии достаточной пропускной способности сети между узлами Redis для эффективной миграции данных.
- Стабильность инфраструктуры: обеспечьте стабильность инфраструктуры, чтобы избежать сбоев узлов во время масштабирования, что может повлиять на целостность данных.
Требования к ресурсам
Правильное планирование ресурсов критично для успешного масштабирования шардов. Важно понимать следующие понятия, связанные с памятью:
Операции масштабирования вверх
При увеличении количества шардов каждый экземпляр должен удовлетворять условию:
Эта формула гарантирует успешное добавление шардов при сбалансированном распределении данных. В средах с несбалансированными данными или наличием BigKeys требуется дополнительное планирование ресурсов, так как миграция данных может сконцентрировать нагрузку на отдельных шардах.
Операции масштабирования вниз
При уменьшении количества шардов каждый оставшийся экземпляр должен удовлетворять условию:
Эта формула учитывает перераспределение данных с выводимых шардов. В отличие от масштабирования вверх, операции уменьшения количества шардов предъявляют жёсткие требования к ресурсам для обеспечения работы в условиях возможной концентрации данных, даже при несбалансированном распределении.
Процедура
Масштабирование шардов управляется через поле spec.replicas.cluster.shard в пользовательском ресурсе Redis (подробные спецификации параметров см. в API documentation).
Для отслеживания прогресса операции масштабирования:
После отправки изменения конфигурации шардов система переводит экземпляр в состояние Data Balancing и самостоятельно управляет процессом миграции слотов. В этом состоянии все изменения экземпляра, кроме удаления, запрещены.
Подключение клиентов во время масштабирования
Во время перераспределения шардов миграция слотов Redis влияет на обработку клиентских запросов следующим образом:
-
Когда клиент запрашивает доступ к ключу в слоте, помеченном для миграции:
- Если ключ уже мигрировал на целевой шард, Redis возвращает ошибку перенаправления
MOVED - Если ключ ещё не мигрировал, запрос обрабатывается исходным шардом
- Если ключ уже мигрировал на целевой шард, Redis возвращает ошибку перенаправления
-
Клиенты, поддерживающие работу с Redis Cluster, автоматически обрабатывают ошибки перенаправления, повторно отправляя запрос на нужный шард
Рекомендация по производительности: масштабирование шардов в периоды высокой нагрузки может удвоить фактический объём клиентских запросов из-за перенаправлений, что потенциально создаёт сетевые заторы. По возможности планируйте операции масштабирования на периоды сниженной активности.
Продолжительность операции
Время, необходимое для завершения операций масштабирования шардов, зависит от множества факторов:
- Общий объём данных, подлежащих перераспределению
- Пропускная способность сети между узлами
- Характеристики ресурсов экземпляров
- Наличие BigKeys, требующих миграции
- Интенсивность текущей нагрузки
Обычно операции масштабирования шардов занимают от 20 минут до нескольких часов. Большие объёмы данных и сложные схемы миграции увеличивают продолжительность.