Создание кластера PostgreSQL
Кластер PostgreSQL — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем одного хоста: хост-мастер принимает запросы на запись и дублирует изменения в репликах. Транзакция подтверждается, если данные записаны на диск и на хосте-мастере, и на определенном числе реплик, достаточном для формирования кворума.
Примечание
- Количество хостов, которые можно создать вместе с кластером PostgreSQL, зависит от выбранного типа диска и класса хостов.
- Доступные типы диска зависят от выбранного класса хостов.
- Если хранилище БД заполнится на 95%, кластер перейдет в режим только чтения. Рассчитывайте и увеличивайте необходимый размер хранилища заранее.
По умолчанию Managed Service for PostgreSQL выставляет максимально возможное количество подключений к каждому хосту кластера PostgreSQL. Этот максимум не может быть больше значения настройки Max connections.
Важно
Managed Service for PostgreSQL резервирует 15 подключений для служебных пользователей на каждом PostgreSQL-хосте. Например, если для кластера выставлено значение настройки Max connections 100
, то вы можете зарезервировать не больше 85 подключений для пользователей кластера.
Создать кластер
Для создания кластера Managed Service for PostgreSQL нужна роль vpc.user и роль managed-postgresql.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.
Чтобы создать кластер Managed Service for PostgreSQL:
-
В консоли управления
выберите каталог, в котором нужно создать кластер БД. -
Выберите сервис Managed Service for PostgreSQL.
-
Нажмите кнопку Создать кластер.
-
Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
Выберите версию СУБД.
-
Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. Все доступные варианты перечислены в разделе Классы хостов. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.
-
В блоке Размер хранилища:
-
Выберите тип диска.
Важно
Тип диска нельзя изменить после создания кластера.
От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
- Сетевые HDD- и SSD-диски — с шагом 1 ГБ.
- Локальные SSD-диски:
- для платформ Intel Broadwell и Intel Cascade Lake — с шагом 100 ГБ;
- для платформы Intel Ice Lake — с шагом 368 ГБ.
- Нереплицируемые SSD-диски — с шагом 93 ГБ.
-
Выберите размер хранилища, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. раздел Резервные копии.
-
-
(Опционально) В блоке Автоматическое увеличение размера хранилища укажите желаемые настройки:
-
В поле Увеличивать размер задайте соответствующие условия, чтобы:
- Размер хранилища увеличился в следующее окно обслуживания, когда хранилище окажется заполнено более чем на указанную долю (%).
- Размер хранилища увеличился незамедлительно, когда хранилище окажется заполнено более чем на указанную долю (%).
Можно задать оба условия, но порог для незамедлительного увеличения должен быть выше порога для увеличения в окно обслуживания.
-
В поле Максимальный размер хранилища укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.
Если заданный порог достигнут, размер хранилища увеличивается по-разному в зависимости от типа диска:
-
Для сетевых HDD- и SSD-дисков — на большее из двух значений: 20 ГБ или 20% от текущего размера диска.
-
Для нереплицируемых SSD-дисков — на 93 ГБ.
-
Для локальных SSD-дисков:
- В кластере на платформе Intel Broadwell или Intel Cascade Lake — на 100 ГБ.
- В кластере на платформе Intel Ice Lake — на 368 ГБ.
Если порог срабатывания достигнут повторно, размер хранилища будет автоматически увеличиваться, пока не достигнет заданного максимума. После этого вы можете задать новый максимальный размер хранилища вручную.
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
Примечание
Некоторые настройки PostgreSQL зависят от размера хранилища.
Если настроено увеличение хранилища в окно обслуживания, настройте расписание окна обслуживания.
-
-
В блоке База данных укажите атрибуты БД:
-
Имя БД. Это имя должно быть уникальным в рамках каталога.
Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена
postgres
,template0
,template1
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя. -
Имя пользователя — владельца БД и пароль. По умолчанию новому пользователю выделяется 50 подключений к каждому хосту кластера.
Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_
), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin
,repl
,monitor
,postgres
,mdb_admin
,mdb_monitor
,mdb_replication
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.Длина пароля от 8 до 128 символов.
-
Локаль сортировки и локаль набора символов. Эти настройки определяют правила, по которым производится сортировка строк (
LC_COLLATE
) и классификация символов (LC_CTYPE
). В Managed Service for PostgreSQL настройки локали действуют на уровне отдельно взятой БД.PostgreSQL использует локали для поддержки различных языковых стандартов. Выбор локали влияет на:
- Порядок сортировки в запросах с использованием оператора
ORDER BY
или стандартных операторов сравнения текстовых данных. - Функции
upper
,lower
,initcap
, а также семейство функцийto_char
. - Операторы поиска по шаблону (
LIKE
,ILIKE
,SIMILAR TO
, регулярные выражения). - Возможность использовать индексы с оператором
LIKE
.
По умолчанию используется локаль
C
. При использовании кодировкиC
для текстовых данных с нелатинскими (например, кириллическими) символами возможны ошибки в порядке сортировки данных и отображении данных при поиске по шаблону. Если эта локаль не подходит для корректной обработки таблиц в базе данных, выберите другую из списка. Однако учитывайте, что использование нестандартной локали может снизить скорость выполнения запросов к базе данных.Подробнее о настройках локали см. в документации PostgreSQL
.Настройки локали нельзя изменить после создания базы данных. Но вы можете задать локаль сортировки для столбцов при создании и изменении отдельных таблиц. Подробнее читайте в документации PostgreSQL
. - Порядок сортировки в запросах с использованием оператора
-
-
В блоке Сетевые настройки выберите:
-
Облачную сеть для размещения кластера.
Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
Группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
-
В блоке Хосты выберите параметры хостов БД, создаваемых вместе с кластером. По умолчанию каждый хост создается в отдельной подсети. Чтобы выбрать для хоста конкретную подсеть, в строке этого хоста нажмите значок
.При настройке параметров хостов обратите внимание, что если в блоке Размер хранилища выбран
local-ssd
илиnetwork-ssd-nonreplicated
, необходимо добавить не менее трех хостов в кластер.Чтобы к хосту можно было подключаться из интернета, включите настройку Публичный доступ.
-
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — промежуток времени, в течение которого начинается резервное копирование кластера. Время указывается по UTC в 24-часовом формате. По умолчанию —
22:00 - 23:00
UTC. -
Срок хранения автоматических резервных копий, дней — время, в течение которого нужно хранить созданные автоматически резервные копии. Если для такой копии истекает срок хранения, то она удаляется. Значение по умолчанию — 7 дней. Подробнее см. в разделе Резервные копии.
Изменение срока хранения затрагивает как новые автоматические резервные копии, так и уже существующие. Например, изначальный срок хранения был 7 дней. Оставшееся время жизни отдельной автоматической резервной копии при таком сроке — 1 день. При увеличении срока хранения до 9 дней оставшееся время жизни этой резервной копии будет уже 3 дня.
Автоматические резервные копии кластера хранятся заданное количество дней, а созданные вручную — бессрочно. После удаления кластера все копии хранятся 7 дней.
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Доступ из DataLens — опция разрешает анализировать данные из кластера в сервисе Yandex DataLens.
-
Доступ из WebSQL — опция разрешает выполнять SQL-запросы к базам данных кластера из консоли управления Yandex Cloud с помощью сервиса Yandex WebSQL.
-
Доступ из Serverless — включите эту опцию, чтобы разрешить доступ к кластеру из сервиса Yandex Cloud Functions. Подробнее о настройке доступа см. в документации Cloud Functions.
-
Сбор статистики — опция разрешает использовать в кластере инструмент Диагностика производительности. Если опция включена, настройте также Интервал сбора сессий и Интервал сбора запросов при помощи ползунков. Единицы измерения обеих настроек — секунды.
Эта функциональность находится на стадии Preview.
-
Автоматическое переключение мастера — включите эту опцию, чтобы при смене мастера источник репликации для всех хостов-реплик автоматически переключился на новый хост-мастер. Подробнее см. в разделе Репликация.
При удалении хоста-мастера новый мастер будет выбран автоматически независимо от значения этой опции.
Внимание
Если опция Автоматическое переключение мастера выключена, при выходе хоста-мастера из строя запустить выборы нового мастера или назначить эту роль одной из реплик придется вручную.
-
Режим работы менеджера подключений — выберите один из режимов работы менеджера подключений.
-
Защита от удаления — управляет защитой кластера, его баз данных и пользователей от непреднамеренного удаления.
По умолчанию при создании пользователей и БД значение параметра наследуется от кластера. Значение также можно задать вручную, подробнее см. в разделах Управление пользователями и Управление БД.
Если параметр изменен на работающем кластере, новое значение унаследуют только пользователи и БД с защитой Как у кластера.
Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
-
-
При необходимости задайте настройки СУБД уровня кластера.
Примечание
Некоторые настройки PostgreSQL зависят от выбранного класса хостов или от размера хранилища.
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер Managed Service for PostgreSQL:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе Yandex Virtual Private Cloud.
-
Посмотрите описание команды CLI для создания кластера:
yc managed-postgresql cluster create --help
-
Укажите параметры кластера в команде создания (в примере приведены не все доступные параметры):
yc managed-postgresql cluster create \ --name <имя_кластера> \ --environment <окружение> \ --network-name <имя_сети> \ --host zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети>,` `assign-public-ip=<доступ_к_хосту_из_интернета> \ --resource-preset <класс_хоста> \ --user name=<имя_пользователя>,password=<пароль_пользователя> \ --database name=<имя_БД>,owner=<имя_владельца_БД> \ --disk-size <размер_хранилища_ГБ> \ --disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ --security-group-ids <список_идентификаторов_групп_безопасности> \ --connection-pooling-mode=<режим_работы_менеджера_подключений> \ --deletion-protection
Где:
-
environment
— окружение:prestable
илиproduction
. -
disk-type
— тип диска.Важно
Тип диска нельзя изменить после создания кластера.
-
assign-public-ip
— доступ к хосту из интернета:true
илиfalse
. -
deletion-protection
— защита от удаления кластера, его баз данных и пользователей.По умолчанию при создании пользователей и БД значение параметра наследуется от кластера. Значение также можно задать вручную, подробнее см. в разделах Управление пользователями и Управление БД.
Идентификатор подсети
subnet-id
необходимо указывать, если в выбранной зоне доступности создано две и больше подсетей.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
Доступные режимы работы менеджера подключений:
SESSION
,TRANSACTION
илиSTATEMENT
.Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена
postgres
,template0
,template1
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя.Примечание
Длина пароля от 8 до 128 символов.
Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Также вы можете указать дополнительную опцию
replication-source
в параметре--host
для того, чтобы вручную управлять потоками репликации.Чтобы разрешить доступ к кластеру из сервиса Yandex Cloud Functions, передайте параметр
--serverless-access
. Подробнее о настройке доступа см. в документации Cloud Functions.Чтобы разрешить доступ к кластеру из сервиса Yandex Query, передайте параметр
--yandexquery-access=true
. Функциональность находится на стадии Preview и предоставляется по запросу.Примечание
По умолчанию при создании кластера устанавливается режим технического обслуживания
anytime
— в любое время. Вы можете установить конкретное время обслуживания при изменении настроек кластера. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for PostgreSQL:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер БД — описание кластера и его хостов.
-
База данных — описание БД кластера.
-
Пользователь — описание пользователя кластера.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
Пример структуры конфигурационного файла:
resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = "<идентификатор_сети>" security_group_ids = [ "<список_идентификаторов_групп_безопасности>" ] deletion_protection = <защита_от_удаления> config { version = "<версия_PostgreSQL>" resources { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } pooler_config { pool_discard = <параметр_Odyssey> pooling_mode = "<режим_работы>" } ... } host { zone = "<зона_доступности>" name = "<имя_хоста>" subnet_id = "<идентификатор_подсети>" assign_public_ip = <доступ_к_хосту_из_интернета> } } resource "yandex_mdb_postgresql_database" "<имя_БД>" { cluster_id = "<идентификатор_кластера>" name = "<имя_БД>" owner = "<имя_владельца_БД>" depends_on = [ yandex_mdb_postgresql_user.<имя_пользователя> ] } resource "yandex_mdb_postgresql_user" "<имя_пользователя>" { cluster_id = "<идентификатор_кластера>" name = "<имя_пользователя>" password = "<пароль_пользователя>" } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }
Где:
-
environment
— окружение:PRESTABLE
илиPRODUCTION
. -
assign_public_ip
— доступ к хосту из интернета:true
илиfalse
. -
deletion_protection
— защита от удаления кластера, его баз данных и пользователей:true
илиfalse
.По умолчанию при создании пользователей и БД значение параметра наследуется от кластера. Значение также можно задать вручную, подробнее см. в разделах Управление пользователями и Управление БД.
-
version
— версия PostgreSQL: 13, 13-1c, 14, 14-1c, 15, 15-1c, 16, 16-1c и 17. -
pool_discard
— параметр Odysseypool_discard
:true
илиfalse
. -
pooling_mode
— режим работы:SESSION
,TRANSACTION
илиSTATEMENT
.
Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена
postgres
,template0
,template1
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя.Примечание
Длина пароля от 8 до 128 символов.
Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }
Где:
type
— тип технического обслуживания. Принимает значения:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
Чтобы настроить сбор статистики, добавьте в блок
config
блокperformance_diagnostics
:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... config { ... performance_diagnostics { enabled = <активация_сбора_статистики> sessions_sampling_interval = <интервал_сбора_сессий> statements_sampling_interval = <интервала_сбора_запросов> } ... } ... }
Где:
enabled
— активация сбора статистики:true
илиfalse
.sessions_sampling_interval
— интервал сбора сессий от1
до86400
секунд.statements_sampling_interval
— интервала сбора запросов от60
до86400
секунд.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform
. -
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts
, например:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } }
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.create и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters' \ --data '{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "networkId": "<идентификатор_сети>", "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "deletionProtection": <защита_от_удаления:_true_или_false>, "configSpec": { "version": "<версия_PostgreSQL>", "resources": { "resourcePresetId": "<класс_хостов>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" }, "access": { "dataLens": <доступ_к_DataLens:_true_или_false>, "webSql": <доступ_к_WebSQL:_true_или_false>, "serverless": <доступ_к_Cloud_Functions:_true_или_false>, "dataTransfer": <доступ_к_Data_Transfer:_true_или_false>, "yandexQuery": <доступ_к_Query:_true_или_false> }, "performanceDiagnostics": { "enabled": <активация_сбора_статистики:_true_или_false>, "sessionsSamplingInterval": "<интервал_сбора_сессий>", "statementsSamplingInterval": "<интервал_сбора_запросов>" } }, "databaseSpecs": [ { "name": "<имя_БД>", "owner": "<имя_владельца_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "databaseName": "<имя_БД>" } ], "login": <разрешение_для_пользователя_на_подключение_к_БД:_true_или_false> }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "assignPublicIp": <публичный_адрес_хоста:_true_или_false> }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ] }'
Где:
-
folderId
— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name
— имя кластера. -
environment
— окружение кластера:PRODUCTION
илиPRESTABLE
. -
networkId
— идентификатор сети, в которой будет размещен кластер.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
securityGroupIds
— идентификаторы групп безопасности. -
deletionProtection
— защита от удаления кластера, его баз данных и пользователей. -
configSpec
— настройки кластера:-
version
— версия PostgreSQL. -
resources
— ресурсы кластера:resourcePresetId
— класс хостов;diskSize
— размер диска в байтах;diskTypeId
— тип диска.
-
access
— настройки доступа кластера к следующим сервисам Yandex Cloud:dataLens
— Yandex DataLens;webSql
— Yandex WebSQL;serverless
— Yandex Cloud Functions;dataTransfer
— Yandex Data Transfer;yandexQuery
— Yandex Query.
-
performanceDiagnostics
— настройки для сбора статистики:enabled
— активация сбора статистики.sessionsSamplingInterval
— интервал сбора сессий. Возможные значения: от1
до86400
секунд.statementsSamplingInterval
— интервал сбора запросов. Возможные значения: от60
до86400
секунд.
-
-
databaseSpecs
— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:name
— имя БД.owner
— имя владельца БД. Должно совпадать с именем одного из пользователей, указанных в запросе.
-
userSpecs
— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:name
— имя пользователя.password
— пароль пользователя.permissions.databaseName
— имя базы данных, к которой пользователь получает доступ.login
— разрешение для пользователя на подключение к БД.
-
hostSpecs
— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:zoneId
— зона доступности;subnetId
— идентификатор подсети;assignPublicIp
— разрешение на подключение к хосту из интернета.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService/Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "network_id": "<идентификатор_сети>", "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "deletion_protection": <защита_от_удаления:_true_или_false>, "config_spec": { "version": "<версия_PostgreSQL>", "resources": { "resource_preset_id": "<класс_хостов>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "access": { "data_lens": <доступ_к_DataLens:_true_или_false>, "web_sql": <доступ_к_WebSQL:_true_или_false>, "serverless": <доступ_к_Cloud_Functions:_true_или_false>, "data_transfer": <доступ_к_Data_Transfer:_true_или_false>, "yandex_query": <доступ_к_Query:_true_или_false> }, "performance_diagnostics": { "enabled": <активация_сбора_статистики:_true_или_false>, "sessions_sampling_interval": "<интервал_сбора_сессий>", "statements_sampling_interval": "<интервал_сбора_запросов>" } }, "database_specs": [ { "name": "<имя_БД>", "owner": "<имя_владельца_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "user_specs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "database_name": "<имя_БД>" } ], "login": <разрешение_для_пользователя_на_подключение_к_БД:_true_или_false> }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "assign_public_ip": <публичный_адрес_хоста:_true_или_false> }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.ClusterService.Create
Где:
-
folder_id
— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name
— имя кластера. -
environment
— окружение кластера:PRODUCTION
илиPRESTABLE
. -
network_id
— идентификатор сети, в которой будет размещен кластер.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
security_group_ids
— идентификаторы групп безопасности. -
deletion_protection
— защита от удаления кластера, его баз данных и пользователей. -
config_spec
— настройки кластера:-
version
— версия PostgreSQL. -
resources
— ресурсы кластера:resource_preset_id
— класс хостов;disk_size
— размер диска в байтах;disk_type_id
— тип диска.
-
access
— настройки доступа кластера к следующим сервисам Yandex Cloud:data_lens
— Yandex DataLens;web_sql
— Yandex WebSQL;serverless
— Yandex Cloud Functions;data_transfer
— Yandex Data Transfer;yandex_query
— Yandex Query.
-
performance_diagnostics
— настройки для сбора статистики:enabled
— активация сбора статистики.sessions_sampling_interval
— интервал сбора сессий. Возможные значения: от1
до86400
секунд.statements_sampling_interval
— интервал сбора запросов. Возможные значения: от60
до86400
секунд.
-
-
database_specs
— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:name
— имя БД.owner
— имя владельца БД. Должно совпадать с именем одного из пользователей, указанных в запросе.
-
user_specs
— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:name
— имя пользователя.password
— пароль пользователя.permissions.database_name
— имя базы данных, к которой пользователь получает доступ.login
— разрешение для пользователя на подключение к БД.
-
host_specs
— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:zone_id
— зона доступности;subnet_id
— идентификатор подсети;assign_public_ip
— разрешение на подключение к хосту из интернета.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Создать копию кластера
Вы можете создать кластер PostgreSQL, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера PostgreSQL импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер PostgreSQL обладает множеством настроек и нужно создать похожий на него кластер.
Чтобы создать копию кластера PostgreSQL:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tf
и содержимым:resource "yandex_mdb_postgresql_cluster" "old" { }
-
Запишите идентификатор первоначального кластера PostgreSQL в переменную окружения:
export POSTGRESQL_CLUSTER_ID=<идентификатор_кластера>
Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера PostgreSQL в конфигурацию Terraform:
terraform import yandex_mdb_postgresql_cluster.old ${POSTGRESQL_CLUSTER_ID}
-
Получите импортированную конфигурацию:
terraform show
-
Скопируйте ее из терминала и вставьте в файл с расширением
.tf
. -
Расположите файл в новой директории
imported-cluster
. -
Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:
- Укажите новое имя кластера в строке
resource
и параметреname
. - Удалите параметры
created_at
,health
,id
иstatus
. - В блоках
host
удалите параметрыfqdn
иrole
. - Если в блоке
disk_size_autoscaling
указано значение параметраdisk_size_limit = 0
, удалите этот блок. - Если в блоке
maintenance_window
указано значение параметраtype = "ANYTIME"
, удалите параметрhour
. - (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.
- Укажите новое имя кластера в строке
-
В директории
imported-cluster
получите данные для аутентификации. -
В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в директорию
imported-cluster
и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Проверьте корректность файлов конфигурации Terraform:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, передайте один параметр --host
.
Создайте кластер Managed Service for PostgreSQL с тестовыми характеристиками:
- С именем
mypg
. - В окружении
production
. - В сети
default
. - В группе безопасности
enp6saqnq4ie********
. - С одним хостом класса
s2.micro
в подсетиb0rcctk2rvtr********
, в зоне доступностиru-central1-a
. - С хранилищем на сетевых SSD-дисках (
network-ssd
) размером 20 ГБ. - С одним пользователем (
user1
), с паролемuser1user1
. - С одной БД
db1
, принадлежащей пользователюuser1
. - С защитой от случайного удаления кластера, его баз данных и пользователей.
Выполните следующую команду:
yc managed-postgresql cluster create \
--name mypg \
--environment production \
--network-name default \
--resource-preset s2.micro \
--host zone-id=ru-central1-a,subnet-id=b0rcctk2rvtr******** \
--disk-type network-ssd \
--disk-size 20 \
--user name=user1,password=user1user1 \
--database name=db1,owner=user1 \
--security-group-ids enp6saqnq4ie******** \
--deletion-protection
Создайте кластер Managed Service for PostgreSQL и сеть для него с тестовыми характеристиками:
-
С именем
mypg
. -
Версии
17
. -
В окружении
PRESTABLE
. -
В облаке с идентификатором
b1gq90dgh25********
. -
В каталоге с идентификатором
b1gia87mbaom********
. -
В новой сети
mynet
. -
В новой группе безопасности
pgsql-sg
, разрешающей подключение к кластеру из интернета через порт6432
. -
С одним хостом класса
s2.micro
в новой подсетиmysubnet
, в зоне доступностиru-central1-a
. Подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. -
С хранилищем на сетевых SSD-дисках (
network-ssd
) размером 20 ГБ. -
С одним пользователем (
user1
), с паролемuser1user1
. -
С одной БД
db1
, принадлежащей пользователюuser1
. -
С защитой от случайного удаления кластера, его баз данных и пользователей.
Конфигурационный файл для такого кластера выглядит так:
resource "yandex_mdb_postgresql_cluster" "mypg" {
name = "mypg"
environment = "PRESTABLE"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.pgsql-sg.id ]
deletion_protection = true
config {
version = 17
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = "20"
}
}
host {
zone = "ru-central1-a"
name = "mypg-host-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
}
}
resource "yandex_mdb_postgresql_database" "db1" {
cluster_id = yandex_mdb_postgresql_cluster.mypg.id
name = "db1"
owner = "user1"
}
resource "yandex_mdb_postgresql_user" "user1" {
cluster_id = yandex_mdb_postgresql_cluster.mypg.id
name = "user1"
password = "user1user1"
}
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.5.0.0/24"]
}
resource "yandex_vpc_security_group" "pgsql-sg" {
name = "pgsql-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "PostgreSQL"
port = 6432
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
Управление параметрами подключения к базе данных с Connection Manager
Если вашему облаку или каталогу предоставлен доступ к Public Preview сервиса Connection Manager, то после создания кластера в вашем каталоге появится новая сущность — подключение для управления параметрами подключения к базам данных.
Пароли и другая чувствительная информация будет храниться в секрете Yandex Lockbox. Чтобы посмотреть, какие секреты хранят информацию о подключениях вашего кластера, выберите в вашем каталоге в списке сервисов Lockbox. На странице Секреты в колонке зависимостей секретов будет указан идентификатор вашего кластера.
Вы также можете настраивать доступ к подключениям в Connection Manager.
Чтобы настроить интеграцию с Connection Manager, обратитесь в техническую поддержку