Создание кластера Sharded PostgreSQL
Роли для создания кластера
Для создания кластера Managed Service for Sharded PostgreSQL и работы с ним вашему аккаунту в Yandex Cloud нужны роли:
-
managed-spqr.editor или выше — чтобы создать кластер;
-
mdb.viewer — чтобы просматривать кластеры управляемых баз данных (MDB) на дашборде в консоли управления
.
О назначении ролей читайте в документации Yandex Identity and Access Management.
Создать кластер
-
В консоли управления
выберите каталог, в котором нужно создать кластер Sharded PostgreSQL. -
Перейдите
в сервис Yandex Managed Service for Sharded PostgreSQL. -
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Задайте имя кластера. Имя должно быть уникальным в рамках каталога.
-
(Опционально) Введите описание кластера.
-
(Опционально) Создайте метки:
- Нажмите кнопку Добавить метку.
- Введите метку в формате
ключ: значение. - Нажмите Enter.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION— для стабильных версий ваших приложений.PRESTABLE— для тестирования. Prestable-окружение аналогично Production-окружению, и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
Выберите тип шардирования:
Стандартное— кластер будет состоять только из инфраструктурных хостов.Расширенное— кластер будет состоять только из хостов-роутеров и хостов-координаторов.
-
-
В блоке Сетевые настройки выберите сеть и группы безопасности для кластера.
Важно
Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт
6432. -
Задайте конфигурацию вычислительных ресурсов:
-
Для стандартного шардирования задайте в блоке Инфраструктура конфигурацию инфраструктурных хостов.
-
Для расширенного шардирования задайте в блоке Роутер конфигурацию хостов-роутеров.
В блоке Координатор задайте конфигурацию хостов-координаторов.
Чтобы задать конфигурацию вычислительных ресурсов:
-
В поле Платформа выберите платформу.
-
Укажите Тип виртуальной машины, на которой будут развернуты хосты.
-
Выберите Класс хоста.
-
В блоке Хранилище выберите тип диска и укажите размер хранилища.
-
В блоке Хосты:
-
Нажмите кнопку Добавить хост, чтобы добавить нужное количество хостов, создаваемых вместе с кластером Sharded PostgreSQL.
-
Нажмите на значок
и укажите для каждого хоста:- Зону доступности.
- Подсеть — по умолчанию каждый хост создается в отдельной подсети.
- Опцию Публичный доступ, если хост должен быть доступен извне Yandex Cloud.
После создания кластера Sharded PostgreSQL в него можно добавить дополнительные хосты, если для этого достаточно ресурсов каталога.
-
-
-
В блоке База данных укажите параметры БД, в которой можно выполнять запросы к таблицам на шардах. Подробнее о подключении к БД.
-
Имя БД. Допустимая длина — от 1 до 63 символов. Может содержать строчные и прописные буквы латинского алфавита, цифры, нижние подчеркивания и дефисы.
-
Имя пользователя. Допустимая длина — от 1 до 63 символов. Может содержать строчные и прописные буквы латинского алфавита, цифры, нижние подчеркивания и дефисы, но не может начинаться с дефиса.
-
Пароль пользователя. Допустимая длина — от 8 до 128 символов.
-
-
Задайте дополнительные настройки кластера:
-
Минимальный уровень логирования — в журнал выполнения будут записываться логи указанного уровня и выше. Доступные уровни —
DEBUG,INFO,WARN,ERROR,FATALиPANIC. Уровень по умолчанию —INFO. -
Начало резервного копирования (UTC) — промежуток времени, в течение которого начинается резервное копирование кластера. Время указывается по UTC в 24-часовом формате. По умолчанию —
22:00 - 23:00UTC. -
Срок хранения автоматических резервных копий, дней — автоматические резервные копии будут храниться указанное количество дней. По умолчанию — 7 дней.
-
Обслуживание — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт В любое время (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт По расписанию и укажите день недели и интервал времени по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать обновление СУБД, применение патчей и т. д.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления.
После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.
Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.
-
-
Чтобы задать настройки СУБД уровня кластера, в блоке Настройки СУБД нажмите кнопку Настроить.
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы создать кластер Managed Service for Sharded PostgreSQL:
-
Посмотрите описание команды CLI для создания кластера:
yc managed-sharded-postgresql cluster create --help -
Укажите параметры кластера в команде создания (в примере приведены не все параметры):
Для кластера со стандартным шардированием
yc managed-sharded-postgresql cluster create \ --name <имя_кластера> \ --environment <окружение> \ --network-name <имя_сети> \ --security-group-ids <идентификаторы_групп_безопасности> \ --host type=infra,` `zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети>,` `assign-public-ip=<разрешить_публичный_доступ_к_хосту> \ --infra-resource-preset <класс_хостов_INFRA> \ --infra-disk-size <размер_хранилища_ГБ> \ --infra-disk-type <тип_диска> \ --database name=<имя_БД> \ --user name=<имя_пользователя>,` `password=<пароль>,` `permission=<имя_БД>,` `connection-limit=<количество_подключений_для_пользователя>,` `connection-retries=<количество_повторных_попыток_соединения> \ --deletion-protection=<защитить_кластер_от_удаления>Для кластера с расширенным шардированием
yc managed-sharded-postgresql cluster create \ --name <имя_кластера> \ --environment <окружение> \ --network-name <имя_сети> \ --security-group-ids <идентификаторы_групп_безопасности> \ --host type=router,` `zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети>,` `assign-public-ip=<разрешить_публичный_доступ_к_хосту> \ --router-resource-preset <класс_хостов_роутера> \ --router-disk-size <размер_хранилища_ГБ> \ --router-disk-type <тип_диска> \ --host type=coordinator,` `zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети>,` `assign-public-ip=<разрешить_публичный_доступ_к_хосту> \ --coordinator-resource-preset <класс_хостов_координатора> \ --coordinator-disk-size <размер_хранилища_ГБ> \ --coordinator-disk-type <тип_диска> \ --database name=<имя_БД> \ --user name=<имя_пользователя>,` `password=<пароль>,` `permission=<имя_БД>,` `connection-limit=<количество_подключений_для_пользователя>,` `connection-retries=<количество_повторных_попыток_соединения> \ --deletion-protection=<защитить_кластер_от_удаления>Где:
-
--name— имя кластера. -
--environment— окружение кластера:productionилиprestable. -
--network-name— имя сети, в которой будет размещен кластер.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
--security-group-ids— идентификаторы групп безопасности через запятую.Важно
Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт
6432. -
--host— настройки хоста кластера. Параметр задается для каждого хоста отдельно и имеет следующую структуру:-
type— тип хоста. Возможные значения:router— роутер в кластере с расширенным шардированием;coordinator— координатор в кластере с расширенным шардированием;infra— хостINFRAв кластере со стандартным шардированием.
-
zone-id— зона доступности. -
subnet-id— идентификатор подсети. -
assign-public-ip— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.
-
-
--router-resource-preset— класс хостов роутера. -
--router-disk-size— размер диска роутера в гигабайтах. -
--router-disk-type— тип диска роутера. -
--coordinator-resource-preset— класс хостов координатора. -
--coordinator-disk-size— размер диска координатора в гигабайтах. -
--coordinator-disk-type— тип диска координатора. -
--infra-resource-preset— класс хостовINFRA. -
--infra-disk-size— размер дискаINFRAв гигабайтах. -
--infra-disk-type— тип дискаINFRA. -
--database— настройки базы данных:name— имя базы данных.
Для каждой базы данных задайте отдельный параметр
--database. -
--user— настройки пользователя. Параметр задается для каждого пользователя отдельно и имеет следующую структуру:-
name— имя пользователя.Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания
pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.Имена
admin,repl,monitor,postgres,mdb_admin,mdb_monitor,mdb_replicationзарезервированы. Создать пользователей с этими именами нельзя. -
password— пароль пользователя. Длина пароля — от 8 до 128 символов. -
permission— имя базы данных, к которой пользователь получает доступ.Для каждой базы данных, к которой пользователю нужно предоставить доступ, передайте отдельный параметр
permission. -
connection-limit— максимальное количество одновременных подключений для пользователя. -
connection-retries— максимальное количество повторных попыток соединения.
-
-
--deletion-protection— защита кластера от непреднамеренного удаления:trueилиfalse.После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.
Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.
-
Чтобы настроить окно резервного копирования, передайте следующие параметры:
yc managed-sharded-postgresql cluster create \ ... --backup-window-start <время_начала_резервного_копирования> \ --backup-retain-period-days <срок_хранения_автоматических_резервных_копий_в_днях> \ ...Где:
--backup-window-start— время начала резервного копирования кластера по UTC в форматеHH:MM:SS.--backup-retain-period-days— срок хранения автоматических резервных копий. Возможные значения: от7до60дней. Значение по умолчанию —7дней.
-
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
Чтобы создать кластер Managed Service for Sharded PostgreSQL:
-
Опишите в конфигурационном файле параметры следующих ресурсов:
- Кластер Managed Service for Sharded PostgreSQL.
- База данных кластера.
- Пользователь кластера.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
Для кластера со стандартным шардированием
resource "yandex_mdb_sharded_postgresql_cluster" "<локальное_имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = yandex_vpc_network.<локальное_имя_сети>.id security_group_ids = ["<идентификаторы_групп_безопасности>"] deletion_protection = <защитить_кластер_от_удаления> config = { sharded_postgresql_config = { infra = { resources = { resource_preset_id = "<класс_хостов_INFRA>" disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" } } } } hosts = { <имя_хоста> = { type = "INFRA" zone = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<локальное_имя_подсети>.id assign_public_ip = <разрешить_публичный_доступ_к_хосту> } } } resource "yandex_mdb_sharded_postgresql_database" "<локальное_имя_БД>" { cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id name = "<имя_БД>" } resource "yandex_mdb_sharded_postgresql_user" "<локальное_имя_пользователя>" { cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id name = "<имя_пользователя>" password = "<пароль>" permissions { database = yandex_mdb_sharded_postgresql_database.<локальное_имя_БД>.name } settings = { connection_limit = <количество_подключений_для_пользователя> connection_retries = <количество_повторных_попыток_соединения> } } resource "yandex_vpc_network" "<локальное_имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<локальное_имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = yandex_vpc_network.<локальное_имя_сети>.id v4_cidr_blocks = ["<диапазон_IP-адресов>"] }Для кластера с расширенным шардированием
resource "yandex_mdb_sharded_postgresql_cluster" "<локальное_имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = yandex_vpc_network.<локальное_имя_сети>.id security_group_ids = ["<идентификаторы_групп_безопасности>"] deletion_protection = <защитить_кластер_от_удаления> config = { sharded_postgresql_config = { router = { resources = { resource_preset_id = "<класс_хостов_роутера>" disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" } } coordinator = { resources = { resource_preset_id = "<класс_хостов_координатора>" disk_size = <размер_хранилища_ГБ> disk_type_id = "<тип_диска>" } } } } hosts = { <имя_хоста_1> = { type = "ROUTER" zone = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<локальное_имя_подсети>.id assign_public_ip = <разрешить_публичный_доступ_к_хосту> } <имя_хоста_2> = { type = "COORDINATOR" zone = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<локальное_имя_подсети>.id assign_public_ip = <разрешить_публичный_доступ_к_хосту> } } } resource "yandex_mdb_sharded_postgresql_database" "<локальное_имя_БД>" { cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id name = "<имя_БД>" } resource "yandex_mdb_sharded_postgresql_user" "<локальное_имя_пользователя>" { cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id name = "<имя_пользователя>" password = "<пароль>" permissions { database = yandex_mdb_sharded_postgresql_database.<локальное_имя_БД>.name } settings = { connection_limit = <количество_пользовательских_подключений> connection_retries = <количество_повторов_при_подключении> } } resource "yandex_vpc_network" "<локальное_имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<локальное_имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = yandex_vpc_network.<локальное_имя_сети>.id v4_cidr_blocks = ["<диапазон_IP-адресов>"] }Где:
-
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
network_id— идентификатор сети, в которой будет размещен кластер.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
security_group_ids— список идентификаторов групп безопасности.Важно
Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт
6432. -
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse.После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.
Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.
-
hosts— хосты кластера в виде ассоциативного массива элементов. Ключ задает имя хоста, а значение — параметры хоста. Каждый элемент имеет следующую структуру:-
type— тип хоста. Возможные значения:ROUTER— роутер в кластере с расширенным шардированием;COORDINATOR— координатор в кластере с расширенным шардированием;INFRA— хостINFRAв кластере со стандартным шардированием.
-
zone— зона доступности. -
subnet_id— идентификатор подсети. -
assign_public_ip— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.
-
-
config.sharded_postgresql_config.router.resources— параметры ресурсов роутера в кластере с расширенным шардированием:resource_preset_id— класс хостов.disk_size— размер диска в гигабайтах.disk_type_id— тип диска.
-
config.sharded_postgresql_config.coordinator.resources— параметры ресурсов координатора в кластере с расширенным шардированием:resource_preset_id— класс хостов.disk_size— размер диска в гигабайтах.disk_type_id— тип диска.
-
config.sharded_postgresql_config.infra.resources— параметры ресурсовINFRAв кластере со стандартным шардированием:resource_preset_id— класс хостов.disk_size— размер диска в гигабайтах.disk_type_id— тип диска.
-
Чтобы настроить окно резервного копирования, добавьте в блок
configследующие параметры:resource "yandex_mdb_sharded_postgresql_cluster" "<локальное_имя_кластера>" { ... config = { backup_window_start = { hours = <часы> minutes = <минуты> } backup_retain_period_days = <срок_хранения_автоматических_резервных_копий_в_днях> ... } ... }Где:
-
backup_window_start— время начала резервного копирования кластера по UTC:hours— от0до23часов.minutes— от0до59минут.
-
backup_retain_period_days— срок хранения автоматических резервных копий. Возможные значения: от7до60дней. Значение по умолчанию —7дней.
-
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window:resource "yandex_mdb_sharded_postgresql_cluster" "<имя_кластера>" { ... maintenance_window { type = "<тип_технического_обслуживания>" day = "<день_недели>" hour = <порядковый_номер_часового_интервала> } ... }Где:
-
type— тип технического обслуживания. Принимает значения:ANYTIME(по умолчанию) — в любое время.WEEKLY— по расписанию.
-
day— день недели для типаWEEKLY:MON,TUE,WED,THU,FRI,SATилиSUN. -
hour— порядковый номер часового интервала по UTC для типаWEEKLY: от1до24.Например,
1соответствует интервалу с00:00до01:00,5— с04:00до05:00.
-
Подробнее о ресурсе
yandex_mdb_sharded_postgresql_clusterв документации провайдера Terraform. -
Проверьте корректность файлов конфигурации Terraform:
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for Sharded PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts, например:resource "yandex_mdb_sharded_postgresql_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } } -
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "description": "<описание>", "environment": "<окружение>", "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "networkId": "<идентификатор_сети>", "deletionProtection": <защитить_кластер_от_удаления>, "configSpec": { "spqrSpec": { "router": { "config": { "showNoticeMessages": <показывать_информационные_уведомления>, "timeQuantiles": [ <список_квантилей_времени_для_отображения_статистики> ], "defaultRouteBehavior": "<разрешать_мультишардовые_запросы>", "preferSameAvailabilityZone": <приоритет_маршрутизации_в_зону_доступности_роутера> }, "resources": { "resourcePresetId": "<класс_хостов_роутера>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "coordinator": { "resources": { "resourcePresetId": "<класс_хостов_координатора>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "infra": { "router": { "showNoticeMessages": <показывать_информационные_уведомления>, "time_quantiles": [ <список_квантилей_времени_для_отображения_статистики> ], "defaultRouteBehavior": "<разрешать_мультишардовые_запросы>", "preferSameAvailabilityZone": <приоритет_маршрутизации_в_зону_доступности_роутера> }, "resources": { "resourcePresetId": "<класс_хостов_INFRA>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } }, "consolePassword": "<пароль_консоли_Sharded_PostgreSQL>", "logLevel": "<уровень_логирования>" }, "backupWindowStart": { "hours": "<часы>", "minutes": "<минуты>", "seconds": "<секунды>", "nanos": "<наносекунды>" }, "backupRetainPeriodDays": "<количество_дней>", }, "databaseSpecs": [ { "name": "<имя_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "databaseName": "<имя_БД>" }, { <имя_БД_2> }, { ... }, { <имя_БД_N> } ], "settings": { "connectionLimit": "<количество_пользовательских_соединений>", "connectionRetries": "<количество_повторов_при_подключении>" }, "grants": [ "привилегия_1", ..., "привилегия_N" ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "assignPublicIp": <разрешить_публичный_доступ_к_хосту>, "type": "<тип_хоста>" }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ], "shardSpecs": [ { "shardName": "<имя_шарда>", "mdbPostgresql": { "clusterId": "<идентификатор_кластера>" } }, { <аналогичный_набор_настроек_для_шарда_2> }, { ... }, { <аналогичный_набор_настроек_для_шарда_N> } ], "maintenanceWindow": { "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<порядковый_номер_часового_интервала>" } } }Где:
-
folderId— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
networkId— идентификатор сети, в которой будет размещен кластер.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
securityGroupIds— идентификаторы групп безопасности.Важно
Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт
6432. -
deletionProtection— защита кластера от удаления:trueилиfalse.После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.
Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.
-
configSpec— настройки кластера:-
spqrSpec— настройки сервиса Sharded PostgreSQL:-
router— при расширенном шардировании задайте настройки роутера:-
config— конфигурация роутера:showNoticeMessages— показывать информационные уведомления:trueилиfalse.timeQuantiles— массив строк временных квантилей для отображения статистики. По умолчанию используются значения"0.5","0.75","0.9","0.95","0.99","0.999","0.9999".defaultRouteBehavior— политика выполнения мультишардовых запросов роутером. Возможные значения:BLOCK— блокировать,ALLOW— разрешать.preferSameAvailabilityZone— включить приоритет маршрутизации запросов на чтение в зону доступности роутера:trueилиfalse.
-
resources— параметры ресурсов хостовROUTER:resourcePresetId— класс хостов;diskSize— размер диска в байтах;diskTypeId— тип диска.
-
-
coordinator– при расширенном шардировании задайте параметры ресурсов координатора:resourcePresetId— класс хостов;diskSize— размер диска в байтах;diskTypeId— тип диска.
-
infra– при стандартном шардировании задайте настройки хостовINFRA:-
resources— параметры ресурсов:resourcePresetId— класс хостов;diskSize— размер диска в байтах;diskTypeId— тип диска.
-
router— конфигурация роутера:showNoticeMessages— показывать информационные уведомления:trueилиfalse.timeQuantiles— массив временных квантилей для отображения статистики. По умолчанию используются значения0.5,0.75,0.9,0.95,0.99,0.999,0.9999.defaultRouteBehavior— политика выполнения мультишардовых запросов роутером. Возможные значения:BLOCK— блокировать,ALLOW— разрешать.preferSameAvailabilityZone— включить приоритет маршрутизации запросов на чтение в зону доступности роутера:trueилиfalse.
-
consolePassword— пароль консоли Sharded PostgreSQL. -
logLevel— уровень логирования запросов:DEBUG,INFO,WARNING,ERROR,FATAL,PANIC.
-
-
-
backupWindowStart— настройки окна резервного копирования.В параметре укажите время, когда начинать резервное копирование. Возможные значения параметров:
hours— от0до23часов;minutes— от0до59минут;seconds— от0до59секунд;nanos— от0до999999999наносекунд.
-
backupRetainPeriodDays— сколько дней хранить резервную копию кластера. Возможные значения: от7до60дней.
-
-
databaseSpecs— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:name— имя БД.
-
userSpecs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. -
password— пароль пользователя. Длина пароля — от 8 до 128 символов. -
permissions.databaseName— имя базы данных, к которой пользователь получает доступ. -
settings— параметры пользовательских подключений к БД:connectionLimit— лимит подключений.connectionRetries— количество повторных попыток подключения.
-
grants– привилегии пользователя в виде массива строк. Возможные значения:reader,writer,admin,transfer.
-
-
hostSpecs— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:-
zoneId— зона доступности; -
subnetId— идентификатор подсети; -
assignPublicIp— разрешение на подключение к хосту из интернета:trueилиfalse; -
type— тип хоста. Возможные значения:ROUTER— роутер в кластере с расширенным шардированием;COORDINATOR— координатор в кластере с расширенным шардированием;INFRA— хостINFRAв кластере со стандартным шардированием.
-
-
shardSpecs— настройки шардов в виде массива элементов. Каждый элемент соответствует отдельному шарду и имеет следующую структуру:shardName— имя шарда.mdbPostgresql.clusterId— идентификатор кластера Managed Service for PostgreSQL в составе шарда.
-
maintenanceWindow— настройки расписания окна технического обслуживания (в т. ч. для выключенных кластеров). Передайте один из двух параметров:-
anytime— техническое обслуживание проводится в любое время. -
weeklyMaintenanceWindow— техническое обслуживание проводится раз в неделю в указанное время:-
day— день недели:MON,TUE,WED,THU,FRI,SATилиSUN. -
hour— порядковый номер часового интервала по UTC: от1до24.Например,
1соответствует интервалу с00:00до01:00,5— с04:00до05:00.
-
-
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-spqr/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": "<имя_кластера>", "description": "<описание>", "environment": "<окружение>", "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "network_id": "<идентификатор_сети>", "deletion_protection": <защитить_кластер_от_удаления>, "config_spec": { "spqr_spec": { "router": { "config": { "show_notice_messages": { "value": <показывать_информационные_уведомления> }, "time_quantiles": [ <список_квантилей_времени_для_отображения_статистики> ], "default_route_behavior": "<разрешать_мультишардовые_запросы>", "prefer_same_availability_zone": { "value": <приоритет_маршрутизации_в_зону_доступности_роутера> } }, "resources": { "resource_preset_id": "<класс_хостов_роутера>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "coordinator": { "resources": { "resource_preset_id": "<класс_хостов_координатора>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } }, "infra": { "resources": { "resource_preset_id": "класс_хостов_INFRA", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "router": { "show_notice_messages": { "value": <показывать_информационные_уведомления> }, "time_quantiles": [ <список_квантилей_времени_для_отображения_статистики> ], "default_route_behavior": "<разрешать_мультишардовые_запросы>", "prefer_same_availability_zone": { "value": <приоритет_маршрутизации_в_зону_доступности_роутера> } }, }, "console_password": "<пароль_консоли_Sharded_PostgreSQL>", "log_level": "<уровень_логирования>" }, "backup_window_start": { "hours": "<часы>", "minutes": "<минуты>", "seconds": "<секунды>", "nanos": "<наносекунды>" }, "backup_retain_period_days": "<количество_дней>" }, "database_specs": [ { "name": "<имя_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "user_specs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "database_name": "<имя_БД>" }, { <имя_БД_2> }, { ... }, { <имя_БД_N> } ], "settings": { "connection_limit": { "value": <количество_пользовательских_соединений> }, "connection_retries": { "value": <количество_повторов_при_подключении> } }, "grants": [ "привилегия_1", ..., "привилегия_N" ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "assign_public_ip": <разрешить_публичный_доступ_к_хосту>, "type": "<тип_хоста>" }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ], "shard_specs": [ { "shard_name": "<имя_шарда>", "mdb_postgresql": { "cluster_id": "<идентификатор_кластера>" } }, { <аналогичный_набор_настроек_для_шарда_2> }, { ... }, { <аналогичный_набор_настроек_для_шарда_N> } ], "maintenance_window": { "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<порядковый_номер_часового_интервала>" } } }Где:
-
folder_id— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
network_id— идентификатор сети, в которой будет размещен кластер.Важно
Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.
-
security_group_ids— идентификаторы групп безопасности.Важно
Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт
6432. -
deletion_protection— защита кластера от удаления:trueилиfalse.После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.
Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.
-
config_spec— настройки кластера:-
spqr_spec— настройки сервиса Sharded PostgreSQL:-
router— при расширенном шардировании задайте настройки роутера:-
config— конфигурация роутера:show_notice_messages— показывать информационные уведомления:trueилиfalse.time_quantiles— массив временных квантилей для отображения статистики. По умолчанию используются значения0.5,0.75,0.9,0.95,0.99,0.999,0.9999.default_route_behavior— политика выполнения мультишардовых запросов роутером. Возможные значения:BLOCK— блокировать,ALLOW— разрешать.prefer_same_availability_zone— включить приоритет маршрутизации запросов на чтение в зону доступности роутера:trueилиfalse.
-
resources— параметры ресурсов хостовROUTER:resource_preset_id— класс хостов;disk_size— размер диска в байтах;disk_type_id— тип диска.
-
-
coordinator– при расширенном шардировании задайте параметры ресурсов координатора:resource_preset_id— класс хостов;disk_size— размер диска в байтах;disk_type_id— тип диска.
-
infra– при стандартном шардировании задайте настройки хостовINFRA:-
resources— параметры ресурсов:resource_preset_id— класс хостов;disk_size— размер диска в байтах;disk_type_id— тип диска.
-
router— конфигурация роутера:default_route_behavior— поведение роутера по умолчанию. Возможные значения:BLOCK— блокировать запрос,ALLOW— разрешать.prefer_same_availability_zone— включить приоритет маршрутизации в зону доступности роутера:trueилиfalse.
-
console_password— пароль консоли Sharded PostgreSQL. -
log_level— уровень логирования запросов:DEBUG,INFO,WARNING,ERROR,FATAL,PANIC.
-
-
-
backup_window_start— настройки окна резервного копирования.В параметре укажите время, когда начинать резервное копирование. Возможные значения параметров:
hours— от0до23часов;minutes— от0до59минут;seconds— от0до59секунд;nanos— от0до999999999наносекунд.
-
backup_retain_period_days— сколько дней хранить резервную копию кластера. Возможные значения: от7до60дней.
-
-
database_specs— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:name— имя БД.
-
user_specs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. -
password— пароль пользователя. Длина пароля — от 8 до 128 символов. -
permissions.database_name— имя базы данных, к которой пользователь получает доступ. -
settings— параметры пользовательских подключений к БД:connection_limit— лимит подключений.connection_retries— количество повторных попыток подключения.
-
grants– привилегии пользователя в виде массива строк. Возможные значения:reader,writer,admin,transfer.
-
-
host_specs— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:-
zone_id— зона доступности; -
subnet_id— идентификатор подсети; -
assign_public_ip— разрешение на подключение к хосту из интернета:trueилиfalse; -
type— тип хоста. Возможные значения:ROUTER— роутер в кластере с расширенным шардированием;COORDINATOR— координатор в кластере с расширенным шардированием;INFRA— хостINFRAв кластере со стандартным шардированием.
-
-
shard_specs— настройки шардов в виде массива элементов. Каждый элемент соответствует отдельному шарду и имеет следующую структуру:shard_name— имя шарда.mdb_postgresql.cluster_id— идентификатор кластера Managed Service for PostgreSQL в составе шарда.
-
maintenance_window— настройки расписания окна технического обслуживания (в т. ч. для выключенных кластеров). Передайте один из двух параметров:-
anytime— техническое обслуживание проводится в любое время. -
weekly_maintenance_window— техническое обслуживание проводится раз в неделю в указанное время:-
day— день недели:MON,TUE,WED,THU,FRI,SATилиSUN. -
hour— порядковый номер часового интервала по UTC: от1до24.Например,
1соответствует интервалу с00:00до01:00,5— с04:00до05:00.
-
-
-
-
Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/spqr/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.spqr.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Создание кластера со стандартным шардированием
Создайте кластер Managed Service for Sharded PostgreSQL с тестовыми характеристиками:
-
Имя
spqr-std. -
Окружение
production. -
Сеть
default. -
Группа безопасности
enpjfvd3f34c********. -
Один хост
infraв зоне доступностиru-central1-aв подсети с идентификаторомe9bhbia2scnk********. -
Класс хоста
s2.micro. -
Хранилище на сетевых SSD-дисках (
network-ssd) размером10ГБ. -
База данных
db1. -
Пользователь
user1с паролемPassword123и доступом к базе данныхdb1. -
Защита от непреднамеренного удаления кластера включена.
Выполните следующую команду:
yc managed-sharded-postgresql cluster create \
--name spqr-std \
--environment production \
--network-name default \
--security-group-ids enpjfvd3f34c******** \
--host type=infra,zone-id=ru-central1-a,subnet-id=e9bhbia2scnk******** \
--infra-resource-preset s2.micro \
--infra-disk-size 10 \
--infra-disk-type network-ssd \
--database name=db1 \
--user name=user1,password=Password123,permission=db1 \
--deletion-protection=true
Создайте кластер Managed Service for Sharded PostgreSQL, а также сеть, подсеть и группу безопасности для него, используя следующие тестовые характеристики:
-
Имя
spqr-std. -
Окружение
PRODUCTION. -
Сеть
spqr-network. -
Группа безопасности
spqr-sgс правилами, которые разрешают входящие и исходящие TCP-подключения на порт6432.Эти правила нужны для подключения роутера к хостам шарда, а также для подключения к кластеру через интернет. Для подключения к кластеру через интернет также включите публичный доступ к хосту. Подробнее о подключении к кластеру.
-
Один хост
INFRAв зоне доступностиru-central1-aв подсетиspqr-network-ru-central1-aс диапазоном IP-адресов10.128.0.0/24. -
Класс хоста
s2.micro. -
Хранилище на сетевых SSD-дисках (
network-ssd) размером10ГБ. -
База данных
db1. -
Пользователь
user1с паролемPassword123и доступом к базе данныхdb1. -
Защита от непреднамеренного удаления кластера включена.
Конфигурационный файл для создания этих ресурсов выглядит так:
resource "yandex_vpc_network" "spqr_network" {
description = "Network for the Managed Service for Sharded PostgreSQL"
name = "spqr-network"
}
resource "yandex_vpc_subnet" "subnet_a" {
description = "Subnet in the ru-central1-a availability zone"
name = "spqr-network-ru-central1-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.spqr_network.id
v4_cidr_blocks = ["10.128.0.0/24"]
}
resource "yandex_vpc_security_group" "spqr_sg" {
description = "Security group for the Managed Service for Sharded PostgreSQL"
name = "spqr-sg"
network_id = yandex_vpc_network.spqr_network.id
ingress {
description = "Allow connections from the Internet and between cluster components"
port = 6432
protocol = "TCP"
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
description = "Allow connections between cluster components"
port = 6432
protocol = "TCP"
v4_cidr_blocks = ["0.0.0.0/0"]
}
}
resource "yandex_mdb_sharded_postgresql_cluster" "spqr_cluster" {
description = "Managed Service for Sharded PostgreSQL cluster with standard sharding"
name = "spqr-std"
environment = "PRODUCTION"
network_id = yandex_vpc_network.spqr_network.id
security_group_ids = [yandex_vpc_security_group.spqr_sg.id]
deletion_protection = true
config = {
sharded_postgresql_config = {
infra = {
resources = {
disk_size = 10
disk_type_id = "network-ssd"
resource_preset_id = "s2.micro"
}
}
}
}
hosts = {
infra1 = {
type = "INFRA"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
}
}
resource "yandex_mdb_sharded_postgresql_database" "spqr_cluster_db" {
cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
name = "db1"
}
resource "yandex_mdb_sharded_postgresql_user" "spqr_cluster_user" {
cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
name = "user1"
password = "Password123"
permissions {
database = yandex_mdb_sharded_postgresql_database.spqr_cluster_db.name
}
}
Создание кластера с расширенным шардированием
Создайте кластер Managed Service for Sharded PostgreSQL с тестовыми характеристиками:
-
Имя
spqr-adv. -
Окружение
production. -
Сеть
default. -
Группа безопасности
enpjfvd3f34c********. -
Три хоста
routerклассаs2.microпо одному в каждой зоне доступности:- в зоне доступности
ru-central1-aв подсети с идентификаторомe9bhbia2scnk********; - в зоне доступности
ru-central1-bв подсети с идентификаторомe2lfqbm5nt9r********; - в зоне доступности
ru-central1-dв подсети с идентификаторомfl8beqmjckv8********.
- в зоне доступности
-
Три хоста
coordinatorклассаs2.microпо одному в каждой зоне доступности:- в зоне доступности
ru-central1-aв подсети с идентификаторомe9bhbia2scnk********; - в зоне доступности
ru-central1-bв подсети с идентификаторомe2lfqbm5nt9r********; - в зоне доступности
ru-central1-dв подсети с идентификаторомfl8beqmjckv8********.
- в зоне доступности
-
Хранилище на сетевых SSD-дисках (
network-ssd) размером10ГБ для каждого хостаrouter. -
Хранилище на сетевых SSD-дисках (
network-ssd) размером10ГБ для каждого хостаcoordinator. -
База данных
db1. -
Пользователь
user1с паролемPassword123и доступом к базе данныхdb1. -
Защита от непреднамеренного удаления кластера включена.
Выполните следующую команду:
yc managed-sharded-postgresql cluster create \
--name spqr-adv \
--environment production \
--network-name default \
--security-group-ids enpjfvd3f34c******** \
--host type=router,zone-id=ru-central1-a,subnet-id=e9bhbia2scnk******** \
--host type=router,zone-id=ru-central1-b,subnet-id=e2lfqbm5nt9r******** \
--host type=router,zone-id=ru-central1-d,subnet-id=fl8beqmjckv8******** \
--host type=coordinator,zone-id=ru-central1-a,subnet-id=e9bhbia2scnk******** \
--host type=coordinator,zone-id=ru-central1-b,subnet-id=e2lfqbm5nt9r******** \
--host type=coordinator,zone-id=ru-central1-d,subnet-id=fl8beqmjckv8******** \
--router-resource-preset s2.micro \
--router-disk-size 10 \
--router-disk-type network-ssd \
--coordinator-resource-preset s2.micro \
--coordinator-disk-size 10 \
--coordinator-disk-type network-ssd \
--database name=db1 \
--user name=user1,password=Password123,permission=db1 \
--deletion-protection=true
Создайте кластер Managed Service for Sharded PostgreSQL, а также сеть, подсеть и группу безопасности для него, используя следующие тестовые характеристики:
-
Имя
spqr-adv. -
Окружение
PRODUCTION. -
Сеть
spqr-network. -
Группа безопасности
spqr-sgс правилами, которые разрешают входящие и исходящие TCP-подключения на порт6432.Эти правила нужны для подключения роутера к хостам шарда, а также для подключения к кластеру через интернет. Для подключения к кластеру через интернет также включите публичный доступ к хостам. Подробнее о подключении к кластеру.
-
Три хоста
ROUTERклассаs2.microпо одному в каждой зоне доступности:- в зоне доступности
ru-central1-aв подсетиspqr-network-ru-central1-aс диапазоном IP-адресов10.128.0.0/24; - в зоне доступности
ru-central1-bв подсетиspqr-network-ru-central1-bс диапазоном IP-адресов10.128.1.0/24; - в зоне доступности
ru-central1-dв подсетиspqr-network-ru-central1-dс диапазоном IP-адресов10.128.2.0/24.
- в зоне доступности
-
Три хоста
COORDINATORклассаs2.microпо одному в каждой зоне доступности:- в зоне доступности
ru-central1-aв подсетиspqr-network-ru-central1-aс диапазоном IP-адресов10.128.0.0/24; - в зоне доступности
ru-central1-bв подсетиspqr-network-ru-central1-bс диапазоном IP-адресов10.128.1.0/24; - в зоне доступности
ru-central1-dв подсетиspqr-network-ru-central1-dс диапазоном IP-адресов10.128.2.0/24.
- в зоне доступности
-
Хранилище на сетевых SSD-дисках (
network-ssd) размером10ГБ для каждого хостаROUTER. -
Хранилище на сетевых SSD-дисках (
network-ssd) размером10ГБ для каждого хостаCOORDINATOR. -
База данных
db1. -
Пользователь
user1с паролемPassword123и доступом к базе данныхdb1. -
Защита от непреднамеренного удаления кластера включена.
Конфигурационный файл для создания этих ресурсов выглядит так:
resource "yandex_vpc_network" "spqr_network" {
description = "Network for the Managed Service for Sharded PostgreSQL"
name = "spqr-network"
}
resource "yandex_vpc_subnet" "subnet_a" {
description = "Subnet in the ru-central1-a availability zone"
name = "spqr-network-ru-central1-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.spqr_network.id
v4_cidr_blocks = ["10.128.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_b" {
description = "Subnet in the ru-central1-b availability zone"
name = "spqr-network-ru-central1-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.spqr_network.id
v4_cidr_blocks = ["10.128.1.0/24"]
}
resource "yandex_vpc_subnet" "subnet_d" {
description = "Subnet in the ru-central1-d availability zone"
name = "spqr-network-ru-central1-d"
zone = "ru-central1-d"
network_id = yandex_vpc_network.spqr_network.id
v4_cidr_blocks = ["10.128.2.0/24"]
}
resource "yandex_vpc_security_group" "spqr_sg" {
description = "Security group for the Managed Service for Sharded PostgreSQL"
name = "spqr-sg"
network_id = yandex_vpc_network.spqr_network.id
ingress {
description = "Allow connections from the Internet and between cluster components"
port = 6432
protocol = "TCP"
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
description = "Allow connections between cluster components"
port = 6432
protocol = "TCP"
v4_cidr_blocks = ["0.0.0.0/0"]
}
}
resource "yandex_mdb_sharded_postgresql_cluster" "spqr_cluster" {
description = "Managed Service for Sharded PostgreSQL cluster with advanced sharding"
name = "spqr-adv"
environment = "PRODUCTION"
network_id = yandex_vpc_network.spqr_network.id
security_group_ids = [yandex_vpc_security_group.spqr_sg.id]
deletion_protection = true
config = {
sharded_postgresql_config = {
router = {
resources = {
disk_size = 10
disk_type_id = "network-ssd"
resource_preset_id = "s2.micro"
}
}
coordinator = {
resources = {
disk_size = 10
disk_type_id = "network-ssd"
resource_preset_id = "s2.micro"
}
}
}
}
hosts = {
router1 = {
type = "ROUTER"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
router2 = {
type = "ROUTER"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
router3 = {
type = "ROUTER"
zone = "ru-central1-d"
subnet_id = yandex_vpc_subnet.subnet_d.id
}
coordinator1 = {
type = "COORDINATOR"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
coordinator2 = {
type = "COORDINATOR"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
coordinator3 = {
type = "COORDINATOR"
zone = "ru-central1-d"
subnet_id = yandex_vpc_subnet.subnet_d.id
}
}
}
resource "yandex_mdb_sharded_postgresql_database" "spqr_cluster_db" {
cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
name = "db1"
}
resource "yandex_mdb_sharded_postgresql_user" "spqr_cluster_user" {
cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
name = "user1"
password = "Password123"
permissions {
database = yandex_mdb_sharded_postgresql_database.spqr_cluster_db.name
}
}