Создание MongoDB-кластера
MongoDB-кластер — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста (первичный хост принимает запросы на запись и асинхронно дублирует изменения на вторичных хостах).
Количество хостов, которые можно создать вместе с MongoDB-кластером, зависит от выбранного варианта хранилища:
- При использовании сетевых дисков вы можете запросить любое количество хостов (от 1 до пределов текущей квоты).
- При использовании SSD-дисков вместе с кластером можно создать не меньше 3 реплик (минимум 3 реплики необходимо, чтобы обеспечить отказоустойчивость). Если после создания кластера доступных ресурсов каталога останется достаточно, вы можете добавить дополнительные реплики.
Примечание
Возможность создания кластеров с версией MongoDB 3.6 будет отключена в марте 2021 г. в связи с прекращением поддержки этой версии разработчиком.
В апреле 2021 г. все существующие кластеры с этой версией MongoDB будут принудительно обновлены до версии 4.0. Рекомендуем заранее перейти на использование актуальных версий MongoDB.
-
В консоли управления выберите каталог, в котором нужно создать кластер БД.
-
Выберите сервис Managed Service for MongoDB.
-
Нажмите кнопку Создать кластер.
-
Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования, в том числе самого сервиса Managed Service for MongoDB. В Prestable-окружении раньше появляются новая функциональность, улучшения и исправления ошибок. При этом не все обновления обеспечивают обратную совместимость.
-
Выберите версию СУБД.
-
Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.
-
В блоке Размер хранилища:
- Выберите тип хранилища — более гибкое сетевое (network-hdd или network-ssd) или более быстрое локальное хранилище (local-ssd). Размер локального хранилища можно менять только с шагом 100 ГБ.
- Выберите объем, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. раздел Резервные копии.
-
В блоке База данных укажите атрибуты БД:
- Имя БД.
- Имя пользователя.
- Пароль пользователя. Минимум 8 символов.
-
В блоке Хосты выберите параметры хостов БД, создаваемых вместе с кластером (помните, что используя SSD-диски при создании MongoDB-кластера можно задать не меньше 3 хостов). Открыв блок Расширенные настройки, вы можете выбрать конкретные подсети для каждого хоста — по умолчанию каждый хост создается в отдельной подсети.
-
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — время по UTC, когда требуется начать резервное копирование кластера (в 24-часовом формате). Если время не задано, резервное копирование начнется в 22:00 UTC.
-
Срок хранения автоматических резервных копий, дней — время, в течение которого нужно хранить резервные копии, созданные автоматически. Если для какой-либо автоматической резервной копии истекает срок хранения, то она удаляется. Значение по умолчанию — 7 дней. Эта функциональность находится на стадии Preview. Подробнее см. в разделе Резервные копии.
-
Окно обслуживания — настройки окна технического обслуживания. С их помощью вы можете указать предпочтительное время начала проведения операций по техническому обслуживанию хостов кластера (например, можно выбрать время, когда кластер наименее нагружен запросами):
- Чтобы указать предпочтительное время начала окна технического обслуживания, выберите пункт по расписанию и задайте нужные день недели и час дня в UTC (Coordinated Universal Time), выбрав значения из выпадающих списков.
- Чтобы разрешить проведение операций технического обслуживания в любое время, выберите пункт произвольное.
Операции по техническому обслуживанию могут включать в себя: обновление версии СУБД, применение патчей и так далее.
-
-
При необходимости задайте дополнительные настройки СУБД:
-
Net → Max incoming connections — максимальное количество входящих соединений.
Минимальное значение —
10
, максимальное значение равно количеству мегабайт RAM на хосте, по умолчанию —1024
.Подробнее см. в документации MongoDB.
-
Operation profiling — настройки профилировщика СУБД. Профилировщик собирает данные о запросах. Затем на основе этих данных формируется стратегия оптимизации запросов.
-
Mode — режим работы профилировщика СУБД:
off
— профилирование выключено;slowOp
(по умолчанию) — собирается информация только о медленных операциях (выполняющихся дольше порога, заданного настройкой Slow op threshold);all
— собирается информация обо всех выполняющихся запросах.
Подробнее см. в документации MongoDB.
-
Slow op threshold — время выполнения операции (в миллисекундах), при превышении которого она будет считаться медленной.
Минимальное значение —
0
, максимальное значение —36000000
(10 часов), значение по умолчанию —300
.Подробнее см. в документации MongoDB.
-
-
Storage — настройки взаимодействия MongoDB с хранилищем данных.
-
Journal → Commit interval — интервал в миллисекундах между сохранениями данных журнала MongoDB на диск.
Минимальное значение —
1
, максимальное значение —500
, значение по умолчанию —300
.Подробнее см. в документации MongoDB.
-
Wired tiger — настройки движка хранения данных:
-
Connection config → Block compressor — настройка сжатия данных. Установленное здесь значение будет работать только для новых коллекций. Также вы можете переопределить его для отдельных коллекций и индексов.
none
— сжатие отключено.snappy
— использование библиотеки snappy для сжатия данных. При выборе этой настройки в большинстве случаев сжатие и распаковка будут быстрее, чем при использовании библиотекиzlib
, но итоговый размер файлов будет на 20—100% больше.zlib
— использование библиотеки zlib для сжатия данных. Этот способ работает медленнееsnappy
, но в большинстве случаев лучше сжимает данные.
Подробнее см. в документации MongoDB.
-
Engine config → Cache size gb — максимальный размер внутреннего кеша, используемого для хранения данных (в гигабайтах). Эта настройка не влияет на объем RAM, используемый для построения индекса.
Минимальное значение —
0.25
, максимальное значение — 90% от объема RAM на хосте, значение по умолчанию — 50% от объема RAM на хосте.Подробнее см. в документации MongoDB.
-
-
-
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex.Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
$ yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Посмотрите описание команды CLI для создания кластера:
$ yc managed-mongodb cluster create --help
-
Укажите параметры кластера в команде создания (в примере приведены только обязательные флаги):
$ yc managed-mongodb cluster create \ --name <имя кластера> \ --environment=<окружение, prestable или production> \ --network-name <имя сети> \ --host zone-id=<зона доступности>,subnet-id=<идентификатор подсети> \ --mongod-resource-preset <класс хоста> \ --user name=<имя пользователя>,password=<пароль пользователя> \ --database name=<имя базы данных> \ --mongod-disk-type <network-hdd | network-ssd | local-ssd> \ --mongod-disk-size <размер хранилища в гигабайтах>
Идентификатор подсети
subnet-id
необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.
Terraform позволяет быстро создать облачную инфраструктуру в Yandex.Cloud. Состав инфраструктуры определяется с помощью конфигурационных файлов, в которых указываются требуемые облачные ресурсы и их параметры.
Если у вас ещё нет Terraform, установите его и настройте провайдер.
Чтобы создать кластер:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
- Кластер базы данных — описание кластера и его хостов.
- Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
- Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_mongodb_cluster" "<имя кластера>" { name = "<имя кластера>" environment = "<окружение, PRESTABLE или PRODUCTION>" network_id = "<идентификатор сети>" cluster_config { version = "версия MongoDB: 4.0, 4.2 или 4.4" } database { name = "<имя базы данных>" } user { name = "<имя пользователя>" password = "<пароль пользователя>" permission { database_name = "<имя базы данных>" } } resources { resource_preset_id = "<класс хоста>" disk_type_id = "<тип хранилища>" disk_size = "<размер хранилища в гигабайтах>" } host { zone_id = "<зона доступности>" subnet_id = "<идентификатор подсети>" } } resource "yandex_vpc_network" "<имя сети>" { name = "<имя сети>" } resource "yandex_vpc_subnet" "<имя подсети>" { name = "<имя подсети>" zone = "<зона доступности>" network_id = "<идентификатор сети>" v4_cidr_blocks = ["<диапазон>"] }
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором создан конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет. Это проверочный этап: ресурсы не будут созданы.
-
-
Создайте кластер.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, следует передать один параметр --host
.
Допустим, нужно создать MongoDB-кластер со следующими характеристиками:
- С именем
mymg
. - В окружении
production
. - В сети
default
. - С одним хостом класса
s2.micro
в подсетиb0rcctk2rvtr8efcch64
, в зоне доступностиru-central1-c
. - С быстрым сетевым хранилищем (
network-ssd
) объемом 20 ГБ. - С одним пользователем,
user1
, с паролемuser1user1
. - С одной базой данных,
db1
.
Запустите следующую команду:
$ yc managed-mongodb cluster create \
--name mymg \
--environment production \
--network-name default \
--mongod-resource-preset s2.micro \
--host zone-id=ru-central1-c,subnet-id=b0rcctk2rvtr8efcch64 \
--mongod-disk-size 20 \
--mongod-disk-type network-ssd \
--user name=user1,password=user1user1 \
--database name=db1
Допустим, нужно создать MongoDB-кластер и сеть для него со следующими характеристиками:
- С именем
mymg
. - Версии
4.4
. - В окружении
PRODUCTION
. - В облаке с идентификатором
b1gq90dgh25bebiu75o
. - В каталоге
myfolder
. - В новой сети
mynet
. - С одним хостом класса
s2.micro
в новой подсетиmysubnet
, в зоне доступностиru-central1-c
. Подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. - С быстрым сетевым хранилищем (
network-ssd
) объемом 20 ГБ. - С одним пользователем,
user1
, с паролемuser1user1
. - С одной базой данных,
db1
.
Конфигурационный файл для такого кластера выглядит так:
provider "yandex" {
token = "<OAuth или статический ключ сервисного аккаунта>"
cloud_id = "b1gq90dgh25bebiu75o"
folder_id = "${data.yandex_resourcemanager_folder.myfolder.id}"
zone = "ru-central1-c"
}
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = "${yandex_vpc_network.mynet.id}"
cluster_config {
version = "4.4"
}
database {
name = "db1"
}
user {
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
}
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 20
}
host {
zone_id = "ru-central1-c"
subnet_id = "${yandex_vpc_subnet.mysubnet.id}"
}
}
resource "yandex_vpc_network" "mynet" { name = "mynet" }
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-c"
network_id = "${yandex_vpc_network.mynet.id}"
v4_cidr_blocks = ["10.5.0.0/24"]
}