Dzięki nowym narzędziom barman-cloud-restore
i barman-cloud-wal-restore
wprowadzone w Barman 2.11
, możliwe jest teraz odzyskanie instancji PostgreSQL przy użyciu pełnej kopii zapasowej wykonanej wcześniej przy użyciu barman-cloud-wal-archive
i barman-cloud-backup
polecenia. Odkryjmy razem, jak to zaimplementować w następnym artykule.
Warto zauważyć, że w Barman 2.11 wszystkie narzędzia chmurowe dla Barmana znajdują się teraz w osobnym pakiecie o nazwie barman-cli-cloud
.
Wymagania
1. barman-cli-cloud
pakiet
2. Instancja PostgreSQL
3. Łyżka AWS S3
4. Druga maszyna wirtualna, na której należy wykonać przywracanie
W tym artykule przetestujemy barman-cli-cloud
funkcjonalności w maszynie wirtualnej z Debian Buster i PostgreSQL 12. Aby prawidłowo postępować zgodnie z instrukcjami zawartymi w tym artykule, zakładamy również, że masz:
- skonfigurowano Postgres do archiwizowania plików WAL w istniejącym zasobniku S3 przy użyciu
barman-cloud-wal-archive
- wykonał kopię zapasową i wyślij ją do tego samego wiadra S3 przez
barman-cloud-backup
Możesz to łatwo osiągnąć, postępując zgodnie z instrukcjami zawartymi w tych poprzednich artykułach na blogu:
- Chmura Barmana – Część 1:Archiwum WAL
- Chmura Barmana – Część 2:Kopia zapasowa w chmurze
Skonfiguruj serwer odzyskiwania
W rezultacie mamy wiadro S3 na AWS o nazwie barman-s3-test
który zawiera już pliki WAL i kopię zapasową zarchiwizowaną przez barman-cloud-wal-archive
i barman-cloud-backup
narzędzi, teraz musimy poprawnie skonfigurować serwer, który będzie hostem do odzyskiwania instancji PostgreSQL.
1. Zainstaluj PostgreSQL 12 z oficjalnego repozytorium PGDG
2. Zainstaluj publiczne repozytorium drugiej kwadrantu
3. Zainstaluj barman-cli-cloud
pakiet:
[email protected]:~# apt update [email protected]:~# apt install barman-cli-cloud
4. Zainstaluj awscli
pakiet:
[email protected]:~# apt install awscli
5. Skonfiguruj poświadczenia AWS za pomocą narzędzia awscli jako użytkownik postgres:
[email protected]:~$ aws configure --profile barman-cloud AWS Access Key ID [None]: AKI***************** AWS Secret Access Key [None]: **************************************** Default region name [None]: eu-west-1 Default output format [None]: json
Wykonaj procedurę przywracania
Teraz, gdy serwer odzyskiwania jest poprawnie skonfigurowany, jesteśmy gotowi do rozpoczęcia procedury przywracania.
Barman 2.11 przedstawia barman-cloud-backup-list
polecenie, które pozwala na pobranie informacji o kopiach zapasowych wykonanych za pomocą barman-cloud-backup
:
[email protected]:~$ barman-cloud-backup-list \ --profile barman-cloud \ s3://barman-s3-test pg12 Backup ID End Time Begin Wal 20200713T120856 2020-07-13 12:09:05 00000001000000000000000C
Jesteśmy teraz gotowi do wykonania przywracania za pomocą barman-cloud-restore
polecenie:
[email protected]:~$ barman-cloud-restore \ --profile barman-cloud \ s3://barman-s3-test \ pg12 20200713T120856 \ /var/lib/postgresql/12/main/
Po pomyślnym zakończeniu przywracania możemy sprawdzić zawartość katalogu PGDATA:
[email protected]:~$ ls /var/lib/postgresql/12/main/ PG_VERSION global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.conf backup_label pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans pg_wal postgresql.conf base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_xact
Teraz, aby mieć pewność, że proces przywracania przebiegł prawidłowo, musimy uruchomić odzyskaną instancję PostgreSQL i sprawdzić, czy wszystko działa zgodnie z oczekiwaniami. Ten proces wymaga kilku dodatkowych kroków.
Po pierwsze, ponieważ pracujemy w systemie Debian, musimy skopiować pliki zawierające konfigurację PostgreSQL do katalogu /etc/postgresql/12/main/
katalog:
[email protected]:~$ cp /var/lib/postgresql/12/main/postgresql.conf /etc/postgresql/12/main/ [email protected]:~$ cp /var/lib/postgresql/12/main/pg_hba.conf /etc/postgresql/12/main/ [email protected]:~$ cp /var/lib/postgresql/12/main/pg_ident.conf /etc/postgresql/12/main/
Po drugie, utwórz recovery.signal
plik:
[email protected]:~$ touch /var/lib/postgresql/12/main/recovery.signal
Następnie wyłącz archive_command
aby zapobiec zapisywaniu odzyskanej instancji w tym samym zasobniku, co oryginalna instancja:
[email protected]:~$ echo \"archive_command = 'cd .'\" >> /etc/postgresql/12/main/postgresql.conf
Następnie musisz skonfigurować PostgreSQL, aby pobierał pliki WAL z najnowszej dostępnej osi czasu z zasobnika S3 za pomocą barman-cloud-wal-restore
w restore_command
:
[email protected]:~$ echo \"restore_command = 'barman-cloud-wal-restore --profile barman-cloud s3://barman-s3-test pg12 %f %p'\" >> /etc/postgresql/12/main/postgresql.conf [email protected]:~$ echo \"recovery_target_timeline = 'latest'\" >> /etc/postgresql/12/main/postgresql.conf
WAŻNE :Przed kontynuowaniem upewnij się, że instancja PostgreSQL nie jest uruchomiona i że katalog docelowy (domyślny katalog danych PostgreSQL) jest pusty.
Wreszcie jesteśmy gotowi do uruchomienia nowej odzyskanej instancji:
[email protected]:~# systemctl restart [email protected]
Świetny! Jak widać z dziennika PostgreSQL, pliki WAL są odzyskiwane z zasobnika S3 i instancja została poprawnie uruchomiona:
[email protected]:~$ less /var/log/postgresql/postgresql-12-main.log ... 2020-07-13 12:43:25.093 UTC [9458] LOG: starting PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit 2020-07-13 12:43:25.093 UTC [9458] LOG: listening on IPv4 address "127.0.0.1", port 5432 2020-07-13 12:43:25.095 UTC [9458] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2020-07-13 12:43:25.111 UTC [9459] LOG: database system was interrupted; last known up at 2020-07-13 12:08:56 UTC 2020-07-13 12:43:25.508 UTC [9459] LOG: starting archive recovery 2020-07-13 12:43:26.010 UTC [9459] LOG: restored log file "00000001000000000000000C" from archive 2020-07-13 12:43:26.052 UTC [9459] LOG: redo starts at 0/C000028 2020-07-13 12:43:26.054 UTC [9459] LOG: consistent recovery state reached at 0/C000138 2020-07-13 12:43:26.054 UTC [9458] LOG: database system is ready to accept read only connections 2020-07-13 12:43:26.469 UTC [9459] LOG: restored log file "00000001000000000000000D" from archive 2020-07-13 12:43:26.823 UTC [9459] LOG: redo done at 0/D0001B0 2020-07-13 12:43:27.242 UTC [9459] LOG: restored log file "00000001000000000000000D" from archive 2020-07-13 12:43:27.592 UTC [9459] LOG: selected new timeline ID: 2 2020-07-13 12:43:27.644 UTC [9459] LOG: archive recovery complete 2020-07-13 12:43:27.979 UTC [9458] LOG: database system is ready to accept connections
Wniosek
Jak zwykle w przypadku każdej nowej wersji Barmana, zalecamy wszystkim zaktualizowanie swoich systemów do najnowszej wersji. Pełna lista zmian i poprawek błędów jest dostępna tutaj.
Pamiętaj, że jeśli już używasz barman-cloud-wal-archive
lub barman-cloud-backup
zainstalowany przez pakiet RPM/Apt i aktualizujesz swój system, musisz zainstalować barman-cli-cloud
pakiet. Wynika to z faktu, że w wersji Barman 2.11 wszystkie narzędzia związane z chmurą są częścią barman-cli-cloud
pakiet, jak wyjaśniono na początku artykułu.
Kolejne wersje Barmana mogą poprawić użyteczność i możliwości automatyzacji polecenia restore, na przykład przygotowując recovery.conf
lub recovery.signal
plik jak rzeczywisty Barman.