Управление шардами MongoDB
Кластер можно создать шардированным либо включить шардирование позже. Затем можно добавлять и настраивать шарды.
Для повышения доступности шарды должны состоять как минимум из трех хостов MONGOD
. Небольшие коллекции обычно нет смысла шардировать: скорость обработки запросов будет выше в обычном кластере реплик.
Внимание
После того как шардирование кластера включено:
- Выключить шардирование невозможно. В кластере всегда будет поддерживаться минимальное количество хостов
MONGOS
,MONGOCFG
илиMONGOINFRA
в зависимости от типа шардирования. - Обращаться к базам данных следует только через хосты
MONGOS
илиMONGOINFRA
, которые маршрутизируют запросы к шардам. Измените адреса хостов в коде ваших приложений соответствующим образом.
Включить шардирование
Через интерфейс Managed Service for MongoDB вы можете быстро создать инфраструктуру шардирования MongoDB.
О том, как непосредственно шардировать базу и коллекции MongoDB, читайте в разделе Шардирование коллекций.
Для включения шардирования необходимо:
- Не менее трех хостов
MONGOINFRA
при стандартном шардировании. - Не менее двух хостов
MONGOS
и не менее трех хостовMONGOCFG
при расширенном шардировании.
Примечание
Шардирование не поддерживается для хостов с классами b1.medium и b2.medium. Если у вас нет вкладки Шарды, повысьте класс хостов кластера до поддерживаемого.
-
Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. -
Нажмите на имя нужного кластера и выберите вкладку Шарды.
-
Нажмите кнопку Включить.
-
Выберите один из типов шардирования:
-
Стандартный — с использованием хостов
MONGOINFRA
. -
Расширенный — с использованием хостов
MONGOS
иMONGOCFG
.Подробнее см. в разделе Шардирование.
Важно
После включения шардирования будет невозможно поменять его тип.
-
-
Задайте параметры хостов, которые будут обеспечивать доступ к шардированным данным.
-
Нажмите кнопку Включить шардирование.
Кластер начнет обновляться, при этом будут созданы запрошенные хосты, а также первый шард кластера.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Чтобы включить стандартное шардирование кластера с использованием хостов
MONGOINFRA
, выполните команду (в примере приведены не все доступные параметры):yc managed-mongodb cluster enable-sharding \ --cluster-name=<имя_кластера> \ --host type=mongoinfra,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --host type=mongoinfra,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --host type=mongoinfra,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --mongoinfra resource-preset=<класс_хоста>,` `disk-size=<размер_хранилища_ГБ>,` `disk-type=<тип_диска>
Где:
--cluster-name
— имя кластера, которое можно получить со списком кластеров в каталоге.--host
— параметры хоста:type
— тип (MONGOINFRA
).zone-id
— зона доступности.subnet-name
— имя подсети.
--mongoinfra
— параметры хостовMONGOINFRA
:resource-preset
— класс хоста.disk-size
— размер хранилища в гигабайтах.disk-type
— тип диска.
-
Чтобы включить расширенное шардирование кластера с использованием хостов
MONGOS
иMONGOCFG
, выполните команду (в примере приведены не все доступные параметры):yc managed-mongodb cluster enable-sharding \ --cluster-name=<имя_кластера> \ --host type=mongos,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --host type=mongos,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --mongos resource-preset=<класс_хоста>,` `disk-size=<размер_хранилища_ГБ>,` `disk-type=<тип_диска> \ --host type=mongocfg,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --host type=mongocfg,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --host type=mongocfg,` `zone-id=<зона_доступности>,` `subnet-name=<имя_подсети> \ --mongocfg resource-preset=<класс_хоста>,` `disk-size=<размер_хранилища_ГБ>,` `disk-type=<тип_диска>
Где:
--cluster-name
— имя кластера, которое можно получить со списком кластеров в каталоге.--host
— параметры хоста:type
— тип (MONGOS
илиMONGOCFG
).zone-id
— зона доступности.subnet-name
— имя подсети.
--mongos
— параметры хостовMONGOS
:resource-preset
— класс хоста.disk-size
— размер хранилища в гигабайтах.disk-type
— тип диска.
--mongocfg
— параметры хостовMONGOCFG
:resource-preset
— класс хоста.disk-size
— размер хранилища в гигабайтах.disk-type
— тип диска.
-
Убедитесь, что установленная версия провайдера — 0.90 или выше:
terraform version
Пример результата:
Terraform v1.4.6 on darwin_arm64 + provider registry.terraform.io/yandex-cloud/yandex v0.91.0
Если версия ниже
Обновите версию провайдера:
-
В каталоге с конфигурационным файлом
.tf
добавьте аутентификационные данные в переменные окружения. -
В этом же каталоге инициализируйте провайдера с новой версией, указанного в конфигурационном файле:
terraform init -upgrade
-
Проверьте версию провайдера:
terraform version
-
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О создании такого файла читайте в разделе Создание кластера.
-
Добавьте дополнительные ресурсы в конфигурационный файл.
Для стандартного шардирования кластера с использованием хостов
MONGOINFRA
resources_mongoinfra { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongoinfra" } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongoinfra" } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongoinfra" }
Для расширенного шардирования кластера с использованием хостов
MONGOS
иMONGOCFG
resources_mongos { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } resources_mongocfg { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongos" } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongos" } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongocfg" } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongocfg" } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongocfg" }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Чтобы включить шардирование кластера, воспользуйтесь методом REST API enableSharding для ресурса Cluster или вызовом gRPC API ClusterService/EnableSharding и передайте в запросе идентификатор кластера в параметре clusterId
.
Идентификатор кластера можно получить со списком кластеров в каталоге.
Получить список шардов в кластере
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку Шарды.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список шардов в кластере, выполните команду:
yc managed-mongodb shards list --cluster-name <имя_кластера>
Результат:
+------+
| NAME |
+------+
| rs01 |
| rs02 |
+------+
Имя кластера можно запросить со списком кластеров в каталоге.
Чтобы получить список шардов кластера, воспользуйтесь методом REST API listShards для ресурса Cluster или вызовом gRPC API ClusterService/ListShards и передайте в запросе идентификатор кластера в параметре clusterId
.
Идентификатор кластера можно получить со списком кластеров в каталоге.
Создать шард
Количество шардов в кластерах Managed Service for MongoDB ограничено квотами на количество CPU и объем памяти, которые доступны кластерам БД в вашем облаке. Чтобы проверить используемые ресурсы, откройте страницу Квоты
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку Шарды.
- Нажмите кнопку Создать шард.
- Укажите имя шарда и добавьте нужное количество хостов.
- Нажмите кнопку Создать шард.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать шард, выполните команду (в примере приведены не все доступные параметры):
yc managed-mongodb shards add <имя_нового_шарда> \
--cluster-name=<имя_кластера> \
--host zone-id=<зона_доступности>,`
`subnet-name=<имя_подсети>
Где:
--cluster-name
— имя кластера, которое можно получить со списком кластеров в каталоге.--host
— параметры хоста:zone-id
— зона доступности.subnet-name
— имя подсети.
-
Убедитесь, что установленная версия провайдера — 0.90 или выше:
terraform version
Пример результата:
Terraform v1.4.6 on darwin_arm64 + provider registry.terraform.io/yandex-cloud/yandex v0.91.0
Если версия ниже
Обновите версию провайдера:
-
В каталоге с конфигурационным файлом
.tf
добавьте аутентификационные данные в переменные окружения. -
В этом же каталоге инициализируйте провайдера с новой версией, указанного в конфигурационном файле:
terraform init -upgrade
-
Проверьте версию провайдера:
terraform version
-
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О создании такого файла читайте в разделе Создание кластера.
-
Добавьте к описанию кластера Managed Service for MongoDB нужное количество блоков
host
с типомMONGOD
в параметреtype
и именем шарда в параметреshard_name
:resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" type = "mongod" shard_name = "<имя_шарда>" } }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Чтобы создать шард, воспользуйтесь методом REST API addShard для ресурса Cluster или вызовом gRPC API ClusterService/AddShard и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя шарда в параметре
shardName
. - Конфигурацию хоста для шарда в массиве параметров
hostSpecs
.
Имя шарда можно получить со списком шардов в кластере, идентификатор кластера — со списком кластеров в каталоге.
Удалить шард
Вы можете удалить шард из кластера MongoDB, если это не единственный шард. Чтобы заменить единственный шард, сначала создайте новый шард, а затем удалите старый.
Примечание
Для удаляемого шарда будет вызвана операция removeShard
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку Шарды.
- Нажмите на значок
в строке нужного шарда и выберите пункт Удалить. - В открывшемся окне нажмите кнопку Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы удалить шард из кластера, выполните команду:
yc managed-mongodb shards delete <имя_шарда> \
--cluster-name=<имя_кластера>
Имя шарда можно запросить со списком шардов в кластере, имя кластера — со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О создании такого файла читайте в разделе Создание кластера.
-
Удалите из описания кластера Managed Service for MongoDB все блоки
host
, которые относятся к шарду. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Введите слово
yes
и нажмите Enter.-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Чтобы удалить шард, воспользуйтесь методом REST API deleteShard для ресурса Cluster или вызовом gRPC API ClusterService/DeleteShard и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. Чтобы узнать идентификатор, получите список кластеров в каталоге. - Имя удаляемого шарда в параметре
shardName
.