galaxyproject.postgresql
PostgreSQL
Un rôle Ansible pour installer et gérer des serveurs PostgreSQL. Ce rôle fonctionne avec des systèmes basés sur Debian et RedHat, et fournit des scripts de sauvegarde pour l'archivage continu de PostgreSQL et la récupération à un moment donné. Il ne crée ni ne gère les utilisateurs, rôles, groupes ou bases de données PostgreSQL. Pour cela, veuillez consulter galaxyproject.postgresql_objects.
Sur les plateformes basées sur RedHat, les paquets du PostgreSQL Global Development Group (PGDG) seront installés. Sur les plateformes basées sur Debian, vous pouvez choisir entre les paquets de la distribution (via APT) ou les paquets PGDG.
Les changements nécessitant un redémarrage ne seront pas appliqués à moins que vous ne redémarriez manuellement PostgreSQL. Ce rôle rechargera le serveur pour les changements de configuration qui peuvent être mis à jour avec un simple rechargement car le rechargement est une opération non intrusive, mais les options nécessitant un redémarrage complet ne provoqueront pas le redémarrage du serveur.
Exigences
Ce rôle nécessite Ansible 2.4+.
Variables de rôle
Toutes les variables sont optionnelles
postgresql_user_name
: Nom d’utilisateur système à utiliser pour PostgreSQL (par défaut :postgres
).postgresql_version
: Version de PostgreSQL à installer. Sur les plateformes basées sur Debian, la valeur par défaut est la version désignée par le méta-packagepostgresql
. Sur les plateformes basées sur RedHat, la valeur par défaut est10
.postgresql_flavor
: Sur les plateformes basées sur Debian, cela spécifie si vous souhaitez utiliser les paquets PostgreSQL de pgdg ou ceux des dépôts apt de la distribution. Valeurs possibles :apt
,pgdg
(par défaut :apt
).postgresql_conf
: Une liste de hachages (dictionnaires) d'optionspostgresql.conf
(clés) et de valeurs. Ces options ne sont pas ajoutées directement àpostgresql.conf
- le rôle ajoute un sous-dossierconf.d
dans le répertoire de configuration et une instruction d’inclusion pour ce dossier danspostgresql.conf
. Les options définies danspostgresql_conf
sont ensuite mises dansconf.d/25ansible_postgresql.conf
. Pour des raisons de compatibilité, cela peut aussi être un unique hachage, mais la syntaxe de liste est préférée car elle préserve l'ordre.En raison du parsing YAML, vous devez faire attention lors de la définition des valeurs dans
postgresql_conf
pour vous assurer qu'elles soient correctement écrites dans le fichier de configuration. Par exemple :postgresql_conf: - max_connections: 250 - archive_mode: "off" - work_mem: "'8MB'"
Cela devient ce qui suit dans
25ansible_postgresql.conf
:max_connections = 250 archive_mode = off work_mem: '8MB'
postgresql_pg_hba_conf
: Une liste de lignes à ajouter àpg_hba.conf
.postgresql_pg_hba_local_postgres_user
: S'il est défini surfalse
, cela supprimera l'entrée de l'utilisateurpostgres
danspg_hba.conf
qui est pré-configurée sur les installations PostgreSQL basées sur Debian. Vous ne voudrez probablement pas faire cela à moins de savoir ce que vous faites.postgresql_pg_hba_local_socket
: S'il est défini surfalse
, cela supprimera l'entréelocal
danspg_hba.conf
qui est pré-configurée par le paquet PostgreSQL.postgresql_pg_hba_local_ipv4
: S'il est défini surfalse
, cela supprimera l'entréehost ... 127.0.0.1/32
danspg_hba.conf
qui est pré-configurée par le paquet PostgreSQL.postgresql_pg_hba_local_ipv6
: S'il est défini surfalse
, cela supprimera l'entréehost ... ::1/128
danspg_hba.conf
qui est pré-configurée par le paquet PostgreSQL.postgresql_pgdata
: Ne définissez cela que si vous avez changé le répertoire$PGDATA
par rapport à la valeur par défaut du paquet. Notez que cela ne configure pas PostgreSQL pour utiliser effectivement un répertoire différent, vous devrez le faire vous-même, cela permet simplement au rôle de localiser correctement le répertoire.postgresql_conf_dir
: Comme avecpostgresql_pgdata
, mais pour le répertoire de configuration.postgresql_install_psycopg2
: Tente d'installer le paquet correct fournissant psycopg2 à l'interpréteur Python utilisé par Ansible sur le côté distant. Cela permet d'utiliser les modules Ansiblepostgresql_*
(peut-être via galaxyproject.postgresql_objects), qui dépendent de psycopg2. Par défaut, cela vauttrue
.
Sauvegardes
Ce rôle peut déployer et programmer la configuration et les scripts pour maintenir les sauvegardes PITR de PostgreSQL.
Des sauvegardes complètes seront effectuées à l'intervalle configuré, tandis que les segments de journal de pré-écriture (WAL) entre les sauvegardes complètes seront archivés dans {{ postgresql_backup_dir }}/wal_archive/
lorsqu'instruit par le serveur PostgreSQL. Les segments WAL peuvent être supprimés de ce répertoire une fois la plus ancienne sauvegarde les référant supprimée. Cela est fait automatiquement par le script de sauvegarde si postgresql_backup_dir
est monté localement.
Lorsque postgresql_backup_dir
est un chemin rsync distant (contenant un ":
"), le script de sauvegarde continuera de maintenir des sauvegardes (y compris en supprimant les anciennes sauvegardes complètes) mais ne pourra pas nettoyer automatiquement le répertoire wal_archive/
. Si vous pouvez installer l'outil standard pg_archivecleanup
à partir du paquet client PostgreSQL sur votre serveur de sauvegarde, vous pouvez exécuter le script de sauvegarde de ce rôle avec l'option --clean-archive
directement sur le serveur de sauvegarde.
postgresql_backup_dir
: S'il est défini, active les sauvegardes PITR. Définissez-le sur un répertoire où votre base de données sera sauvegardée (cela peut être n'importe quel format pris en charge par rsync, par exemple,user@host:/path
). La sauvegarde la plus récente sera dans un sous-répertoire nommécurrent
.postgresql_backup_local_dir
: Chemin système sur le serveur PostgreSQL où des scripts de sauvegarde seront placés.postgresql_backup_[hour|minute]
: Contrôle à quelle heure le travail cron sera exécuté pour effectuer une sauvegarde complète. Par défaut à 1:00 AM.postgresql_backup_[day|month|weekday]
: Contrôles cron supplémentaires pour quand la sauvegarde complète est effectuée (par défaut :*
).postgresql_backup_post_command
: Commande arbitraire à exécuter après la réussite d'une sauvegarde programmée.
D'autres options concernant les sauvegardes peuvent être trouvées dans le fichier par défaut.
Dépendances
La fonctionnalité de sauvegarde nécessite Python 2.7 ou 3.5+, psycopg2 et rsync. Notez que si vous installez les versions PGDG de PostgreSQL sur Enterprise Linux, les paquets psycopg2 correspondants sont disponibles dans les dépôts yum de PGDG.
Exemple de Playbook
Installation standard : Fichiers de configuration postgresql.conf
, pg_hba.conf
par défaut et version par défaut pour le système d'exploitation :
---
- hosts: dbservers
roles:
- galaxyproject.postgresql
Utiliser les paquets pgdg sur un hôte basé sur Debian :
---
- hosts: dbservers
vars:
postgresql_flavor: pgdg
roles:
- galaxyproject.postgresql
Utiliser les paquets PostgreSQL 9.5 et définir quelques options postgresql.conf
et entrées pg_hba.conf
:
---
- hosts: dbservers
vars:
postgresql_version: 9.5
postgresql_conf:
- listen_addresses: "''" # désactiver l'écoute réseau (écouter uniquement sur socket unix)
- max_connections: 50 # diminuer la limite de connexions
postgresql_pg_hba_conf:
- host all all 10.0.0.0/8 md5
roles:
- galaxyproject.postgresql
Activer les sauvegardes vers /archive :
- hosts: all
vars:
postgresql_backup_dir: /archive
roles:
- galaxyproject.postgresql
Activer les sauvegardes vers /archive sur un serveur distant :
- hosts: dbservers
vars:
postgresql_backup_dir: backup.example.org:/archive
roles:
- galaxyproject.postgresql
- hosts: backupservers
tasks:
- name: Installer les scripts PostgreSQL
ansible.builtin.apt:
name: postgresql-common
- name: Copier le script de sauvegarde
ansible.builtin.copy:
src: roles/galaxyproject.postgresql/files/backup.py
dest: /usr/local/bin/pgbackup.py
mode: "0755"
- name: Programmer le nettoyage des WAL archivés
ansible.builtin.cron:
name: Nettoyer les WAL archivés PostgreSQL
hour: 22
minute: 0
job: /usr/local/bin/pgbackup.py --clean-archive /archive
Licence
Licence libre académique ("AFL") v. 3.0
Informations sur l’auteur
Install and manage a PostgreSQL (http://www.postgresql.org/) server.
ansible-galaxy install galaxyproject.postgresql