Blog JSystems - uwalniamy wiedzę!

Szukaj


Z tego artykułu dowiesz się:

  • jak skonfigurować pgBackRest do współpracy z Patroni,
  • jak wykonywać backupy klastra Patroni za pomocą pgBackRest.




[ Do realizacji przykładów z tego rozdziału potrzebujemy hostów 1,2,3,4,5. Należy je przygotować według instrukcji ]


[ Do realizacji przykładów z tego rozdziału potrzebujemy skonfigurowanego klastra Patroni. Możesz przygotować taki klaster dla Ubuntu
lub systemów z rodziny Red Hat ]


[Hosty: 1,2,3,5]


Przed rozpoczęciem konfiguracji upewnijmy się, że pgbackrest jest zainstalowany na wszystkich serwerach z Patroni (hosty 1,2,3) i na serwerze kopii zapasowych (host 5) w tej samej wersji.


$ pgbackrest version
pgBackRest 2.46

Następnie tworzymy pliki konfiguracyjne dla pgbackresta.


[Host 5 : serwer backupów]


Na backup serwerze (host 5), definiujemy stanzę Patroni, podajemy adresy i katalogi pgdata dla wszystkich serwerów w klastrze, używając kolejno nazw parametrów pg1-path, pg2-path, pg3-path, etc.oraz dodajemy parametr backup_standby=y, aby pgbackrest starał się wykonywać kopie zapasowe z serwerów standby, odciążając tym samym instancję primary.


Otwórzmy plik konfiguracyjny pgbackresta, domyślnie znajduje się w /etc/pgbackrest.conf:


sudo vi /etc/pgbackrest.conf

Na początku należy wykomentować lub usunąć linie, które już znajdują się w tym pliku i wprowadzić konfigurację jak w przykładzie poniżej.


W sekcji [patroni] definiujemy, które serwery należą do konfigurowanej stanzy, czyli zestawu konfiguracji + struktury katalogów, w której przechowywane będą kopie zapasowe dla naszego klastra Patroni. Nazwę w [nazwa] możemy podać dowolną, najlepiej ułatwiającą szybką identyfikację klastra, którego dotyczy. Dalej będziemy posługiwać się nazwą stanzy "patroni".
W wierszach pgX-path, pgX-host podajemy ścieżkę do katalogu PGDATA oraz adres serwera, na którym się znajduje.

W sekcji [global] definiujemy parametry wspólne dla wszystkich stanz znajdujących się na serwerze. Parametry wykorzystane poniżej to:



  • backup-standby=y - sprawia, że pgbackrest wykonując kopię zapasową sprawdza sumy kontrolne plików na liderze patroni oraz na replikach Jeżeli sumy kontrolne się zgadzają, kopia wykonywana jest z repliki zamiast z lidera, w celu odciążenia go,
    - repo1-path=/backups - katalog,w którym przechowywane są kopie zapasowe,

  • repo1-retention-full=3 - sprawi, że kopie starsze niż 3 ostatnie poprawnie wykonany bakcupy zostaną automatycznie usunięte,

  • archive-timeout=1000 - pgbackrest wykonując backup, zaczeka 1000 sekund na zarchiwizowanie pliku WAL,

  • start-fast=y - wymuszenie checkpointa przy starcie backupu. Po wyłączeniu tej opcji pgbackrest zaczeka na następny checkpoint. Kolejną różnicą jest to, że wymuszony checkpoint stara się wykonać całą pracę najszybciej jak to możliwe, podczas gdy ten automatycznie wywołany przez postgresa stara się rozłożyć pracę w czasie określonym parametrami postgresa checkpoint_timeout * checkpoint_completion_target,

  • process-max=2 - maksymalna liczba wątków wykorzystywana przez pgbackresta.



Dalej indywidualne parametry dla poszczególnych operacji wykonywanych przez pgbackresta: backup, restore, archive-get, archive-push. Każdy z nich może mieć swój zestaw parametrów, jeżeli zajdzie taka potrzeba, poniższy przykład jest tylko demonstracją, jak to może wyglądać:


[patroni]
pg1-path=/postgres/data
pg1-host=pg1

pg2-path=/postgres/data
pg2-host=pg2

pg3-path=/postgres/data
pg3-host=pg3

[global]
backup-standby=y
repo1-path=/backups
repo1-retention-full=3
archive-timeout=1000
start-fast=y
spool-path=/var/spool/pgbackrest
process-max=2

[global:backup]
process-max=2

[global:restore]
process-max=2

[global:archive-get]
process-max=2

[global:archive-push]
process-max=2


[Hosty: 1,2,3]


Na serwerach z patroni: pg1, pg2, pg3 plik konfiguracyjny wygląda dokładnie tak samo, kopiujemy go na wszystkie serwery.


Otwórzmy plik konfiguracyjny pgbackresta, domyślnie znajduje się w /etc/pgbackrest.conf:


sudo vi /etc/pgbackrest.conf

Na początku należy wykomentować lub usunąć linie, które już znajdują się w tym pliku i wprowadzić konfigurację jak poniżej:


[patroni]
pg1-path=/postgres/data

[global]
repo1-host=pgbackup
repo1-host-user=postgres
repo1-path=/backups
archive-timeout=1000
backup-standby=y
start-fast=y
spool-path=/var/spool/pgbackrest
process-max=2

[global:backup]
process-max=2

[global:restore]
process-max=2

[global:archive-get]
process-max=2

[global:archive-push]
process-max=2


Na wszystkich serwerach tworzymy katalogi wymagane przez pgBackRest:


# na wszystkich serwerach Patroni
sudo mkdir -p /var/spool/pgbackrest && sudo chown postgres: /var/spool/pgbackrest
# na serwerze z backupami
sudo mkdir -p /backups && sudo chown postgres: /backups

[Hosty: 1,2,3,5]


Na wszystkich serwerach Patroni i pgbackresta, jako użytkownik systemowy postgres generujemy klucze uwierzytelniające dla połączeń ssh pomiędzy serwerami. Po czym przenosimy zawartość kluczy id_rsa.pub z każdego serwera na wszystkie pozostałe serwery do pliku ~/.ssh/authorized_keys. W poleceniu ssh-keygen -t rsa wciskamy enter na każde zapytanie, które nam się wyświetli:


sudo su - postgres
ssh-keygen -t rsa





cat ~/.ssh/id_rsa.pub
vi ~/.ssh/authorized_keys

Na każdym serwerze dodajemy wpisy do ~/.ssh/known_hosts jako użytkownik systemowy postgres:


cat <<EOF | xargs ssh-keyscan > ~/.ssh/known_hosts
pg1
pg2
pg3
pgbackup
EOF

Sprawdźmy, czy możemy zalogować się na serwery przez ssg bez potrzeby podawania hasła.


Z pg1 jako użytkownik postgres:


ssh postgres@pg2
ssh postgres@pg3
ssh postgres@pgbackup

I analogicznie z pg2, pg3 i pgbackup na pozostałe serwery. Powinno nas połączyć automatycznie bez potrzeby dodawania serwerów do pliku ~/.ssh/known_hosts, oraz bez pytania o hasło.


[Host 5]


Na serwerze backupów tworzymy stanzę dla klastra patroni, sprawdzamy, czy archiwizacja działa prawidłowo i wykonujemy pierwszą kopię zapasową (jako użytkownik systemowy postgres):


pgbackrest --stanza patroni --log-level-console=detail stanza-create

pgbackrest --stanza patroni --log-level-console=detail check

pgbackrest --stanza patroni --log-level-console=detail backup --type=full

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...