Создание PostgreSQL-кластера
PostgreSQL-кластер — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста: хост-мастер принимает запросы на запись, синхронно дублирует изменения в основной реплике и асинхронно — во всех остальных.
Примечание
Если хранилище баз данных заполнится на 95%, кластер перейдет в режим только чтения. Рассчитывайте и увеличивайте необходимый размер хранилища заранее.
Количество хостов, которые можно создать вместе с PostgreSQL-кластером, зависит от выбранного варианта хранилища:
-
При использовании сетевых дисков вы можете запросить любое количество хостов (от 1 до пределов текущей квоты).
-
При использовании SSD-дисков вместе с кластером можно создать не меньше 3 реплик (минимум 3 реплики необходимо, чтобы обеспечить отказоустойчивость). Если после создания кластера доступных ресурсов каталога останется достаточно, вы можете добавить дополнительные реплики.
По умолчанию Managed Service for PostgreSQL выставляет максимально возможное ограничение на количество подключений к каждому хосту PostgreSQL-кластера. Этот максимум рассчитывается так: 200 × <количество vCPU на каждом хосте>
. Например, для кластера класса s1.micro значение параметра max_connections
по умолчанию равно 400, и не может быть увеличено.
Важно
Суммарное количество подключений, зарезервированных для пользователей, не должно превышать значение параметра max_connections
. При этом нужно учитывать, что Managed Service for PostgreSQL резервирует 15 подключений для служебных пользователей на каждом PostgreSQL-хосте. Например, если для кластера выставлен параметр "max_connections": 100
вы можете зарезервировать не больше 85 подключений для пользователей кластера.
Как создать кластер PostgreSQL
-
В консоли управления выберите каталог, в котором нужно создать кластер баз данных.
-
Выберите сервис Managed Service for PostgreSQL.
-
Нажмите кнопку Создать кластер.
-
Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках Yandex.Cloud.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования, в том числе самого сервиса Managed Service for PostgreSQL. В Prestable-окружении раньше появляются новая функциональность, улучшения и исправления ошибок. При этом не все обновления обеспечивают обратную совместимость.
-
Выберите версию СУБД.
Используя версию
10-1c
(PostgreSQL 10 для 1C), для комфортной работы 50 пользователей рекомендуется выбрать класс хостаs2.medium
, для 30 пользователей и менее скорее всего будет достаточно классаs2.small
. -
Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты баз данных. Все доступные варианты перечислены в разделе Классы хостов. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.
-
В блоке Размер хранилища:
-
Выберите тип хранилища — более гибкое сетевое (network-hdd или network-ssd) или более быстрое локальное хранилище (local-ssd). Размер локального хранилища можно менять только с шагом 100 ГБ.
-
Выберите объем, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. раздел Резервные копии.
-
-
В блоке База данных укажите атрибуты базы данных:
-
Имя базы данных. Это имя должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
-
Имя пользователя — владельца базы данных. Это имя должно содержать только латинские буквы, цифры и подчеркивания. По умолчанию новому пользователю выделяется 50 подключений к каждому хосту кластера.
-
Пароль пользователя, от 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.
- Порядок сортировки в запросах с использованием оператора
-
-
В блоке Сетевые настройки выберите облачную сеть для размещения кластера и группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Хосты выберите параметры хостов баз данных, создаваемых вместе с кластером (помните, что используя SSD-диски при создании PostgreSQL-кластера можно задать не меньше 3 хостов). Открыв блок Расширенные настройки, вы можете выбрать конкретные подсети для каждого хоста — по умолчанию каждый хост создается в отдельной подсети.
-
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — время по UTC, когда требуется начать резервное копирование кластера (в 24-часовом формате). Если время не задано, резервное копирование начнется в 22:00 UTC.
-
Окно обслуживания — настройки окна технического обслуживания. С их помощью вы можете указать предпочтительное время начала проведения операций по техническому обслуживанию хостов кластера (например, можно выбрать время, когда кластер наименее нагружен запросами):
- Чтобы указать предпочтительное время начала окна технического обслуживания, выберите пункт по расписанию и задайте нужные день недели и час дня в UTC (Coordinated Universal Time), выбрав значения из выпадающих списков.
- Чтобы разрешить проведение операций технического обслуживания в любое время, выберите пункт произвольное.
Операции по техническому обслуживанию могут включать в себя: обновление версии СУБД, применение патчей и так далее.
-
Доступ из DataLens — включите эту опцию, чтобы получить возможность анализировать данные из кластера в сервисе Yandex DataLens. Подробнее о настройке подключения см. в разделе Подключение к DataLens.
-
Доступ из консоли управления — включите эту опцию, чтобы получить возможность выполнять SQL-запросы к базам кластера из консоли управления Yandex.Cloud.
-
Сбор статистики — включите эту опцию, чтобы воспользоваться инструментом Диагностика производительности в кластере. Эта функциональность находится на стадии Preview.
-
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex.Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
$ yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Посмотрите описание команды CLI для создания кластера:
$ yc managed-postgresql cluster create --help
-
Укажите параметры кластера в команде создания (в примере приведены не все параметры):
$ yc managed-postgresql cluster create \ --name <имя кластера> \ --environment <окружение, prestable или production> \ --network-name <имя сети> \ --host zone-id=<зона доступности>,subnet-id=<идентификатор подсети> \ --resource-preset <класс хоста> \ --user name=<имя пользователя>,password=<пароль пользователя> \ --database name=<имя базы данных>,owner=<имя владельца базы данных> \ --disk-size <размер хранилища в гигабайтах> --security-group-ids <список идентификаторов групп безопасности>
Идентификатор подсети
subnet-id
необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.Также вы можете указать несколько дополнительных опций в параметре
--host
для управления репликацией в кластере:- Источник репликации для хоста в опции
replication-source
для того, чтобы вручную управлять потоками репликации. - Приоритет хоста в опции
priority
для того, чтобы влиять на процесс выбора синхронной реплики:- Хост с наибольшим значением приоритета в кластере становится синхронной репликой.
- Если в кластере есть несколько хостов с наибольшим приоритетом, то среди них проводятся выборы синхронной реплики.
- Наименьший приоритет —
0
(по умолчанию), наивысший —100
.
Важно
При использовании опции
--security-group-ids
может потребоваться настройка групп безопасности для подключения к кластеру. - Источник репликации для хоста в опции
Terraform позволяет быстро создать облачную инфраструктуру в Yandex.Cloud. Состав инфраструктуры определяется с помощью конфигурационных файлов, в которых указываются требуемые облачные ресурсы и их параметры.
Если у вас ещё нет Terraform, установите его и настройте провайдер.
Чтобы создать кластер:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
- Кластер базы данных — описание кластера и его хостов.
- Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
- Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_postgresql_cluster" "<имя кластера>" { name = "<имя кластера>" environment = "<окружение, PRESTABLE или PRODUCTION>" network_id = "<идентификатор сети>" config { version = "<версия PostgreSQL: 10, 10-1с, 11, 11-1c, 12 или 13>" resources { resource_preset_id = "<класс хоста>" disk_type_id = "<тип хранилища>" disk_size = "<размер хранилища в гигабайтах>" } } database { name = "<имя базы данных>" owner = "<имя владельца базы данных>" } user { name = "<имя пользователя>" password = "<пароль пользователя>" permission { database_name = "<имя базы данных>" } } host { zone = "<зона доступности>" subnet_id = "<идентификатор подсети>" } } resource "yandex_vpc_network" "<имя сети>" { name = "<имя сети>" } resource "yandex_vpc_subnet" "<имя подсети>" { name = "<имя подсети>" zone = "<зона доступности>" network_id = "<идентификатор сети>" v4_cidr_blocks = ["<диапазон>"] }
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором создан конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет. Это проверочный этап: ресурсы не будут созданы.
-
-
Создайте кластер.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, следует передать один параметр --host
.
Допустим, нужно создать PostgreSQL-кластер со следующими характеристиками:
- С именем
mypg
. - В окружении
production
. - В сети
default
. - С одним хостом класса
s2.micro
в подсетиb0rcctk2rvtr8efcch64
, в зоне доступностиru-central1-c
. - С быстрым сетевым хранилищем (
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-c,subnet-id=b0rcctk2rvtr8efcch64 \
--disk-type network-ssd \
--disk-size 20 \
--user name=user1,password=user1user1 \
--database name=db1,owner=user1
Допустим, нужно создать PostgreSQL-кластер и сеть для него со следующими характеристиками:
- С именем
mypg
. - Версии
13
. - В окружении
PRESTABLE
. - В облаке с идентификатором
b1gq90dgh25bebiu75o
. - В каталоге
myfolder
. - В новой сети
mynet
. - С одним хостом класса
s2.micro
в новой подсетиmysubnet
, в зоне доступностиru-central1-c
. Подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. - С быстрым сетевым хранилищем (
network-ssd
) объемом 20 ГБ. - С одним пользователем (
user1
), с паролемuser1user1
. - С одной базой данных
db1
, принадлежащей пользователюuser1
.
Конфигурационный файл кластера выглядит так:
provider "yandex" {
token = "<OAuth или статический ключ сервисного аккаунта>"
cloud_id = "b1gq90dgh25bebiu75o"
folder_id = "${data.yandex_resourcemanager_folder.myfolder.id}"
zone = "ru-central1-c"
}
resource "yandex_mdb_postgresql_cluster" "mypg" {
name = "mypg"
environment = "PRESTABLE"
network_id = "${yandex_vpc_network.mynet.id}"
config {
version = 13
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 20
}
}
database {
name = "db1"
owner = "user1"
}
user {
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
}
host {
zone = "ru-central1-c"
subnet_id = "${yandex_vpc_subnet.mysubnet.id}"
}
}
resource "yandex_vpc_network" "mynet" { name = "mynet" }
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-c"
network_id = "${yandex_vpc_network.mynet.id}"
v4_cidr_blocks = ["10.5.0.0/24"]
}