Создание кластера OpenSearch
Примечание
В регионе Казахстан доступна только зона доступности kz1-a
.
Примечание
В регионе Казахстан доступна только платформа standard-v3
(Intel Ice Lake). Другие типы платформ, GPU, кластеры GPU и выделенные хосты недоступны.
Кластер Managed Service for OpenSearch — это группа из нескольких связанных друг с другом хостов OpenSearch и DashboardsDATA
. Подробнее о ролях в кластере см. в разделе Роли хостов.
Доступные типы диска зависят от выбранного класса хостов.
Подробнее см. в разделе Взаимосвязь ресурсов сервиса.
Роли для создания кластера
Для создания кластера Managed Service for OpenSearch нужна роль vpc.user и роль managed-opensearch.editor или выше.
Если вы хотите привязать сервисный аккаунт к кластеру (например, для работы с Yandex Object Storage), вашему аккаунту в Yandex Cloud нужна роль iam.serviceAccounts.user или выше.
О назначении ролей читайте в документации Yandex Identity and Access Management.
Создать кластер
При создании кластера для каждой группы хостов указываются отдельные параметры.
Чтобы создать кластер Managed Service for OpenSearch:
-
В консоли управления
выберите каталог, в котором нужно создать кластер. -
Выберите сервис Managed Service for OpenSearch.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите имя кластера. Оно должно быть уникальным в рамках каталога.
-
(Опционально) Введите описание кластера.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
Выберите версию OpenSearch.
-
Выберите плагины, которые нужно установить в кластер.
-
-
В блоке Сетевые настройки выберите облачную сеть для размещения кластера и группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Группа виртуальных хостов 1 задайте конфигурацию группы хостов
OpenSearch
:-
Выберите тип группы хостов:
OpenSearch
. -
Введите имя группы хостов. Оно должно быть уникальным в кластере.
-
Выберите роли хостов
DATA
иMANAGER
. -
Выберите платформу, тип и класс хостов.
Класс хостов определяет технические характеристики виртуальных машин, на которых будут развернуты ноды OpenSearch. Все доступные варианты перечислены в разделе Классы хостов.
-
Выберите тип диска и объем хранилища, который будет использоваться для данных.
От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
- Сетевые HDD- и SSD-диски — с шагом 1 ГБ.
- Локальные SSD-диски:
- для платформы Intel Cascade Lake — с шагом 100 ГБ;
- для платформы Intel Ice Lake — с шагом 368 ГБ.
- Нереплицируемые SSD-диски — с шагом 93 ГБ.
-
(Опционально) В блоке Автоматическое увеличение размера хранилища настройте автоматическое увеличение размера диска:
-
В поле Увеличивать размер задайте соответствующие условия, чтобы:
- Размер хранилища увеличился в следующее окно обслуживания, когда хранилище окажется заполнено более чем на указанную долю (%).
- Размер хранилища увеличился незамедлительно, когда хранилище окажется заполнено более чем на указанную долю (%).
Можно задать оба условия, но порог для незамедлительного увеличения должен быть выше порога для увеличения в окно обслуживания.
-
В поле Максимальный размер хранилища укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.
Если заданный порог достигнут, размер хранилища увеличивается по-разному в зависимости от типа диска:
-
Для сетевых HDD- и SSD-дисков — на большее из двух значений: 20 ГБ или 20% от текущего размера диска.
-
Для нереплицируемых SSD-дисков — на 93 ГБ.
-
Для локальных SSD-дисков:
- В кластере на платформе Intel Cascade Lake — на 100 ГБ.
- В кластере на платформе Intel Ice Lake — на 368 ГБ.
Если порог срабатывания достигнут повторно, размер хранилища будет автоматически увеличиваться, пока не достигнет заданного максимума. После этого вы можете задать новый максимальный размер хранилища вручную.
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
-
Если настроено увеличение хранилища в окно обслуживания, настройте расписание окна обслуживания.
-
-
Укажите расположение хостов по зонам доступности и подсетям.
-
Выберите количество создаваемых хостов.
-
Включите опцию Публичный доступ, если вы хотите, чтобы к хостам можно было подключаться через интернет.
Совет
Не рекомендуется включать публичный доступ для хостов с ролью
MANAGER
, т. к. это может быть небезопасно.
Важно
Изменить конфигурацию хостов после создания кластера можно только с помощью API, однако при необходимости вы сможете создать новую группу хостов с другой конфигурацией.
-
-
При необходимости задайте конфигурацию группы хостов
Dashboards
в блоке Группа виртуальных хостов 2:-
Выберите платформу, тип и класс хостов.
-
Настройте хранилище по аналогии с хостами
OpenSearch
. -
Укажите расположение хостов по зонам доступности и подсетям.
-
Выберите количество создаваемых хостов.
-
Включите опцию Публичный доступ, если вы хотите, чтобы к хостам можно было подключаться через интернет.
Совет
OpenSearch Dashboards можно воспользоваться, даже если публичный доступ к хостам запросить невозможно (например, из соображений безопасности). Для этого настройте проксирование соединений через виртуальную машину в Yandex Compute Cloud, которая находится в той же сети, что и кластер. Подробнее см. в разделе Подключение к OpenSearch Dashboards.
-
-
При необходимости добавьте еще одну или несколько групп хостов, нажав кнопку Добавить группу виртуальных хостов.
-
В блоке Сервисные настройки:
-
Укажите пароль для пользователя
admin
.Это специальный пользователь, который необходим для управления кластером и не может быть удален. Он наделен ролью
superuser
и может выполнять любые действия с кластером.Совет
Для выполнения повседневных задач рекомендуется создавать отдельных пользователей. Подробнее см. в разделе Управление пользователями OpenSearch.
-
При необходимости измените дополнительные настройки кластера:
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Сервисный аккаунт — аккаунт для доступа к Yandex Object Storage в качестве репозитория снапшотов OpenSearch. Подробнее о сервисных аккаунтах см. в документации Yandex Identity and Access Management.
-
Защита от удаления — управляет защитой кластера, его баз данных и пользователей от непреднамеренного удаления.
Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные.
-
-
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер Managed Service for OpenSearch:
-
Посмотрите описание команды CLI для создания кластера:
yc managed-opensearch cluster create --help
-
Укажите параметры кластера в команде создания (в примере приведены не все доступные параметры):
yc managed-opensearch cluster create \ --name <имя_кластера> \ --description <описание_кластера> \ --labels <метки> \ --environment <окружение:_production_или_prestable> \ --network-name <имя_сети> \ --security-group-ids <идентификаторы_групп_безопасности> \ --service-account-name <имя_сервисного_аккаунта> \ --delete-protection \ --maintenance schedule=<тип_технического_обслуживания>,` `weekday=<день_недели>,` `hour=<час_дня> \ --version <версия_OpenSearch> \ --read-admin-password \ --data-transfer-access=<true_или_false> \ --serverless-access=<true_или_false> \ --plugins <OpenSearch_плагины> \ --advanced-params <дополнительные_параметры> \ --opensearch-node-group name=<имя_группы_хостов_OpenSearch>,` `resource-preset-id=<класс_хостов>,` `disk-size=<размер_диска_в_байтах>,` `disk-type-id=<network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd>,` `hosts-count=<количество_хостов_в_группе>,` `zone-ids=<зоны_доступности>,` `subnet-names=<имена_подсетей>,` `assign-public-ip=<назначить_публичный_адрес:_true_или_false>,` `roles=<роли_хостов> \ --dashboards-node-group name=<имя_группы_хостов_Dashboards>,` `resource-preset-id=<класс_хостов>,` `disk-size=<размер_диска_в_байтах>,` `disk-type-id=<network-ssd>,` `hosts-count=<количество_хостов_в_группе>,` `zone-ids=<зоны_доступности>,` `subnet-names=<имена_подсетей>,` `assign-public-ip=<назначить_публичный_адрес:_true_или_false>
Где:
-
--labels
— метки Yandex Cloud в формате<ключ>=<значение>
. Используются для логического разделения ресурсов. -
--environment
— окружение:production
— для стабильных версий ваших приложений.prestable
— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
--service-account-name
— имя сервисного аккаунта для доступа к Yandex Object Storage в качестве репозитория снапшотов OpenSearch. Подробнее о сервисных аккаунтах см. в документации Yandex Identity and Access Management. -
--delete-protection
— защита кластера от непреднамеренного удаления пользователем. Включенная защита от удаления кластера не помешает подключиться к нему вручную и удалить данные. -
--maintenance
— настройки времени технического обслуживания:- Чтобы разрешить проведение технического обслуживания в любое время, не указывайте параметр
--maintenance
в команде (конфигурация по умолчанию) либо укажите--maintenance schedule=anytime
. - Чтобы указать предпочтительное время начала обслуживания, укажите в команде параметр
--maintenance schedule=weekly,weekday=<день_недели>,hour=<час_дня_по_UTC>
. Тогда техническое обслуживание будет проходить каждую неделю в обозначенный день и время.
Операции по обслуживанию проводятся для включенных и выключенных кластеров. Во время обслуживания могут, например, применяться патчи или обновляться СУБД.
- Чтобы разрешить проведение технического обслуживания в любое время, не указывайте параметр
-
--read-admin-password
— пароль пользователяadmin
. Если указать параметр в команде, после ее ввода будет предложено ввести пароль. -
--serverless-access
— доступ из Yandex Serverless Containers:true
илиfalse
. -
--plugins
— плагины OpenSearch, которые нужно установить в кластер. -
--advanced-params
— дополнительные параметры кластера. Возможные значения:max-clause-count
— максимально допустимое количество булевых выражений (boolean clauses) в запросе. Подробнее см. в документации OpenSearch .fielddata-cache-size
— объем кучи JVM, который выделен для структуры данных fielddata. Можно указать абсолютное значение или проценты, например,512mb
или50%
. Подробнее см. в документации OpenSearch .reindex-remote-whitelist
— список удаленных хостов, из индекса которых нужно скопировать документы для переиндексации. Укажите значение параметра в формате<адрес_хоста>:<порт>
. Если нужно указать несколько хостов, перечислите значения через запятую. Подробнее см. в документации OpenSearch .
-
--opensearch-node-group
— конфигурация группы хостовOpenSearch
, где:-
resource-preset-id
— класс хостов. Он определяет технические характеристики виртуальных машин, на которых будут развернуты узлы OpenSearch. Все доступные варианты перечислены в разделе Классы хостов. -
disk-size
— размер диска в байтах. Минимальное и максимальное значения зависят от выбранного класса хостов. -
disk-type-id
— тип диска. -
roles
— роли хостов. Возможные значения:data
— предоставляется только рольDATA
;manager
— предоставляется только рольMANAGER
;data+manager
илиmanager+data
— предоставляются обе роли.
Совет
Не рекомендуется включать публичный доступ для хостов с ролью
MANAGER
— это небезопасно.
-
-
--dashboards-node-group
— конфигурация группы хостовDashboards
. Настраивается так же, как группа хостовOpenSearch
, за исключением ролей хостов. Для группыDashboards
роли настраивать не нужно.
-
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for OpenSearch:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер БД — описание кластера Managed Service for OpenSearch и его хостов.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_opensearch_cluster" "<имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = "<идентификатор_сети>" security_group_ids = ["<список_идентификаторов_групп_безопасности>"] deletion_protection = "<защита_от_удаления>" config { version = "<версия_OpenSearch>" admin_password = "<пароль_пользователя-администратора>" opensearch { node_groups { name = "<имя_группы_виртуальных_хостов>" assign_public_ip = <публичный_доступ> hosts_count = <количество_хостов> zone_ids = ["<список_зон_доступности>"] subnet_ids = ["<список_идентификаторов подсетей>"] roles = ["<список_ролей>"] resources { resource_preset_id = "<класс_хоста>" disk_size = <размер_хранилища_в_байтах> disk_type_id = "<тип_диска>" } } plugins = ["<список_имен_плагинов>"] } dashboards { node_groups { name = "<имя_группы_виртуальных_хостов>" assign_public_ip = <публичный_доступ> hosts_count = <количество_хостов> zone_ids = ["<список_зон_доступности>"] subnet_ids = ["<список_идентификаторов подсетей>"] resources { resource_preset_id = "<класс_хоста>" disk_size = <размер_хранилища_в_байтах> disk_type_id = "<тип_диска>" } } } } maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }
Где:
environment
— окружение:PRESTABLE
илиPRODUCTION
.deletion_protection
— защита от удаления:true
илиfalse
.assign_public_ip
— публичный доступ к хосту:true
илиfalse
.roles
— роли хостов:DATA
иMANAGER
.maintenance_window
— время технического обслуживания (в т. ч. для выключенных кластеров):type
— тип технического обслуживания. Принимает значения:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Полный список доступных для изменения полей конфигурации кластера Managed Service for OpenSearch см. в документации провайдера Terraform
. -
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for OpenSearch:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts
, например:resource "yandex_mdb_opensearch_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } }
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Создайте файл
body.json
и добавьте в него следующее содержимое:{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "networkId": "<идентификатор_сети>", "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "serviceAccountId": "<идентификатор_сервисного_аккаунта>", "deletionProtection": <защита_от_удаления:_true_или_false>, "configSpec": { "version": "<версия_OpenSearch>", "adminPassword": "<пароль_пользователя-администратора>", "opensearchSpec": { "plugins": [ "<плагин_OpenSearch_1>", "<плагин_OpenSearch_2>", ... "<плагин_OpenSearch_N>" ], "nodeGroups": [ { "name": "<название_группы_хостов>", "resources": { "resourcePresetId": "<класс_хостов>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" }, "roles": ["<роль_1>","<роль_2>"], "hostsCount": "<число_хостов>", "zoneIds": [ "<зона_доступности_1>", "<зона_доступности_2>", "<зона_доступности_3>" ], "subnetIds": [ "<идентификатор_подсети_1>", "<идентификатор_подсети_2>", "<идентификатор_подсети_3>" ], "assignPublicIp": <публичный_адрес_хоста:_true_или_false>, "diskSizeAutoscaling": { "plannedUsageThreshold": "<процент_для_планового_увеличения>", "emergencyUsageThreshold": "<процент_для_незамедлительного_увеличения>", "diskSizeLimit": "<максимальный_размер_хранилища_в_байтах>" } }, ... ] }, "dashboardsSpec": { "nodeGroups": [ { "name": "<название_группы_хостов>", "resources": { "resourcePresetId": "<класс_хостов>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" }, "hostsCount": "<число_хостов>", "zoneIds": ["<зона_доступности>"], "subnetIds": ["<идентификатор_подсети>"], "assignPublicIp": <публичный_адрес_хоста:_true_или_false>, "diskSizeAutoscaling": { "plannedUsageThreshold": "<процент_для_планового_увеличения>", "emergencyUsageThreshold": "<процент_для_незамедлительного_увеличения>", "diskSizeLimit": "<максимальный_размер_хранилища_в_байтах>" } } ] }, "access": { "dataTransfer": <доступ_из_Data_Transfer:_true_или_false>, "serverless": <доступ_из_Serverless_Containers:_true_или_false> } }, "maintenanceWindow": { "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час>" } } }
Где:
-
folderId
— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name
— имя кластера. -
environment
— окружение кластера:PRODUCTION
илиPRESTABLE
. -
networkId
— идентификатор сети, в которой будет размещен кластер. -
securityGroupIds
— идентификаторы групп безопасности. -
serviceAccountId
— идентификатор сервисного аккаунта, используемого для работы с кластером. -
deletionProtection
— защита от удаления кластера, его баз данных и пользователей. -
configSpec
— настройки кластера:-
version
— версия OpenSearch. -
adminPassword
— пароль пользователяadmin
. -
opensearchSpec
— настройки групп хостовOpenSearch
:-
plugins
— список плагинов OpenSearch, которые надо установить в кластер дополнительно. -
nodeGroups
— настройки хостов в виде массива элементов. Каждый элемент соответствует отдельной группе хостов и имеет следующую структуру:-
name
— имя группы хостов. -
resources
— ресурсы кластера:resourcePresetId
— класс хостов;diskSize
— размер диска в байтах;diskTypeId
— тип диска.
-
roles
— список ролей хостов. Кластер должен содержать хотя бы по одной группе хостовDATA
иMANAGER
. Это может быть одна группа, на которую назначены две роли, или несколько групп с разными ролями. -
hostsCount
— количество хостов в группе. Миниальное число хостовDATA
— один, хостовMANAGER
— три. -
zoneIds
— список зон доступности, где размещаются хосты кластера. -
subnetIds
— список идентификаторов подсетей. -
assignPublicIp
— разрешение на подключение к хосту из интернета. -
diskSizeAutoscaling
— настройки автоматического увеличения размера хранилища:-
plannedUsageThreshold
— процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно обслуживания.Значение задается в процентах от
0
до100
. По умолчанию —0
(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания в параметре
maintenanceWindow
. -
emergencyUsageThreshold
— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0
до100
. По умолчанию —0
(автоматическое расширение отключено). Должно быть не меньше значенияplannedUsageThreshold
. -
diskSizeLimit
— максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
-
-
dashboardsSpec
— настройки групп хостовDashboards
. Содержат параметрnodeGroups
, структура которого совпадает со структуройopensearchSpec.nodeGroups
. Исключение — параметрroles
: у хостовDashboards
есть только одна рольDASHBOARDS
, поэтому ее не нужно указывать. -
access
— настройки доступа кластера к следующим сервисам Yandex Cloud:dataTransfer
— Yandex Data Transfer;serverless
— Yandex Serverless Containers.
-
-
maintenance_window.weeklyMaintenanceWindow
— расписание окна технического обслуживания:day
— день недели в форматеDDD
, когда должно проходить обслуживание.hour
— час в форматеHH
, когда должно проходить обслуживание. Возможные значения: от1
до24
. Задается в часовом поясе UTC.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.yandexcloud.kz/managed-opensearch/v1/clusters' \ --data "@body.json"
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Создайте файл
body.json
и добавьте в него следующее содержимое:{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "network_id": "<идентификатор_сети>", "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "service_account_id": "<идентификатор_сервисного_аккаунта>", "deletion_protection": <защита_от_удаления:_true_или_false>, "config_spec": { "version": "<версия_OpenSearch>", "admin_password": "<пароль_пользователя-администратора>", "opensearch_spec": { "plugins": [ "<плагин_OpenSearch_1>", "<плагин_OpenSearch_2>", ... "<плагин_OpenSearch_N>" ], "node_groups": [ { "name": "<название_группы_хостов>", "resources": { "resource_preset_id": "<класс_хостов>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "roles": ["<роль_1>","<роль_2>"], "hosts_count": "<число_хостов>", "zone_ids": [ "<зона_доступности_1>", "<зона_доступности_2>", "<зона_доступности_3>" ], "subnet_ids": [ "<идентификатор_подсети_1>", "<идентификатор_подсети_2>", "<идентификатор_подсети_3>" ], "assign_public_ip": <публичный_адрес_хоста:_true_или_false>, "disk_size_autoscaling": { "planned_usage_threshold": "<процент_для_планового_увеличения>", "emergency_usage_threshold": "<процент_для_незамедлительного_увеличения>", "disk_size_limit": "<максимальный_размер_хранилища_в_байтах>" } }, ... ] }, "dashboards_spec": { "node_groups": [ { "name": "<название_группы_хостов>", "resources": { "resource_preset_id": "<класс_хостов>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "hosts_count": "<число_хостов>", "zone_ids": ["<зона_доступности>"], "subnet_ids": ["<идентификатор_подсети>"], "assign_public_ip": <публичный_адрес_хоста:_true_или_false>, "disk_size_autoscaling": { "planned_usage_threshold": "<процент_для_планового_увеличения>", "emergency_usage_threshold": "<процент_для_незамедлительного_увеличения>", "disk_size_limit": "<максимальный_размер_хранилища_в_байтах>" } } ] }, "access": { "data_transfer": <доступ_из_Data_Transfer:_true_или_false>, "serverless": <доступ_из_Serverless_Containers:_true_или_false> } }, "maintenance_window": { "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<час>" } } }
Где:
-
folder_id
— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name
— имя кластера. -
environment
— окружение кластера:PRODUCTION
илиPRESTABLE
. -
network_id
— идентификатор сети, в которой будет размещен кластер. -
security_group_ids
— идентификаторы групп безопасности. -
service_account_id
— идентификатор сервисного аккаунта, используемого для работы с кластером. -
deletion_protection
— защита от удаления кластера, его баз данных и пользователей. -
config_spec
— настройки кластера:-
version
— версия OpenSearch. -
admin_password
— пароль пользователяadmin
. -
opensearch_spec
— настройки групп хостовOpenSearch
:-
plugins
— список плагинов OpenSearch, которые надо установить в кластер дополнительно. -
node_groups
— настройки хостов в виде массива элементов. Каждый элемент соответствует отдельной группе хостов и имеет следующую структуру:-
name
— имя группы хостов. -
resources
— ресурсы кластера:resource_preset_id
— класс хостов;disk_size
— размер диска в байтах;disk_type_id
— тип диска.
-
roles
— список ролей хостов. Кластер должен содержать хотя бы по одной группе хостовDATA
иMANAGER
. Это может быть одна группа, на которую назначены две роли, или несколько групп с разными ролями. -
hosts_count
— количество хостов в группе. Миниальное число хостовDATA
— один, хостовMANAGER
— три. -
zone_ids
— список зон доступности, где размещаются хосты кластера. -
subnet_ids
— список идентификаторов подсетей. -
assign_public_ip
— разрешение на подключение к хосту из интернета. -
disk_size_autoscaling
— настройки автоматического увеличения размера хранилища:-
planned_usage_threshold
— процент заполнения хранилища, при котором хранилище будет увеличено в следующее окно обслуживания.Значение задается в процентах от
0
до100
. По умолчанию —0
(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания в параметре
maintenance_window
. -
emergency_usage_threshold
— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0
до100
. По умолчанию —0
(автоматическое расширение отключено). Должно быть не меньше значенияplanned_usage_threshold
. -
disk_size_limit
— максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
-
-
dashboards_spec
— настройки групп хостовDashboards
. Содержат параметрnode_groups
, структура которого совпадает со структуройopensearch_spec.node_groups
. Исключение — параметрroles
: у хостовDashboards
есть только одна рольDASHBOARDS
, поэтому ее не нужно указывать. -
access
— настройки доступа кластера к следующим сервисам Yandex Cloud:data_transfer
— Yandex Data Transfer;serverless
— Yandex Serverless Containers.
-
-
maintenance_window.weekly_maintenance_window
— расписание окна технического обслуживания:day
— день недели в форматеDDD
, когда должно проходить обслуживание.hour
— час в форматеHH
, когда должно проходить обслуживание. Возможные значения: от1
до24
. Задается в часовом поясе UTC.
-
-
Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/opensearch/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.opensearch.v1.ClusterService.Create \ < body.json
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Создать копию кластера
Вы можете создать кластер OpenSearch, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера OpenSearch импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер OpenSearch обладает множеством настроек и нужно создать похожий на него кластер.
Чтобы создать копию кластера OpenSearch:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tf
и содержимым:resource "yandex_mdb_opensearch_cluster" "old" { }
-
Запишите идентификатор первоначального кластера OpenSearch в переменную окружения:
export OPENSEARCH_CLUSTER_ID=<идентификатор_кластера>
Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера OpenSearch в конфигурацию Terraform:
terraform import yandex_mdb_opensearch_cluster.old ${OPENSEARCH_CLUSTER_ID}
-
Получите импортированную конфигурацию:
terraform show
-
Скопируйте ее из терминала и вставьте в файл с расширением
.tf
. -
Расположите файл в новой директории
imported-cluster
. -
Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:
- Укажите новое имя кластера в строке
resource
и параметреname
. - Удалите параметры
created_at
,health
,id
иstatus
. - В блок
config
добавьте параметрadmin_password
. - Если в блоке
maintenance_window
указано значение параметраtype = "ANYTIME"
, удалите параметрhour
. - (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.
- Укажите новое имя кластера в строке
-
В директории
imported-cluster
получите данные для аутентификации. -
В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в директорию
imported-cluster
и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Проверьте корректность файлов конфигурации Terraform:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for OpenSearch:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_opensearch_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Примеры
Создайте кластер Managed Service for OpenSearch с тестовыми характеристиками:
-
Имя —
my-os-clstr
. -
Описание —
My OS cluster
. -
Метка —
label-key
со значениемlabel-value
. -
Окружение —
production
. -
Имя сети —
default
. -
Идентификатор группы безопасности —
enp6saqnq4ie********
. -
Имя сервисного аккаунта —
os-account
. -
Защита от удаления кластера — отключена.
-
Время технического обслуживания — каждый понедельник с 13:00 до 14:00.
-
Версия OpenSearch —
2.8
. -
Пароль пользователя
admin
— указывается после ввода команды по созданию кластера. -
Доступ к Data Transfer — включен.
-
Доступ к Serverless Containers — включен.
-
Подключенный плагин OpenSearch — analysis-icu.
-
Дополнительный параметр OpenSearch —
fielddata-cache-size=50%
. -
Конфигурация группы узлов
OpenSearch
:- название группы —
os-group
; - класс хостов —
s2.micro
; - размер диска —
10737418240
(в байтах); - тип диска —
network-ssd
; - количество хостов — три;
- зона доступности —
ru-central1-a
; - подсеть —
default-ru-central1-a
; - публичный адрес — выделен;
- роли группы хостов —
DATA
иMANAGER
.
- название группы —
-
Конфигурация группы хостов
Dashboards
:- название группы —
dashboard-group
; - класс хостов —
s2.micro
; - размер диска —
10737418240
(в байтах); - тип диска —
network-ssd
; - количество хостов — один;
- зона доступности —
ru-central1-a
; - подсеть —
default-ru-central1-a
; - публичный адрес — выделен.
- название группы —
Выполните команду:
yc managed-opensearch cluster create \
--name my-os-clstr \
--description "My OS cluster" \
--labels label-key=label-value \
--environment production \
--network-name default \
--security-group-ids enp6saqnq4ie******** \
--service-account-name os-account \
--delete-protection \
--maintenance schedule=weekly,`
`weekday=mon,`
`hour=14 \
--version 2.8 \
--read-admin-password \
--data-transfer-access=true \
--serverless-access=true \
--plugins analysis-icu \
--advanced-params fielddata-cache-size=50% \
--opensearch-node-group name=os-group,`
`resource-preset-id=s2.micro,`
`disk-size=10737418240,`
`disk-type-id=network-ssd,`
`hosts-count=3,`
`zone-ids=ru-central1-a,`
`subnet-names=default-ru-central1-a,`
`assign-public-ip=true,`
`roles=data+manager \
--dashboards-node-group name=dashboard-group,`
`resource-preset-id=s2.micro,`
`disk-size=10737418240,`
`disk-type-id=network-ssd,`
`hosts-count=1,`
`zone-ids=ru-central1-a,`
`subnet-names=default-ru-central1-a,`
`assign-public-ip=true
Создайте кластер Managed Service for OpenSearch с тестовыми характеристиками:
- Имя —
my-os-clstr
. - Окружение —
PRODUCTION
. - Версия OpenSearch —
2.8
. - Пароль пользователя
admin
—osadminpwd
. - Имя группы узлов
OpenSearch
—os-group
. - Класс хостов —
s2.micro
. - Размер диска —
10737418240
(в байтах). - Тип диска —
network-ssd
. - Количество хостов —
1
. - Публичный адрес — выделен.
- Роли группы хостов —
DATA
иMANAGER
. - Время технического обслуживания — каждый понедельник с 13:00 до 14:00.
- Имя сети —
mynet
. - Имя подсети —
mysubnet
. - Зона доступности —
ru-central1-a
. - Диапазон адресов —
10.1.0.0/16
. - Имя группы безопасности —
os-sg
. Группа безопасности разрешает подключение к хосту кластера из любой сети (в том числе из интернета) по порту9200
.
Конфигурационный файл для такого кластера выглядит так:
resource "yandex_mdb_opensearch_cluster" "my-os-clstr" {
name = "my-os-clstr"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [yandex_vpc_security_group.os-sg.id]
config {
version = "2.8"
admin_password = "osadminpwd"
opensearch {
node_groups {
name = "os-group"
assign_public_ip = true
hosts_count = 1
zone_ids = ["ru-central1-a"]
subnet_ids = [yandex_vpc_subnet.mysubnet.id]
roles = ["DATA", "MANAGER"]
resources {
resource_preset_id = "s2.micro"
disk_size = 10737418240
disk_type_id = "network-ssd"
}
}
}
}
maintenance_window {
type = "WEEKLY"
day = "MON"
hour = 14
}
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.1.0.0/16"]
}
resource "yandex_vpc_security_group" "os-sg" {
name = "os-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Allow connections to the Managed Service for OpenSearch cluster from the Internet"
protocol = "TCP"
port = 9200
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
description = "The rule allows all outgoing traffic"
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
from_port = 0
to_port = 65535
}
}