Внешняя СУБД PostgreSQL#

Платформа хранит данные компонентов в PostgreSQL. СУБД развертывают средствами платформы или подключают внешнюю, например кластер облачного сервиса управляемых баз данных.

Требования этой инструкции относятся к внешней СУБД и не зависят от модели развертывания платформы. Способ передачи параметров подключения у моделей разный, и он описан в планировании каждой из них:

Модель развертывания

Где описаны параметры подключения

Из deb-пакетов

Параметры СУБД описания инвентаря

В контейнерах

Параметры СУБД описания инвентаря

В кластере Kubernetes

Манифесты платформы и секреты подключения

Версия и расширения#

Платформа работает только с PostgreSQL версии 15.

База данных Private Automation Hub требует расширения hstore. При развертывании СУБД средствами платформы утилита развертывания устанавливает это расширение сама, и дополнительные действия не требуются.

Для внешней СУБД проверьте, установлено ли расширение:

psql -d <pah_database> -c "SELECT * FROM pg_available_extensions WHERE name='hstore';"

Здесь <pah_database> – название базы данных Private Automation Hub.

Если расширение установлено, команда выводит таблицу следующего вида:

name   | default_version | installed_version | comment
-------+-----------------+-------------------+------------------------------------------------------
hstore |      1.7        |       1.7         | data type for storing sets of (key, value) pairs
(1 row)

Если расширения нет, установите дополнительные пакеты PostgreSQL и создайте расширение:

sudo apt install postgresql-contrib
psql -d <pah_database> -c "CREATE EXTENSION hstore;"

Базы данных и учетные записи#

Каждому из следующих компонентов платформы необходима отдельная база данных и учетная запись, которая ею владеет:

  • Platform Gateway;

  • Automation Controller;

  • Private Automation Hub;

  • контроллер Event-Driven Automation.

Пример создания с помощью команд SQL:

-- Creating users for Astra Automation
CREATE USER automationgateway WITH PASSWORD 'gateDBpaS$12345';
CREATE USER awx WITH PASSWORD 'ctrlDBpaS$123456';
CREATE USER automationhub WITH PASSWORD 'hUbPa55I2345b';
CREATE USER automationedacontroller WITH PASSWORD 'edapassword';

-- Creating databases
CREATE DATABASE automationgateway OWNER automationgateway;
CREATE DATABASE awx OWNER awx;
CREATE DATABASE automationhub OWNER automationhub;
CREATE DATABASE automationedacontroller OWNER automationedacontroller;

Предупреждение

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

Названия баз данных и их владельцев по умолчанию приведены в описании параметров подключения соответствующей модели развертывания.

Поддержка ICU#

СУБД должна поддерживать ICU.

Проверьте доступность ICU, где непустой результат означает поддержку:

SELECT * FROM pg_collation WHERE collprovider = 'i' LIMIT 1;

Кластер баз данных инициализируют с провайдером ICU:

initdb -D pgdata --locale-provider=icu --icu-locale=en

Лимит подключений#

Лимит одновременно открытых подключений (max_connections) должен составлять не менее 300. Это минимально допустимое значение, а не рекомендуемое: при значении по умолчанию max_connections = 100 под нагрузкой возникают отказы вида FATAL: too many connections. Оценка лимита для конкретного количества узлов приведена в расчете ресурсов.

Проверьте текущее значение:

SHOW max_connections;

Лимит max_connections действует на сервер СУБД целиком, а не на отдельную базу данных. В описанных топологиях на одном сервере размещаются базы данных всех компонентов платформы – шлюза платформы, Automation Controller, Private Automation Hub и контроллера Event-Driven Automation, – поэтому 300 подключений необходимо обеспечить суммарно для всех этих баз, а не для каждой из них. Если сервер обслуживает и другие системы, их подключения также расходуют этот лимит и учитываются дополнительно.

Если подключения к СУБД проходят через менеджер соединений, например pgBouncer, число соединений с сервером СУБД ограничивает не только max_client_conn, но и размер пула. Параметр default_pool_size задает размер пула для каждой пары «база данных + пользователь» и по умолчанию равен 20. В режиме session pooling каждое клиентское подключение занимает отдельное соединение с сервером СУБД, поэтому пул каждой базы данных должен вмещать все подключения ее компонента, а max_client_conn должен покрывать суммарное число клиентских подключений. Если пул заполнен, pgBouncer не отказывает в подключении, а ставит клиента в очередь, поэтому подключения компонентов зависают, а в выводе команды SHOW POOLS; растет значение cl_waiting.

Служба Autovacuum#

Служба Autovacuum должна работать, иначе размер таблиц растет бесконтрольно.

Отказоустойчивый кластер#

Параметры подключения отказоустойчивого кластера должны указывать не на адрес конкретного узла СУБД, а на стабильную точку подключения к основному узлу PostgreSQL (stable writer endpoint).

В качестве стабильной точки подключения используют:

  • виртуальный IP-адрес (VIP);

  • FQDN балансировщика;

  • другой плавающий (floating) адрес, который всегда указывает на текущий основной узел PostgreSQL.

Предупреждение

Если в параметрах подключения указан адрес конкретного основного узла PostgreSQL, то после переключения на другой узел значения этих параметров необходимо изменить вручную.

При использовании стабильной точки подключения ручное изменение не требуется.

Даже при использовании стабильной точки подключения переключение не является полностью бесшовным. В момент переключения возможны кратковременные ошибки интерфейса или API и разрывы уже открытых соединений с СУБД.

Для снижения окна деградации рекомендуется использовать pgBouncer в режиме session pooling. Ручной перезапуск компонентов платформы после переключения основного узла не является обязательным штатным действием, но его предусматривают как резервный сценарий, если автоматическое восстановление не уложилось в допустимое окно.