postgresql
PostgreSQL
Роль [Ansible][ansible] для установки и управления серверами [PostgreSQL][postgresql]. Эта роль работает как на системах на базе Debian, так и на RedHat, и предоставляет скрипты резервного копирования для [Непрерывного архивирования и Восстановления на момент времени PostgreSQL][postgresql_pitr]. Она не создает и не управляет пользователями PostgreSQL, ролями, группами, базами данных и так далее. Для этого см. [galaxyproject.postgresql_objects][postgresql_objects].
На платформах на базе RedHat будут установлены пакеты [Глобальной группы разработки PostgreSQL (PGDG)][pgdg_yum]. На платформах на базе Debian вы можете выбрать между пакетами дистрибутива (из APT) или [пакетами PGDG][pgdg_apt].
Изменения, требующие перезагрузки, не будут применены, если вы вручную не перезагрузите PostgreSQL. Эта роль перезагрузит сервер для тех конфигурационных изменений, которые могут быть обновлены только с помощью перезагрузки, так как перезагрузка является ненавязчивой операцией, но параметры, требующие полной перезагрузки, не вызовут перезагрузку сервера.
Требования
Эта роль требует Ansible версии 2.4 и выше.
Переменные роли
Все переменные необязательны
postgresql_user_name
: Имя пользователя системы, которое будет использоваться для PostgreSQL (по умолчанию:postgres
).postgresql_version
: Версия PostgreSQL для установки. На платформах на базе Debian по умолчанию используется версия, на которую указывает метапакетpostgresql
. На платформах на базе RedHat по умолчанию используется10
.postgresql_flavor
: На платформах на базе Debian это указывает, хотите ли вы использовать пакеты PostgreSQL из pgdg или из репозиториев apt. Возможные значения:apt
,pgdg
(по умолчанию:apt
).postgresql_conf
: Список хешей (словарей) параметровpostgresql.conf
(ключей) и значений. Эти параметры не добавляются напрямую вpostgresql.conf
- роль добавляет подкаталогconf.d
в каталог конфигурации и инструкцию include для этого каталога вpostgresql.conf
. Параметры, установленные вpostgresql_conf
, затем устанавливаются вconf.d/25ansible_postgresql.conf
. В целях совместимости это также может быть один хеш, но синтаксис списка предпочтителен, так как он сохраняет порядок.Из-за парсинга YAML следует быть внимательным при определении значений в
postgresql_conf
, чтобы они правильно записывались в конфигурационный файл. Например:postgresql_conf: - max_connections: 250 - archive_mode: "off" - work_mem: "'8MB'"
Станет следующим в
25ansible_postgresql.conf
:max_connections = 250 archive_mode = off work_mem: '8MB'
postgresql_pg_hba_conf
: Список строк для добавления вpg_hba.conf
postgresql_pg_hba_local_postgres_user
: Если установлено вfalse
, это удалит запись пользователяpostgres
изpg_hba.conf
, которая предварительно сконфигурирована на установках PostgreSQL на базе Debian. Вы, вероятно, не хотите этого делать, если не понимаете, что делаете.postgresql_pg_hba_local_socket
: Если установлено вfalse
, это удалит записьlocal
изpg_hba.conf
, которая предварительно сконфигурирована пакетом PostgreSQL.postgresql_pg_hba_local_ipv4
: Если установлено вfalse
, это удалит записьhost ... 127.0.0.1/32
изpg_hba.conf
, которая предварительно сконфигурирована пакетом PostgreSQL.postgresql_pg_hba_local_ipv6
: Если установлено вfalse
, это удалит записьhost ... ::1/128
изpg_hba.conf
, которая предварительно сконфигурирована пакетом PostgreSQL.postgresql_pgdata
: Установите это только если вы изменили каталог$PGDATA
из значения по умолчанию пакета. Обратите внимание, что это не настраивает PostgreSQL на использование другого каталога, вам нужно будет сделать это самостоятельно, это просто позволяет роли правильно найти каталог.postgresql_conf_dir
: То же самое, что иpostgresql_pgdata
, только для каталога конфигурации.postgresql_install_psycopg2
: Попробовать установить правильный пакет, предоставляющий psycopg2 интерпретатору Python, который используется Ansible на удаленной стороне. Это позволяет использовать модули Ansiblepostgresql_*
(возможно, через [galaxyproject.postgresql_objects][postgresql_objects]), которые зависят от psycopg2. Значение по умолчаниюtrue
.
Резервные копии
Эта роль может развернуть и запланировать конфигурацию и скрипты для поддержания резервных копий PostgreSQL [PITR][postgresql_pitr].
Полные резервные копии будут создаваться с заданным интервалом, в то время как сегменты журнала записи (WAL) между полными резервными копиями будут архивироваться в {{ postgresql_backup_dir }}/wal_archive/
, когда это будет указано сервером PostgreSQL. Сегменты WAL можно удалять из этого каталога, как только самая старая резервная копия, ссылающаяся на них, была удалена. Это выполняется автоматически вами с помощью скрипта резервного копирования, если postgresql_backup_dir
смонтирован локально.
Когда postgresql_backup_dir
является удаленным путем rsync (содержащим ":
"), скрипт резервного копирования все равно будет поддерживать резервные копии (включая удаление старых полных резервных копий), но не сможет автоматически очищать каталог wal_archive/
. Если вы можете установить стандартную утилиту pg_archivecleanup
из клиентского пакета PostgreSQL на вашем сервере резервного копирования, вы можете запустить скрипт резервного копирования с этого ролика с опцией --clean-archive
прямо на сервере резервного копирования.
postgresql_backup_dir
: Если установлено, включает резервные копии PITR. Установите это значение в каталог, где будут храниться резервные копии вашей базы данных (это может быть любой формат, поддерживаемый rsync, например,user@host:/path
). Самая последняя резервная копия будет находиться в подпапке с именемcurrent
.postgresql_backup_local_dir
: Путь к файловой системе на сервере PostgreSQL, где будут размещены скрипты резервного копирования.postgresql_backup_[hour|minute]
: Управляет тем, в какое время cron-задание будет выполняться для создания полной резервной копии. По умолчанию 1:00 AM.postgresql_backup_[day|month|weekday]
: Дополнительные настройки cron для времени выполнения полной резервной копии (по умолчанию:*
).postgresql_backup_post_command
: Произвольная команда для выполнения после успешного завершения запланированной резервной копии.
Дополнительные параметры, касающиеся резервных копий, можно найти в файле по умолчанию.
Зависимости
Функция резервного копирования требует Python 2.7 или 3.5 и выше, psycopg2 и rsync. Обратите внимание, что если вы устанавливаете версии PGDG PostgreSQL на Enterprise Linux, соответствующие пакеты psycopg2 доступны из репозиториев yum PGDG.
Пример Playbook
Стандартная установка: Значения по умолчанию для postgresql.conf
, pg_hba.conf
и версия по умолчанию для ОС:
---
- hosts: dbservers
roles:
- galaxyproject.postgresql
Используйте пакеты pgdg на хосте на базе Debian:
---
- hosts: dbservers
vars:
postgresql_flavor: pgdg
roles:
- galaxyproject.postgresql
Используйте пакеты PostgreSQL 9.5 и установите некоторые параметры postgresql.conf
и записи pg_hba.conf
:
---
- hosts: dbservers
vars:
postgresql_version: 9.5
postgresql_conf:
- listen_addresses: "''" # отключить прослушивание по сети (слушать только на unix-сокете)
- max_connections: 50 # уменьшить лимит подключений
postgresql_pg_hba_conf:
- host all all 10.0.0.0/8 md5
roles:
- galaxyproject.postgresql
Включите резервное копирование в /archive:
- hosts: all
vars:
postgresql_backup_dir: /archive
roles:
- galaxyproject.postgresql
Включите резервное копирование в /archive на удаленном сервере:
- hosts: dbservers
vars:
postgresql_backup_dir: backup.example.org:/archive
roles:
- galaxyproject.postgresql
- hosts: backupservers
tasks:
- name: Установить скрипты PostgreSQL
ansible.builtin.apt:
name: postgresql-common
- name: Скопировать скрипт резервного копирования
ansible.builtin.copy:
src: roles/galaxyproject.postgresql/files/backup.py
dest: /usr/local/bin/pgbackup.py
mode: "0755"
- name: Запланировать очистку WAL
ansible.builtin.cron:
name: Очистка архивированных WAL PostgreSQL
hour: 22
minute: 0
job: /usr/local/bin/pgbackup.py --clean-archive /archive
Лицензия
Лицензия на свободное программное обеспечение ("AFL") версия 3.0
Информация об авторе
Install and manage a PostgreSQL (http://www.postgresql.org/) server.
ansible-galaxy install galaxyproject/ansible-postgresql