Spec-Zone.ru › Redis

КЛАСТЕР

CLUSTER NODES
Синтаксис
CLUSTER NODES
Доступно с версии:
3.0.0
Сложность по времени:
O(N), где N — общее число узлов кластера
Категории ACL:
@slow,

Каждый узел в кластере Redis имеет собственное представление текущей конфигурации кластера, которое включает набор известных узлов, состояние соединения с ними, их флаги, свойства, назначенные слоты и т. д.

CLUSTER NODES предоставляет всю эту информацию, то есть текущую конфигурацию кластера узла, к которому мы обращаемся, в формате сериализации, который совпадает с форматом, используемым самим Redis Cluster для хранения состояния кластера на диске (хотя состояние кластера на диске дополнительно содержит несколько полей).

Обратите внимание, что клиенты, желающие получить отображение между хэш-слотами кластера и адресами узлов, обычно должны использовать CLUSTER SLOTS вместо этого. CLUSTER NODES, предоставляющий больше информации, используется для административных задач, отладки и проверки конфигурации. Его также использует redis-cli для управления кластером.

Формат сериализации

Результат команды — это просто строка CSV, разделённая пробелами, где каждая строка представляет узел в кластере. Начиная с версии 7.2.0, результат команды всегда содержит дополнительное поле с названием shard-id. Ниже приведен пример вывода в Redis 7.2.0.

07c37dfeb235213a872192d90877d0cd55635b91 127.0.0.1:30004@31004,,shard-id=69bc080733d1355567173199cff4a6a039a2f024 slave e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca 0 1426238317239 4 connected
67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 127.0.0.1:30002@31002,,shard-id=114f6674a35b84949fe567f5dfd41415ee776261 master - 0 1426238316232 2 connected 5461-10922
292f8b365bb7edb5e285caf0b7e6ddc7265d2f4f 127.0.0.1:30003@31003,,shard-id=fdb36c73e72dd027bc19811b7c219ef6e55c550e master - 0 1426238318243 3 connected 10923-16383
6ec23923021cf3ffec47632106199cb7f496ce01 127.0.0.1:30005@31005,,shard-id=114f6674a35b84949fe567f5dfd41415ee776261 slave 67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 0 1426238316232 5 connected
824fe116063bc5fcf9f4ffd895bc17aee7731ac3 127.0.0.1:30006@31006,,shard-id=fdb36c73e72dd027bc19811b7c219ef6e55c550e slave 292f8b365bb7edb5e285caf0b7e6ddc7265d2f4f 0 1426238317741 6 connected
e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca 127.0.0.1:30001@31001,,shard-id=69bc080733d1355567173199cff4a6a039a2f024 myself,master - 0 0 1 connected 0-5460

Каждая строка состоит из следующих полей:

<id> <ip:port@cport[,hostname[,auxiliary_field=value]*]> <flags> <master> <ping-sent> <pong-recv> <config-epoch> <link-state> <slot> <slot> ... <slot>

Значение каждого поля следующее:

  1. id: Идентификатор узла, 40-символьная глобально уникальная строка, сгенерированная при создании узла и не изменяемая в дальнейшем (за исключением случаев, когда используется CLUSTER RESET HARD)
  2. ip:port@cport: Адрес узла, к которому клиенты должны обращаться для выполнения запросов.
  3. hostname: Читабельная строка имени, которая может быть настроена через настройку cluster-annouce-hostname. Максимальная длина строки составляет 256 символов, не считая нулевого терминатора. Имя может содержать только ASCII-буквы, цифры, символы '-', и '.'.
  4. [,auxiliary_field=value]*: Список значений пар «ключ-значение», разделённых запятыми, которые представляют различные свойства узла, такие как shard-id. Нет внутреннего порядка среди дополнительных полей. Дополнительные поля могут появляться в разных позициях в списке в разных версиях.
  5. flags: Список флагов, разделённых запятыми: myself, master, slave, fail?, fail, handshake, noaddr, nofailover, noflags. Флаги описаны ниже.
  6. master: Если узел является репликацией, и первичный узел известен, идентификатор первичного узла, иначе символ '-'.
  7. ping-sent: Время Unix (в миллисекундах), в которое был отправлен текущий активный запрос пинга, или ноль, если нет ожидающих запросов пинга.
  8. pong-recv: Время Unix (в миллисекундах), в которое был получен последний ответ pong.
  9. config-epoch: Эпоха (или версия) конфигурации текущего узла (или текущего первичного узла, если узел является репликацией). Каждый раз при смене узла создаётся новая, уникальная, монотонно возрастающая эпоха конфигурации. Если несколько узлов утверждают, что обслуживают те же хэш-слоты, то побеждает тот, у которого более высокая эпоха конфигурации.
  10. link-state: Состояние канала, используемого для межузлового канала кластера. Используйте этот канал для связи с узлом. Может быть connected или disconnected.
  11. slot: Номер или диапазон хэш-слота. Начиная с 9-го аргумента, но в общей сложности может быть до 16384 записей (предел никогда не достигается). Это список хэш-слотов, обслуживаемых этим узлом. Если запись — это просто число, оно анализируется как таковое. Если это диапазон, он имеет вид start-end, что означает, что узел отвечает за все хэш-слоты от start до end включительно.

Дополнительные поля:

  • shard-id: 40-символьная глобально уникальная строка, сгенерированная при создании узла. Идентификатор фрагмента узла изменяется только тогда, когда узел присоединяется к другому фрагменту с помощью cluster replicate, и тогда идентификатор фрагмента узла обновляется на идентификатор фрагмента его первичного узла.

Флаги:

  • myself: Узел, к которому вы обращаетесь.
  • master: Узел является первичным.
  • slave: Узел является репликацией.
  • fail?: Узел находится в состоянии PFAIL. Недоступен для узла, к которому вы обращаетесь, но всё ещё логически доступен (не в состоянии FAIL).
  • fail: Узел находится в состоянии FAIL. Он был недоступен для нескольких узлов, которые повысили состояние PFAIL до FAIL.
  • handshake: Ненадёжный узел, происходит рукопожатие.
  • noaddr: Для этого узла не известен ни один адрес.
  • nofailover: Реплика не будет пытаться переключиться на первичный узел.
  • noflags: Флагов нет.

Примечания по опубликованным эпохам конфигурации

Реплики передают эпохи конфигурации своих первичных узлов (чтобы получить сообщение UPDATE в случае, если они устарели), поэтому реальную эпоху конфигурации реплики (которая в большинстве случаев бессмысленна, так как они не обслуживают хэш-слоты) можно получить, только проверив узел, помеченный как myself, который является записью узла, к которому мы обращаемся, чтобы получить вывод CLUSTER NODES. Эпохи других реплик отражают то, что они публикуют в пакетах с эхо-сигналами, то есть эпоху конфигурации первичных узлов, которые они в настоящее время дублируют.

Специальные записи слотов

Обычно хэш-слоты, связанные с данным узлом, имеют один из следующих форматов, как уже объяснялось выше:

  1. Единое число: 3894
  2. Диапазон: 3900-4000

Однако хэш-слоты узла могут быть в специальном состоянии, используемом для передачи ошибок после перезапуска узла (несовпадение ключей в файлах AOF/RDB и конфигурации хэш-слотов узла) или когда в процессе перераспределение слотов. Эти два состояния — importing и migrating.

Значение этих двух состояний описано в спецификации Redis, но суть заключается в следующем:

  • Слоты importing ещё не являются частью хэш-слотов узла, происходит миграция. Узел будет принимать запросы об этих слотах только если используется команда ASK.
  • Слоты migrating назначены узлу, но мигрируют на другой узел. Узел будет принимать запросы, если все ключи в запросе уже существуют, в противном случае он выведет то, что называется перенаправлением ASK, чтобы принудительно создать новые ключи непосредственно на узле-получателе.

Слоты importing и migrating выводятся в выводе CLUSTER NODES следующим образом:

  • Importing slot: [slot_number-<-importing_from_node_id]
  • Migrating slot: [slot_number->-migrating_to_node_id]

Ниже приведены несколько примеров слотов importing и migrating:

  • [93-<-292f8b365bb7edb5e285caf0b7e6ddc7265d2f4f]
  • [1002-<-67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1]
  • [77->-e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca]
  • [16311->-292f8b365bb7edb5e285caf0b7e6ddc7265d2f4f]

Обратите внимание, что формат не содержит пробелов, поэтому формат вывода CLUSTER NODES — это обычный CSV с разделителем пробел, даже когда выводятся эти специальные слоты. Однако полный анализатор формата должен уметь обрабатывать их.

Обратите внимание:

  1. Слоты миграции и импорта добавляются только к узлу, помеченному как myself . Эта информация локальна для узла и относится к его собственным слотам.
  2. Слоты миграции и импорта предоставляются как дополнительная информация. Если узлу назначен определённый хэш-слот, он также будет обычным числом в списке хэш-слотов, поэтому клиенты, не знающие о миграциях хэш-слотов, могут просто пропустить эти специальные поля.

Возвращаемое значение

Ответ в виде строки с указанием объёма: Сериализованная конфигурация кластера.

Замечание о слове slave, используемом в этой странице справки и названии команды: Начиная с версии Redis 5, проект Redis больше не использует слово slave (кроме случаев обратной совместимости). К сожалению, в этой команде слово slave является частью протокола, поэтому мы сможем удалить такие вхождения только тогда, когда этот API будет естественным образом устаревать.

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/cluster-nodes/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API