Создание 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

  1. В консоли управления выберите каталог, в котором нужно создать кластер БД.

  2. Выберите сервис Managed Service for PostgreSQL.

  3. Нажмите кнопку Создать кластер.

  4. Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в Облаке.

  5. Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):

    • production — для стабильных версий ваших приложений.
    • prestable — для тестирования, в том числе самого сервиса Managed Service for PostgreSQL. Prestable-окружение обновляется чаще, из-за чего в нем раньше исправляются уже известные проблемы, но могут происходить обратно несовместимые изменения.
  6. Выберите версию СУБД.

    Используя версию 10-1c (PostgreSQL 10 для 1C), для комфортной работы 50 пользователей рекомендуется выбрать класс хоста s2.medium, для 30 пользователей и менее скорее всего будет достаточно класса s2.small.

  7. Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. Все доступные варианты перечислены в разделе Классы хостов. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.

  8. В блоке Размер хранилища:

    • Выберите тип хранилища — более гибкое сетевое (network-hdd или network-ssd) или более быстрое локальное SSD-хранилище (local-ssd). Размер локального хранилища можно менять только с шагом 100 ГБ.

    • Выберите объем, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. раздел Резервные копии.

  9. В блоке База данных укажите атрибуты БД:

    • Имя базы данных. Имя БД должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
    • Имя пользователя — владельца БД. Имя пользователя должно содержать только латинские буквы, цифры и подчеркивания. По умолчанию новому пользователю выделяется 50 подключений к каждому хосту кластера.
    • Пароль пользователя, от 8 до 128 символов.

    Для базы данных, которая создается вместе с кластером, устанавливаются настройки набора символов (кодировки) LC_CTYPE=C и LC_COLLATE=C. После создания эти настройки изменить нельзя, но вы можете создать новую базу с нужными настройками.

  10. В блоке Хосты выберите параметры хостов БД, создаваемых вместе с кластером (помните, что используя SSD-диски при создании PostgreSQL-кластера можно задать не меньше 3 хостов). Открыв блок Расширенные настройки, вы можете выбрать конкретные подсети для каждого хоста — по умолчанию каждый хост создается в отдельной подсети.

  11. Нажмите кнопку Создать кластер.

Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

Чтобы создать кластер:

  1. Проверьте, есть ли в каталоге подсети для хостов кластера:

    $ yc vpc subnet list
    

    Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.

  2. Посмотрите описание команды CLI для создания кластера:

    $ yc managed-postgresql cluster create --help
    
  3. Укажите параметры кластера в команде создания (в примере приведены не все параметры):

    $ 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 <размер хранилища в гигабайтах>
    

    Идентификатор подсети subnet-id необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.

Примеры

Создание кластера с одним хостом

Чтобы создать кластер с одним хостом, следует передать один параметр --host.

Допустим, нужно создать PostgreSQL-кластер со следующими характеристиками:

  • С именем mypg.
  • В окружении production.
  • В сети default.
  • С одним хостом класса s1.nano в подсети b0rcctk2rvtr8efcch64, в зоне доступности ru-central1-c.
  • С сетевым SSD-хранилищем объемом 20 ГБ.
  • С одним пользователем (user1), с паролем user1user1.
  • С одной базой данных db1, принадлежащей пользователю user1.

Запустите следующую команду:

$ yc managed-postgresql cluster create \
     --name mypg \
     --environment production \
     --network-name default \
     --resource-preset s1.nano \
     --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