Команда CLUSTER SLOTS
Команда CLUSTER SLOTS — это команда в системе управления базами данных Redis, предназначенная для получения информации о распределении хеш-слотов между узлами кластера. Она относится к группе команд управления кластером (Cluster Commands) и используется для диагностики, мониторинга и настройки кластерной конфигурации.
Назначение и область применения
Команда CLUSTER SLOTS позволяет клиенту или администратору Redis получить актуальную карту распределения 16384 хеш-слотов (hash slots) между узлами кластера. Хеш-слоты — это единицы шардирования данных в Redis Cluster: каждый ключ отображается на один из 16384 слотов с помощью хеш-функции, а каждый слот закреплён за одним или несколькими узлами (основным и репликами). Команда возвращает массив, где каждый элемент описывает диапазон слотов и список узлов, обслуживающих этот диапазон.
Синтаксис и параметры
Команда не имеет обязательных аргументов. Выполняется на любом узле кластера:
`` CLUSTER SLOTS ``
Ответ возвращается в виде массива массивов (вложенных списков). Каждый вложенный массив содержит:
- Начальный номер слота (целое число от 0 до 16383).
- Конечный номер слота (целое число, включительно).
- Для каждого узла, обслуживающего данный диапазон (основной и реплики), — массив из трёх элементов: IP-адрес (строка), порт (целое число) и идентификатор узла (строка, hex-строка длиной 40 символов).
Пример ответа (в формате Redis RESP):
`` 1) 1) (integer) 0 2) (integer) 5460 3) 1) "192.168.1.1" 2) (integer) 6379 3) "abc123..." 4) 1) "192.168.1.2" 2) (integer) 6380 3) "def456..." 2) 1) (integer) 5461 2) (integer) 10922 3) 1) "192.168.1.3" 2) (integer) 6379 3) "ghi789..." ... ``
Поведение в различных состояниях кластера
Нормальное состояние (кластер работает)
В ответе перечисляются все слоты, распределённые между узлами. Каждый слот имеет хотя бы один основной узел (master) и, опционально, одну или несколько реплик (replicas). Реплики перечисляются после основного узла в том же массиве.
Неполное покрытие (не все слоты назначены)
Если кластер находится в неполном состоянии (например, после добавления нового узла до перераспределения слотов), команда возвращает только те слоты, которые уже назначены. Слоты без назначения (unassigned slots) не включаются в вывод. Это может привести к тому, что общее количество слотов в ответе будет меньше 16384.
Кластер в состоянии ошибки (fail state)
Если какой-либо узел кластера недоступен или находится в состоянии ошибки, команда может вернуть информацию о слотах, обслуживаемых этим узлом, но с пометкой о недоступности. В некоторых версиях Redis (до 7.0) команда могла возвращать пустой массив, если кластер не был полностью инициализирован. Начиная с Redis 7.0, поведение было изменено: команда возвращает доступные слоты, даже если часть узлов недоступна.
Режим кластера отключён
Если Redis работает в standalone-режиме (без кластеризации), команда CLUSTER SLOTS возвращает ошибку: ERR This instance has cluster support disabled.
Отличия от других команд управления кластером
- CLUSTER NODES — возвращает текстовую строку с информацией о каждом узле кластера (включая состояние, роль, слоты). Формат менее структурирован, но содержит больше деталей (например, флаги состояния, время последнего пинга).
- CLUSTER KEYSLOT — возвращает номер слота для заданного ключа. Полезна для определения, на каком узле хранится конкретный ключ.
- CLUSTER COUNTKEYSINSLOT — возвращает количество ключей в заданном слоте на текущем узле.
- CLUSTER GETKEYSINSLOT — возвращает список ключей в заданном слоте на текущем узле.
Команда CLUSTER SLOTS отличается тем, что предоставляет полную карту распределения слотов в структурированном виде, удобном для программной обработки.
Применение
Клиентские библиотеки
Многие Redis-клиенты (например, redis-py, ioredis, StackExchange.Redis) используют CLUSTER SLOTS для автоматического определения топологии кластера. При первом подключении клиент выполняет эту команду, чтобы узнать, какие узлы обслуживают какие слоты, и в дальнейшем направляет запросы напрямую на соответствующий узел (без проксирования). Это позволяет реализовать интеллектуальную маршрутизацию запросов (smart client).
Мониторинг и администрирование
- Проверка распределения слотов: администратор может убедиться, что все слоты назначены и сбалансированы между узлами.
- Обнаружение недоступных узлов: если узел, указанный в ответе, недоступен, это может сигнализировать о проблемах в кластере.
- Планирование миграции: перед перемещением слотов (с помощью
CLUSTER SETSLOT) можно получить текущую карту для оценки нагрузки.
Отладка
При возникновении ошибок MOVED или ASK (перенаправление запросов) клиент может выполнить CLUSTER SLOTS для обновления локальной карты слотов.
Изменения в версиях Redis
- Redis 3.0 — команда введена вместе с поддержкой кластеризации.
- Redis 5.0 — в ответ добавлено поле
idузла (ранее возвращались только IP и порт). - Redis 7.0 — изменено поведение при неполном покрытии: теперь возвращаются только назначенные слоты, а не пустой массив. Также добавлена поддержка возврата информации о репликах в том же массиве, что и основной узел (ранее реплики могли быть опущены).
Ограничения и особенности
- Команда выполняется на одном узле и возвращает информацию, известную этому узлу. В случае рассинхронизации состояния кластера (например, из-за сетевого разделения) ответ может быть неполным или устаревшим.
- Для больших кластеров (сотни узлов) ответ может быть объёмным, что увеличивает сетевую нагрузку при частом выполнении.
- Команда не требует аутентификации (если аутентификация не настроена на уровне Redis), но доступ к ней может быть ограничен через ACL (Access Control Lists) в Redis 6.0 и выше.
Пример использования
``bash redis-cli -h 192.168.1.1 -p 6379 CLUSTER SLOTS ``
Вывод (сокращённый): `` 1) 1) (integer) 0 2) (integer) 5460 3) 1) "192.168.1.1" 2) (integer) 6379 3) "abc123..." 4) 1) "192.168.1.2" 2) (integer) 6380 3) "def456..." 2) 1) (integer) 5461 2) (integer) 10922 3) 1) "192.168.1.3" 2) (integer) 6379 3) "ghi789..." ... ``
Источники
- Документация Redis: «CLUSTER SLOTS» (redis.io/commands/cluster-slots)
- Redis Cluster Specification (redis.io/topics/cluster-spec)
- «Redis in Action» by Josiah L. Carlson (2013)
- «Redis: The Complete Developer's Guide» by Stephen Braitsch (2021)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →