galaxyproject.postgresql
PostgreSQL
一个用于安装和管理 [PostgreSQL][postgresql] 服务器的 [Ansible][ansible] 角色。该角色适用于 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 系统上,此变量指定您希望使用 pgdg 的 PostgreSQL 包还是发行版的 apt 仓库。可能的值:apt
,pgdg
(默认值:apt
)。postgresql_conf
:一个包含postgresql.conf
选项(键)及其值的哈希(字典)列表。这些选项不会直接添加到postgresql.conf
中,而是为配置目录添加一个conf.d
子目录,并在postgresql.conf
中包含该目录。然后,在conf.d/25ansible_postgresql.conf
中设置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
,则将从 Debian 系统中预配置的pg_hba.conf
移除postgres
用户的条目。除非您确切知道自己在做什么,否则您可能不想这样做。postgresql_pg_hba_local_socket
:如果设置为false
,这将移除 PostgreSQL 包预配置的pg_hba.conf
中的local
条目。postgresql_pg_hba_local_ipv4
:如果设置为false
,这将移除 PostgreSQL 包预配置的pg_hba.conf
中的host ... 127.0.0.1/32
条目。postgresql_pg_hba_local_ipv6
:如果设置为false
,这将移除 PostgreSQL 包预配置的pg_hba.conf
中的host ... ::1/128
条目。postgresql_pgdata
:仅在您已更改$PGDATA
目录时设置此项。请注意,这不会配置 PostgreSQL 实际使用不同的目录,您需要自己进行配置,它仅允许角色正确定位目录。postgresql_conf_dir
:与postgresql_pgdata
类似,但用于配置目录。postgresql_install_psycopg2
:尝试为 Ansible 在远程使用的 Python 解释器安装正确的 psycopg2 包。这允许使用依赖于 psycopg2 的postgresql_*
Ansible 模块(可能通过 [galaxyproject.postgresql_objects][postgresql_objects])。默认为true
。
备份
此角色可以部署和调度配置及脚本,以维护 PostgreSQL [PITR][postgresql_pitr] 备份。
在配置的时间间隔内将进行完整备份,而在完整备份之间的预写日志 (WAL) 段将在 PostgreSQL 服务器指示时被存档到 {{ postgresql_backup_dir }}/wal_archive/
。一旦引用它们的最旧备份被删除,可以移除此目录中的 WAL 段。备份脚本将在 postgresql_backup_dir
本地挂载时为您自动处理此操作。
当 postgresql_backup_dir
是远程 rsync 路径(包含“:
”)时,备份脚本仍会维护备份(包括删除旧的完整备份),但无法自动修剪 wal_archive/
目录。如果您能够在备份服务器上安装 PostgreSQL 客户端包中的标准 pg_archivecleanup
工具,可以在备份服务器上直接运行此角色的备份脚本,并使用 --clean-archive
选项。
postgresql_backup_dir
:如果设置,则启用 PITR 备份。将此设置为数据库备份的目录(可以是任何 rsync 支持的格式,例如user@host:/path
)。最近的备份将位于名为current
的子目录中。postgresql_backup_local_dir
:在 PostgreSQL 服务器上放置备份脚本的文件系统路径。postgresql_backup_[hour|minute]
:控制执行完整备份的 cron 作业的时间。默认值为凌晨 1:00。postgresql_backup_[day|month|weekday]
:执行完整备份的额外 cron 控制(默认值:*
)。postgresql_backup_post_command
:在成功完成调度备份后要运行的任意命令。
有关备份的其他选项,请参阅 defaults 文件。
依赖关系
备份功能需要 Python 2.7 或 3.5 及以上版本、psycopg2 和 rsync。请注意,如果在企业 Linux 上安装 PGDG 版本的 PostgreSQL,相关的 psycopg2 包可以从 PGDG yum 仓库获得。
示例剧本
标准安装:默认的 postgresql.conf
、pg_hba.conf
和操作系统的默认版本:
---
- hosts: dbservers
roles:
- galaxyproject.postgresql
在 Debian 系统上使用 pgdg 包:
---
- 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: 修剪 PostgreSQL 存档 WAL
hour: 22
minute: 0
job: /usr/local/bin/pgbackup.py --clean-archive /archive
许可证
作者信息
Install and manage a PostgreSQL (http://www.postgresql.org/) server.
ansible-galaxy install galaxyproject.postgresql