PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Barman 2.11:barman-cloud-restore i barman-cloud-wal-restore

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql:Jak znaleźć plik pg_hba.conf w systemie Mac OS X?

  2. Zresetuj wartość sekwencji jako 1

  3. Jak zoptymalizować replikację logiczną PostgreSQL

  4. Formularz Django do bazy danych zapytań (modele)

  5. Analiza porównawcza zarządzanych rozwiązań PostgreSQL w chmurze — Google Cloud:część trzecia