Skip to content

Commit d6205bf

Browse files
committed
feat(pgsql): update pg-backup strategy before update hugepage
- full backup when ansible_play_hosts_all contains primary - full or incremental backup when ansible_play_hosts_all contains no primary tested scenarios: - `./pgsql.yml -l <pg_cls> -t pg_hugepage` - full backup - `./pgsql.yml -l '<replica>,<primary>,&<pg_cls>' -t pg_hugepage` - full backup - `./pgsql.yml -l '<replica>,&<pg_cls>' -t pg_hugepage` - full or incremental backup
1 parent 434e86b commit d6205bf

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

roles/pgsql/tasks/pg_hugepage.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@
5959
pt_restart: {{ pt_restart|bool }}
6060
changed_when: false
6161

62-
- name: full backup pg before hugepage update if has primary
62+
# full back if contains primary, otherwise backup (full or incremental) at primary
63+
- name: pg-backup before update hugepage
6364
include_tasks: util/pg_backup.yml
64-
when: hugepages_need_update|bool and pg_role == 'primary'
65+
when: hugepages_need_update|bool
6566

6667
- name: update hugepage
6768
include_tasks: util/pg_write_hugepage.yml

roles/pgsql/tasks/util/pg_backup.yml

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
11
#!/usr/bin/ansible-playbook
22
---
3+
#--------------------------------------------------------------#
4+
# backup pg_cls if pgbackrest enabled [pg_backup]
5+
# - full backup when ansible_play_hosts_all contains primary
6+
# - full or incremental backup when ansible_play_hosts_all contains no primary
7+
#--------------------------------------------------------------#
8+
# tested scenarios:
9+
# - `./pgsql.yml -l <pg_cls> -t pg_hugepage`
10+
# - full backup
11+
# - `./pgsql.yml -l '<replica>,<primary>,&<pg_cls>' -t pg_hugepage`
12+
# - full backup
13+
# - `./pgsql.yml -l '<replica>,&<pg_cls>' -t pg_hugepage`
14+
# - full or incremental backup
15+
#--------------------------------------------------------------#
316

417
- name: set variable
518
tags: [ pg_hugepage, patroni, pg_launch, pt_restart ]
6-
when: pg_role_runtime is undefined
19+
when: pg_role_runtime is undefined or pg_primary_host_runtime is undefined
720
block:
821
- name: run pg-role
922
command: /pg/bin/pg-role
@@ -13,29 +26,49 @@
1326
set_fact:
1427
pg_role_runtime: "{{ pg_role_cmd.stdout | default(pg_role) | trim }}"
1528

29+
- name: set variable pg_role_runtime
30+
set_fact:
31+
pg_role_runtime: "{{ pg_role_cmd.stdout | default(pg_role) | trim }}"
32+
33+
- name: set pg_primary_host_runtime
34+
tags: [ pg_hugepage, patroni, pg_launch, pt_restart ]
35+
import_tasks: util/patroni_primary_runtime.yml
1636

1737
- name: pg_backup
1838
tags: [ pg_hugepage, patroni, pg_launch, pt_restart ]
1939
when: pgbackrest_enabled|bool
40+
become_user: "{{ pg_dbsu }}"
2041
vars:
21-
dbsu: "{{ pg_dbsu|default('postgres') }}"
2242
pg_role: "{{ pg_role_runtime }}"
2343
block:
2444
- name: full backup cls {{ pg_cluster }}
25-
become_user: "{{ dbsu }}"
2645
when: pg_role == 'primary'
2746
command: /pg/bin/pg-backup full
2847
register: back_ret_cmd
2948
ignore_errors: false
3049

3150
- name: show backup result for {{ pg_cluster }}
32-
when: pg_role == 'primary'
51+
when: pg_role == 'primary' and back_ret_cmd is defined
3352
debug:
3453
msg: |
3554
STDOUT {{ back_ret_cmd.stdout_lines }},
3655
STDERR {{ back_ret_cmd.stderr_lines }}
3756
changed_when: false
3857

58+
- name: set variable pt_backup_at_primary from primary
59+
when: pg_role != 'primary' and pg_role_runtime is defined
60+
set_fact:
61+
pt_backup_at_primary: "{{ (hostvars[pg_primary_host_runtime].back_ret_cmd | default(false) | string | trim | bool) }}"
62+
changed_when: false
63+
64+
- name: full or incr backup cls {{ pg_cluster }} if contains no primary at primary
65+
when: pg_role != 'primary' and (not pt_backup_at_primary) and pg_role_runtime is defined
66+
command: /pg/bin/pg-backup
67+
register: back_ret_cmd
68+
delegate_to: "{{ pg_primary_host_runtime }}"
69+
run_once: true
70+
71+
3972
rescue:
4073
- name: pg-backup failed for {{ pg_cluster }}
4174
debug:

0 commit comments

Comments
 (0)