galaxyproject.postgresql
PostgreSQL
Eine [Ansible][ansible] Rolle zur Installation und Verwaltung von [PostgreSQL][postgresql] Servern. Diese Rolle funktioniert sowohl mit Debian- als auch mit RedHat-basierten Systemen und bietet Backupscripts für [PostgreSQL Continuous Archiving und Point-in-Time Recovery][postgresql_pitr]. Sie erstellt oder verwaltet keine PostgreSQL-Nutzer, Rollen, Gruppen, Datenbanken usw. Für diese Funktionen siehe [galaxyproject.postgresql_objects][postgresql_objects].
Auf RedHat-basierten Plattformen werden die [PostgreSQL Global Development Group (PGDG) Pakete][pgdg_yum] installiert. Auf Debian-basierten Plattformen können die Pakete der Distribution (von APT) oder die [PGDG Pakete][pgdg_apt] ausgewählt werden.
Änderungen, die einen Neustart erfordern, werden nicht angewendet, es sei denn, Sie starten PostgreSQL manuell neu. Diese Rolle wird den Server für Konfigurationsänderungen neu laden, die nur ein Reload erfordern, da dies ein nicht-invasiver Vorgang ist. Optionen, die einen vollständigen Neustart benötigen, führen jedoch nicht zu einem automatischen Neustart des Servers.
Anforderungen
Diese Rolle benötigt Ansible 2.4 oder höher.
Rollenvariablen
Alle Variablen sind optional
postgresql_user_name
: Systembenutzername, der für PostgreSQL verwendet werden soll (Standard:postgres
).postgresql_version
: Zu installierende PostgreSQL-Version. Auf Debian-basierten Plattformen ist der Standard die Version, auf die daspostgresql
Metapaket verweist. Auf RedHat-basierten Plattformen ist der Standard10
.postgresql_flavor
: Auf Debian-basierten Plattformen gibt dies an, ob PostgreSQL-Pakete von pgdg oder aus den apt-Repositories der Distribution verwendet werden sollen. Mögliche Werte:apt
,pgdg
(Standard:apt
).postgresql_conf
: Eine Liste von Hashes (Wörterbüchern) vonpostgresql.conf
Optionen (Schlüsseln) und Werten. Diese Optionen werden nicht direkt zupostgresql.conf
hinzugefügt - die Rolle fügt einconf.d
Unterverzeichnis im Konfigurationsverzeichnis und eine Include-Anweisung für dieses Verzeichnis zurpostgresql.conf
hinzu. Optionen, die inpostgresql_conf
gesetzt werden, erscheinen dann inconf.d/25ansible_postgresql.conf
. Aus Gründen der Abwärtskompatibilität kann dies auch ein einzelner Hash sein, aber die Listen-Syntax ist bevorzugt, da sie die Reihenfolge beibehält.Aufgrund der YAML-Parsing müssen Sie darauf achten, wie Sie Werte in
postgresql_conf
definieren, um sicherzustellen, dass sie korrekt in die Konfigurationsdatei geschrieben werden. Zum Beispiel:postgresql_conf: - max_connections: 250 - archive_mode: "off" - work_mem: "'8MB'"
Wird zu folgendem in
25ansible_postgresql.conf
:max_connections = 250 archive_mode = off work_mem: '8MB'
postgresql_pg_hba_conf
: Eine Liste von Zeilen, die zupg_hba.conf
hinzugefügt werden sollen.postgresql_pg_hba_local_postgres_user
: Wenn auffalse
gesetzt, wird der Eintrag despostgres
Benutzers auspg_hba.conf
entfernt, der standardmäßig auf Debian-basierten PostgreSQL-Installationen vorkonfiguriert ist. Wahrscheinlich wollen Sie dies nicht tun, es sei denn, Sie wissen, was Sie tun.postgresql_pg_hba_local_socket
: Wenn auffalse
gesetzt, wird derlocal
Eintrag auspg_hba.conf
entfernt, der durch das PostgreSQL-Paket vorkonfiguriert ist.postgresql_pg_hba_local_ipv4
: Wenn auffalse
gesetzt, wird derhost ... 127.0.0.1/32
Eintrag auspg_hba.conf
entfernt, der durch das PostgreSQL-Paket vorkonfiguriert ist.postgresql_pg_hba_local_ipv6
: Wenn auffalse
gesetzt, wird derhost ... ::1/128
Eintrag auspg_hba.conf
entfernt, der durch das PostgreSQL-Paket vorkonfiguriert ist.postgresql_pgdata
: Setzen Sie dies nur, wenn Sie das$PGDATA
Verzeichnis von der Standardpaketkonfiguration geändert haben. Beachten Sie, dass dies PostgreSQL nicht konfiguriert, um tatsächlich ein anderes Verzeichnis zu verwenden. Das müssen Sie selbst tun. Es ermöglicht der Rolle nur, das Verzeichnis korrekt zu finden.postgresql_conf_dir
: Wiepostgresql_pgdata
, aber für das Konfigurationsverzeichnis.postgresql_install_psycopg2
: Versucht, das richtige Paket bereitzustellen, das psycopg2 für den Python-Interpreter installiert, den Ansible auf der entfernten Seite verwendet. Dadurch können diepostgresql_*
Ansible-Module (vielleicht über [galaxyproject.postgresql_objects][postgresql_objects]), die von psycopg2 abhängen, verwendet werden. Standardmäßig auftrue
.
Backups
Diese Rolle kann die Konfiguration und Skripte bereitstellen und planen, um PostgreSQL [PITR][postgresql_pitr] Backups zu verwalten.
Vollständige Backups werden in den konfigurierten Intervallen erstellt, während die Write-Ahead-Log (WAL) Segmente zwischen den vollständigen Backups in {{ postgresql_backup_dir }}/wal_archive/
archiviert werden, wenn der PostgreSQL-Server dies anweist. WAL-Segmente können aus diesem Verzeichnis entfernt werden, sobald das älteste Backup, das auf sie verweist, entfernt wurde. Dies geschieht automatisch für Sie durch das Backup-Skript, wenn postgresql_backup_dir
lokal gemountet ist.
Wenn postgresql_backup_dir
ein Remote-Rsync-Pfad ist (der einen ":
" enthält), wird das Backup-Skript weiterhin Backups verwalten (einschließlich der Löschung älterer vollständiger Backups), kann jedoch das Verzeichnis wal_archive/
nicht automatisch bereinigen. Wenn Sie in der Lage sind, das Standard-Utility pg_archivecleanup
aus dem PostgreSQL-Client-Paket auf Ihrem Backup-Server zu installieren, können Sie das Backup-Skript dieser Rolle mit der Option --clean-archive
direkt auf dem Backup-Server ausführen.
postgresql_backup_dir
: Wenn gesetzt, aktiviert dies PITR-Backups. Setzen Sie dies auf ein Verzeichnis, in dem Ihre Datenbank gesichert wird (dies kann jedes von rsync unterstützte Format sein, z.B.user@host:/path
). Das aktuellste Backup wird in einem Unterverzeichnis namenscurrent
gespeichert.postgresql_backup_local_dir
: Pfad im Dateisystem auf dem PostgreSQL-Server, wo Backup-Skripte abgelegt werden.postgresql_backup_[hour|minute]
: Steuert, zu welcher Zeit der Cron-Job läuft, um ein vollständiges Backup durchzuführen. Standardmäßig auf 1:00 Uhr.postgresql_backup_[day|month|weekday]
: Zusätzliche Cron-Steuerungen dafür, wann das vollständige Backup erstellt wird (Standard:*
).postgresql_backup_post_command
: Beliebiger Befehl, der nach erfolgreichem Abschluss eines geplanten Backups ausgeführt wird.
Weitere Optionen zu Backups finden Sie in der Defaults-Datei.
Abhängigkeiten
Die Backup-Funktionalität erfordert Python 2.7 oder 3.5+, psycopg2 und rsync. Beachten Sie, dass bei der Installation von PGDG-Versionen von PostgreSQL auf Enterprise Linux die entsprechenden psycopg2-Pakete aus den PGDG-YUM-Repositories verfügbar sind.
Beispiel-Playbook
Standardinstallation: Standard postgresql.conf
, pg_hba.conf
und Standardversion für das Betriebssystem:
---
- hosts: dbservers
roles:
- galaxyproject.postgresql
Verwendung der pgdg-Pakete auf einem Debian-basierten Host:
---
- hosts: dbservers
vars:
postgresql_flavor: pgdg
roles:
- galaxyproject.postgresql
Verwendung der PostgreSQL 9.5-Pakete und Setzen einiger Optionen in postgresql.conf
und Einträgen in pg_hba.conf
:
---
- hosts: dbservers
vars:
postgresql_version: 9.5
postgresql_conf:
- listen_addresses: "''" # Netzwerk-Listening deaktivieren (nur über Unix-Socket anhören)
- max_connections: 50 # Verbindungsobergrenze verringern
postgresql_pg_hba_conf:
- host all all 10.0.0.0/8 md5
roles:
- galaxyproject.postgresql
Backups nach /archive aktivieren:
- hosts: all
vars:
postgresql_backup_dir: /archive
roles:
- galaxyproject.postgresql
Backups nach /archive auf einem Remote-Server aktivieren:
- hosts: dbservers
vars:
postgresql_backup_dir: backup.example.org:/archive
roles:
- galaxyproject.postgresql
- hosts: backupservers
tasks:
- name: PostgreSQL-Skripte installieren
ansible.builtin.apt:
name: postgresql-common
- name: Backup-Skript kopieren
ansible.builtin.copy:
src: roles/galaxyproject.postgresql/files/backup.py
dest: /usr/local/bin/pgbackup.py
mode: "0755"
- name: WAL-Bereinigung planen
ansible.builtin.cron:
name: Bereinigen der archivierten WALs von PostgreSQL
hour: 22
minute: 0
job: /usr/local/bin/pgbackup.py --clean-archive /archive
Lizenz
Akademische Freilizenz ("AFL") v. 3.0
Autoreninformation
Die Galaxy Community und Beitragsleistende
Install and manage a PostgreSQL (http://www.postgresql.org/) server.
ansible-galaxy install galaxyproject.postgresql