galaxyproject.postgresql
PostgreSQL
Un rol de Ansible para instalar y gestionar servidores de PostgreSQL. Este rol funciona con sistemas basados en Debian y RedHat, y proporciona scripts de respaldo para Arquivamiento Continuo de PostgreSQL y Recuperación en un Punto en el Tiempo. No crea ni gestiona usuarios, roles, grupos, bases de datos de PostgreSQL, etc. Para eso, consulta galaxyproject.postgresql_objects.
En plataformas basadas en RedHat, se instalarán los paquetes del Grupo de Desarrollo Global de PostgreSQL (PGDG). En plataformas basadas en Debian, puedes elegir entre los paquetes de la distribución (de APT) o los paquetes de PGDG.
Los cambios que requieren un reinicio no se aplicarán a menos que reinicies PostgreSQL manualmente. Este rol recargará el servidor para aquellos cambios de configuración que se pueden actualizar solo con una recarga, ya que recargar es una operación no intrusiva, pero las opciones que requieren un reinicio completo no causarán que el servidor se reinicie.
Requisitos
Este rol requiere Ansible 2.4 o superior.
Variables del Rol
Todas las variables son opcionales
postgresql_user_name
: Nombre de usuario del sistema que se utilizará para PostgreSQL (por defecto:postgres
).postgresql_version
: Versión de PostgreSQL a instalar. En plataformas basadas en Debian, el valor por defecto es la versión señalada por el metapackagepostgresql
. En plataformas basadas en RedHat, el valor por defecto es10
.postgresql_flavor
: En plataformas basadas en Debian, esto especifica si deseas usar paquetes de PostgreSQL de pgdg o los repositorios de apt de la distribución. Valores posibles:apt
,pgdg
(por defecto:apt
).postgresql_conf
: Una lista de hashes (diccionarios) de opciones (keys
) y valores parapostgresql.conf
. Estas opciones no se agregan directamente apostgresql.conf
- el rol agrega un subdirectorioconf.d
en el directorio de configuración y una declaración de inclusión para ese directorio enpostgresql.conf
. Las opciones establecidas enpostgresql_conf
se configurarán enconf.d/25ansible_postgresql.conf
. Por razones de compatibilidad, esto también puede ser un solo hash, pero se prefiere la sintaxis de lista porque preserva el orden.Debido al análisis de YAML, debes tener cuidado al definir valores en
postgresql_conf
para asegurarte de que se escriben correctamente en el archivo de configuración. Por ejemplo:postgresql_conf: - max_connections: 250 - archive_mode: "off" - work_mem: "'8MB'"
Se convierte en lo siguiente en
25ansible_postgresql.conf
:max_connections = 250 archive_mode = off work_mem: '8MB'
postgresql_pg_hba_conf
: Una lista de líneas para agregar apg_hba.conf
.postgresql_pg_hba_local_postgres_user
: Si se establece enfalse
, eliminará la entrada del usuariopostgres
depg_hba.conf
que está preconfigurada en las instalaciones de PostgreSQL basadas en Debian. Probablemente no quieras hacer esto a menos que sepas lo que estás haciendo.postgresql_pg_hba_local_socket
: Si se establece enfalse
, eliminará la entradalocal
depg_hba.conf
que está preconfigurada por el paquete de PostgreSQL.postgresql_pg_hba_local_ipv4
: Si se establece enfalse
, eliminará la entradahost ... 127.0.0.1/32
depg_hba.conf
que está preconfigurada por el paquete de PostgreSQL.postgresql_pg_hba_local_ipv6
: Si se establece enfalse
, eliminará la entradahost ... ::1/128
depg_hba.conf
que está preconfigurada por el paquete de PostgreSQL.postgresql_pgdata
: Solo configura esto si has cambiado el directorio$PGDATA
de la configuración predeterminada del paquete. Ten en cuenta que esto no configura PostgreSQL para usar un directorio diferente, deberás hacerlo tú mismo, solo permite que el rol localice el directorio correctamente.postgresql_conf_dir
: Igual quepostgresql_pgdata
pero para el directorio de configuración.postgresql_install_psycopg2
: Intentará instalar el paquete correcto que proporciona psycopg2 al intérprete de Python que Ansible está usando en el lado remoto. Esto permite el uso de los módulos Ansiblepostgresql_*
(quizás a través de galaxyproject.postgresql_objects), que dependen de psycopg2. Por defecto estrue
.
Respaldos
Este rol puede desplegar y programar la configuración y scripts para mantener respaldos de PostgreSQL PITR.
Se harán respaldos completos en el intervalo configurado, mientras que los segmentos de registro por adelantado (WAL) entre los respaldos completos se archivarán en {{ postgresql_backup_dir }}/wal_archive/
cuando lo indique el servidor PostgreSQL. Los segmentos WAL se pueden eliminar de este directorio una vez que se haya eliminado el respaldo más antiguo que los referencia. Esto se hace automáticamente por el script de respaldo si postgresql_backup_dir
está montado localmente.
Cuando postgresql_backup_dir
es una ruta remota de rsync (que contiene un ":
"), el script de respaldo seguirá manteniendo respaldos (incluyendo eliminar respaldos completos antiguos) pero no podrá eliminar automáticamente el directorio wal_archive/
. Si puedes instalar la utilidad estándar pg_archivecleanup
del paquete cliente de PostgreSQL en tu servidor de respaldo, puedes ejecutar el script de respaldo de este rol con la opción --clean-archive
directamente en el servidor de respaldo.
postgresql_backup_dir
: Si se establece, habilita respaldos PITR. Configúralo a un directorio donde se respalde tu base de datos (esto puede ser cualquier formato que soporte rsync, por ejemplo,user@host:/path
). El respaldo más reciente estará en un subdirectorio llamadocurrent
.postgresql_backup_local_dir
: Ruta en el sistema de archivos del servidor PostgreSQL donde se colocarán los scripts de respaldo.postgresql_backup_[hour|minute]
: Controla a qué hora se ejecutará el trabajo cron para realizar un respaldo completo. Por defecto es a la 1:00 AM.postgresql_backup_[day|month|weekday]
: Controles adicionales de cron para cuándo se realiza el respaldo completo (por defecto:*
).postgresql_backup_post_command
: Comando arbitrario para ejecutar después de la finalización exitosa de un respaldo programado.
Se pueden encontrar opciones adicionales relacionadas con los respaldos en el archivo de defaults.
Dependencias
La funcionalidad de respaldo requiere Python 2.7 o 3.5+, psycopg2 y rsync. Ten en cuenta que si instalas versiones PGDG de PostgreSQL en Enterprise Linux, los paquetes correspondientes de psycopg2 están disponibles en los repositorios yum de PGDG.
Ejemplo de Playbook
Instalación estándar: Configuración predeterminada en postgresql.conf
, pg_hba.conf
y versión predeterminada para el SO:
---
- hosts: dbservers
roles:
- galaxyproject.postgresql
Usar los paquetes de pgdg en un host basado en Debian:
---
- hosts: dbservers
vars:
postgresql_flavor: pgdg
roles:
- galaxyproject.postgresql
Usar los paquetes de PostgreSQL 9.5 y establecer algunas opciones en postgresql.conf
y entradas en pg_hba.conf
:
---
- hosts: dbservers
vars:
postgresql_version: 9.5
postgresql_conf:
- listen_addresses: "''" # deshabilitar la escucha en red (escuchar solo en socket de unix)
- max_connections: 50 # disminuir el límite de conexiones
postgresql_pg_hba_conf:
- host all all 10.0.0.0/8 md5
roles:
- galaxyproject.postgresql
Habilitar respaldos en /archive:
- hosts: all
vars:
postgresql_backup_dir: /archive
roles:
- galaxyproject.postgresql
Habilitar respaldos en /archive en un servidor remoto:
- hosts: dbservers
vars:
postgresql_backup_dir: backup.example.org:/archive
roles:
- galaxyproject.postgresql
- hosts: backupservers
tasks:
- name: Instalar scripts de PostgreSQL
ansible.builtin.apt:
name: postgresql-common
- name: Copiar script de respaldo
ansible.builtin.copy:
src: roles/galaxyproject.postgresql/files/backup.py
dest: /usr/local/bin/pgbackup.py
mode: "0755"
- name: Programar la limpieza de WAL
ansible.builtin.cron:
name: Limpiar WAL archivados de PostgreSQL
hour: 22
minute: 0
job: /usr/local/bin/pgbackup.py --clean-archive /archive
Licencia
Licencia Libre Académica ("AFL") v. 3.0
Información del Autor
Install and manage a PostgreSQL (http://www.postgresql.org/) server.
ansible-galaxy install galaxyproject.postgresql