Управление шардами кластера
Вы можете добавлять и удалять шарды кластера, запрашивать список шардов в выбранном кластере, а также выполнять ребалансировку кластера.
Важно
Управлять шардами можно только в шардированном кластере.
Вы можете создать шардированный кластер или включить шардирование в существующем нешардированном кластере.
Получить список шардов в кластере
- В консоли управления
перейдите в каталог с нужным кластером. - Выберите сервис Yandex Managed Service for Valkey™.
- Нажмите на имя нужного кластера, затем выберите вкладку Шарды.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список шардов в кластере, выполните команду:
yc managed-redis shards list --cluster-name <имя_кластера>
Результат:
+--------------+
| NAME |
+--------------+
| test-shard-1 |
| test-shard-2 |
| test-shard-3 |
+--------------+
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.ListShards и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-redis/v1/clusters/<идентификатор_кластера>/shards'
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.ListShards и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.ListShards
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Получить детальную информацию о шарде
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить информацию о шарде, выполните команду:
yc managed-redis shards get <имя_шарда> --cluster-name <имя_кластера>
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.GetShard и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-redis/v1/clusters/<идентификатор_кластера>/shards/<имя_шарда>'
Идентификатор кластера можно запросить со списком кластеров в каталоге, имя шарда — со списком шардов в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.GetShard и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "shard_name": "<имя_шарда>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.GetShard
Идентификатор кластера можно запросить со списком кластеров в каталоге, имя шарда — со списком шардов в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Имя шарда можно запросить со списком шардов в кластере, имя кластера — со списком кластеров в каталоге.
Создать шард
Для кластеров с типом диска local-ssd минимально допустимое количество хостов на шард — два.
Чтобы добавить шард:
- Перейдите на страницу каталога
и выберите сервис Yandex Managed Service for Valkey™. - Нажмите на имя нужного кластера и перейдите на вкладку Шарды.
- Нажмите кнопку Создать шард.
- Укажите Имя шарда.
- В блоке Хосты:
- (Опционально) Отредактируйте настройки хоста.
- Нажмите Добавить хост.
- В поле Зона доступности выберите зону доступности, выберите Подсеть и включите опцию Публичный доступ.
- Нажмите кнопку Создать шард.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Посмотрите описание команды CLI для добавления шардов:
yc managed-redis shards add --help
Чтобы создать шард с двумя хостами: один с публичным доступом, а другой с приоритетом хоста 50
, выполните команду:
yc managed-redis shards add --name=<имя_нового_шарда> \
--cluster-name=<имя_кластера> \
--host zone-id=<зона_доступности>,`
`subnet-name=<имя_подсети>,`
`assign-public-ip=true \
--host zone-id=<зона_доступности>,`
`subnet-name=<имя_подсети>,`
`replica-priority=50
Чтобы добавить шард:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Добавьте к описанию кластера Yandex Managed Service for Valkey™ нужное количество блоков
host
с указанием имени шарда в параметреshard_name
:resource "yandex_mdb_redis_cluster" "<имя_кластера>" { ... host { zone = "<зона_доступности>" subnet_id = <идентификатор_подсети> assign_public_ip = <публичный_доступ> replica_priority = <приоритет_хоста> shard_name = "<имя_шарда>" } }
Где
assign_public_ip
— публичный доступ к хосту:true
илиfalse
. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
- создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_redis_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.AddShard и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-redis/v1/clusters/<идентификатор_кластера>/shards' \ --data '{ "shardName": "<имя_шарда>", "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "shardName": "<имя_шарда>", "replicaPriority": "<приоритет_хоста>", "assignPublicIp": <публичный_доступ_к_хосту_кластера> }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ] }'
Где:
-
shardName
— имя создаваемого шарда. -
hostSpecs
— параметры хоста:zoneId
— зона доступности.subnetId
— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.shardName
— имя шарда для хоста.replicaPriority
— приоритет назначения хоста мастером при выходе из строя основного мастера.assignPublicIp
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
. Включить публичный доступ можно, только если в кластере включена поддержка TLS.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.AddShard и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "shard_name": "<имя_шарда>", "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "shard_name": "<имя_шарда>", "replica_priority": "<приоритет_хоста>", "assign_public_ip": <публичный_доступ_к_хосту_кластера> }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.AddShard
Где:
-
shard_name
— имя создаваемого шарда. -
host_specs
— параметры хоста:zone_id
— зона доступности.subnet_id
— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.shard_name
— имя шарда для хоста.replica_priority
— приоритет назначения хоста мастером при выходе из строя основного мастера.assign_public_ip
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
. Включить публичный доступ можно, только если в кластере включена поддержка TLS.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Чтобы получить возможность размещать данные в новом шарде, запустите ребалансировку кластера Yandex Managed Service for Valkey™.
Удалить шард
Внимание
- Вместе с шардом удаляются все находящиеся в нем хосты.
- Если в кластере два или три шарда, то для удаления шарда воспользуйтесь CLI, Terraform или API.
- В консоли управления
перейдите в каталог с кластером, из которого нужно удалить шард. - Выберите сервис Yandex Managed Service for Valkey™.
- Нажмите на имя нужного кластера и выберите вкладку Шарды.
- В строке нужного шарда нажмите значок
и выберите Удалить. - В открывшемся окне нажмите кнопку Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы удалить шард из кластера, выполните команду:
yc managed-redis shards delete <имя_шарда> \
--cluster-name=<имя_кластера>
Имя шарда можно запросить со списком шардов в кластере, имя кластера — со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Удалите из описания кластера Yandex Managed Service for Valkey™ все блоки
host
, которые относятся к шарду. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Введите слово
yes
и нажмите Enter.-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
- создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_redis_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.DeleteShard и выполните запрос, например, с помощью cURL
:curl \ --request DELETE \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-redis/v1/clusters/<идентификатор_кластера>/shards/<имя_шарда>'
Идентификатор кластера можно запросить со списком кластеров в каталоге, имя шарда — со списком шардов в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.DeleteShard и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "shard_name": "<имя_шарда>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.DeleteShard
Идентификатор кластера можно запросить со списком кластеров в каталоге, имя шарда — со списком шардов в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Ребалансировать кластер
Новый шард создается без хеш-слотов и не может принимать данные. Чтобы данные начали размещаться на новом шарде, выполните ребалансировку кластера — эта процедура выделит часть хеш-слотов кластера новому шарду. Данные в переназначенных хеш-слотах будут перемещены в соответствующий шард. Ребалансировка может выполняться на работающем кластере и не влияет на доступность и целостность данных.
Подробнее см. в разделе Масштабирование.
Чтобы ребалансировать кластер:
- В консоли управления
перейдите в каталог с нужным кластер. - Выберите сервис Yandex Managed Service for Valkey™.
- Нажмите на имя нужного кластера.
- На вкладке Обзор нажмите кнопку Ребалансировать.
Совет
Также можно ребалансировать кластер с помощью кнопки Ребалансировать кластер на вкладке Шарды.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы ребалансировать кластер, выполните команду:
yc managed-redis cluster rebalance \
--name=<имя_кластера>
Имя кластера можно запросить со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.Rebalance и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-redis/v1/clusters/<идентификатор_кластера>:rebalance'
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.Rebalance и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.Rebalance
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.