Skip to content
Snippets Groups Projects
Commit 87bd977b authored by Thomas Schneider's avatar Thomas Schneider
Browse files

postgres: Add pgBackRest integration

This serves to supersede rsnapshot, which has severe performance issues.
parent 1e142a77
No related branches found
No related tags found
No related merge requests found
Pipeline #5091 failed
...@@ -3,6 +3,12 @@ ...@@ -3,6 +3,12 @@
postgres_pgdg_repo: false postgres_pgdg_repo: false
postgres_rsnapshot: false postgres_rsnapshot: false
postgres_commvault_compat: false postgres_commvault_compat: false
postgres_pgbackrest: false
postgres_wal_archive: "{{ postgres_commvault_compat or postgres_pgbackrest }}"
pgbackrest_retention_diff: 7
pgbackrest_retention_full: 2
pgbackrest_frequently_minute: "*/15"
postgres_versions_debian: postgres_versions_debian:
buster: "11" buster: "11"
......
#!/bin/sh
set -e
[ $# -lt 2 ] && exit 1
cp --reflink=auto "$1" "/var/backups/pg_wal/$2"
#!/bin/sh
set -e
[ $# -lt 1 ] && exit 1
pgbackrest --stanza=main archive-push "$1"
...@@ -60,26 +60,52 @@ ...@@ -60,26 +60,52 @@
path: /etc/cron.d/postgres-snapshot path: /etc/cron.d/postgres-snapshot
state: absent state: absent
- name: Configure Commvault backup compatibility - name: Configure Postgres WAL archive framework
when: postgres_commvault_compat when: postgres_wal_archive
block: block:
- name: Create WAL backup directory - name: Create WAL archiver drop-in directory
file: file:
path: /var/backups/pg_wal path: /etc/postgresql/wal-archive
state: directory state: directory
owner: postgres owner: root
group: postgres group: postgres
mode: '0750' mode: "0750"
- name: Configure Postgres WAL archive - name: Configure Postgres WAL archive
postgresql_set: postgresql_set:
name: "{{ item.name }}" name: "{{ item.name }}"
value: "{{ item.value }}" value: "{{ item.value }}"
become: true
become_user: postgres
loop: loop:
- name: archive_mode - name: archive_mode
value: "on" value: "on"
- name: archive_command - name: archive_command
value: 'cp %p /var/backups/pg_wal/%f' # pgBackRest checks the Postgres configuration, archive_command
# _needs_ to contain the string "pgbackrest", so add it as (unused)
# argument
value: >-
run-parts --report --arg=%p --arg=%f --arg=pgbackrest
/etc/postgresql/wal-archive
- name: Configure Commvault backup compatibility
when: postgres_commvault_compat
block:
- name: Create WAL backup directory
file:
path: /var/backups/pg_wal
state: directory
owner: postgres
group: postgres
mode: '0750'
- name: Configure Commvault Postgres WAL archive
copy:
src: wal-archive-commvault.sh
dest: /etc/postgresql/wal-archive/commvault
owner: root
group: postgres
mode: "0755"
- name: Configure Postgres ident mappings - name: Configure Postgres ident mappings
blockinfile: blockinfile:
...@@ -106,3 +132,7 @@ ...@@ -106,3 +132,7 @@
options: map=postgres options: map=postgres
notify: notify:
- Restart Postgres - Restart Postgres
- name: Configure pgBackRest
when: postgres_pgbackrest
import_tasks: pgbackrest.yml
---
- name: Install pgBackRest
apt:
name: pgbackrest
state: present
- name: Create pgBackRest repository
file:
path: /var/backups/pgbackrest
state: directory
owner: postgres
group: postgres
mode: "0750"
- name: Configure pgBackRest
template:
src: pgbackrest.conf
dest: /etc/pgbackrest.conf
owner: root
group: postgres
mode: "0640"
- name: Initialise pgBackRest
command:
cmd: pgbackrest stanza-create --stanza=main
creates: /var/backups/pgbackrest/backup/main
become: true
become_user: postgres
- name: Configure pgBackRest Postgres WAL archive
copy:
src: wal-archive-pgbackrest.sh
dest: /etc/postgresql/wal-archive/pgbackrest
owner: root
group: postgres
mode: "0750"
- name: Configure pgBackRest cron env
cron:
cron_file: pgbackrest
user: postgres
env: true
name: SHELL
value: /bin/bash
- name: Configure pgBackRest cron jobs
cron:
cron_file: pgbackrest
weekday: "{{ item.weekday }}"
hour: "{{ item.hour }}"
minute: "{{ item.minute }}"
name: pgbackrest-{{ item.name }}
user: postgres
job: >-
{% if item.sleep %}sleep $(($RANDOM \% 3600)) &&{% endif %}
pgbackrest backup --stanza=main --type={{ item.type }}
loop:
- name: frequently
weekday: "*"
hour: "*"
minute: "{{ pgbackrest_frequently_minute }}"
sleep: false
type: incr
- name: daily
weekday: 1-6
hour: 3
minute: 5
sleep: true
type: diff
- name: weekly
weekday: 0
hour: 3
minute: 5
sleep: true
type: full
[global]
repo1-path=/var/backups/pgbackrest
repo1-retention-diff={{ pgbackrest_retention_diff }}
repo1-retention-full={{ pgbackrest_retention_full }}
[main]
db-path=/var/lib/postgresql/{{ postgres_version }}/main
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment