Pgbackrest kasutamine: erinevus redaktsioonide vahel
| 198. rida: | 198. rida: | ||
* taasteks on ainumõeldav kasutada timeline-1 varundusest alates, ja ühel hetkel liigub wal logide kasutamine timeline-3 peale - timeline-2 osakond jääb üldse vahele kuna ta ei puutu asjasse (timeline-3 seisukohast on tegu kõrvalharuga) |
* taasteks on ainumõeldav kasutada timeline-1 varundusest alates, ja ühel hetkel liigub wal logide kasutamine timeline-3 peale - timeline-2 osakond jääb üldse vahele kuna ta ei puutu asjasse (timeline-3 seisukohast on tegu kõrvalharuga) |
||
* peale taastet toimetatakse timeline-4 peal |
* peale taastet toimetatakse timeline-4 peal |
||
| + | |||
| + | Käesoleva timeline väärtuse küsimine, vastus on '3' |
||
| + | |||
| + | <pre> |
||
| + | postgres=# select pg_walfile_name(pg_current_wal_lsn()); |
||
| + | pg_walfile_name |
||
| + | -------------------------- |
||
| + | 00000003000000000000006B |
||
| + | (1 row) |
||
| + | </pre> |
||
===Minio=== |
===Minio=== |
||
Redaktsioon: 30. oktoober 2025, kell 01:30
Sissejuhatus
pgbackrest https://github.com/pgbackrest/pgbackrest on C keeles Crunchy Data https://www.crunchydata.com/ poolt arendatud PostgreSQL andmebaasi varundamise tarkvara.
Misc
- kas pgbackrest abil saab korraldada, et kasutajad saavad ise oma andmeid taastada (nt iga varundatava süsteemi pgbackrest protsess käivitatakse eraldi kasutajaga)
- varunduse arvutis saab varundustest seise käivitada docker konteinerites (kasutades varundusele vastavat postgresql tarkvara versiooni ja extensionite jms koosseisu)
Tööpõhimõte
pgbackrest saab üldiselt kasutada kahes režiimis
- lokaalselt - pgbackrest moodustab repo samasse arvutisse kus asuvad varundatavad andmed
- kaugelt - pgbackrest repo ja varundatav arvuti on erinevad arvutid
Käesolev tekst tegeleb üle võrgu st kaugelt varundamise ja taastega.
tf-vm-84 tf-vm-86 tf-vm-87
_______ _______ _______
| | | | | |
| | | | | |
|_______| |_______| |_______|
| | |
| | |
| | |
------|-------------|----------|-------------------|
|
|
___|___
| | /var/lib/pgbackrest
| |
|_______|
tf-vm-85
kus
- arvutid saavad omavahel suhelda ssh võtmete abil moodustatud usalduse abil
Süsteemide ettevalmistamine
TODO
- Andmebaas peab muu hulgas olema lähtestatud data-checksums toega, nt
# pg_createcluster --locale et_EE.UTF-8 10 main -- --data-checksums
- Baasi seadistustes peab olema muu hulgas
root@tf-vm-84:~# grep archive_ /etc/postgresql/10/main/postgresql.conf archive_mode = on archive_command = 'pgbackrest --stanza=db-tf-vm-84 archive-push %p'
- ssh võtmete genereerimine ja laialijaotamine (varunduse arvutis on vajalik teha vaid üks kord)
varundatav-arvuti$ ssh-keygen varunduse-arvuti$ ssh-keygen
Paigaldamine
Paigaldamiseks sobib kasutada apt.postgresql.org repot ja öelda nii varundamise kui varundatavas arvutis
# apt-get install curl ca-certificates gnupg2 # curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - # cat /etc/apt/sources.list.d/pgdg.list deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main # apt-get update # apt-get install pgbackrest
Tulemusena paigaldatakse süsteemi lisaks sõltuvustena nt paketid
libgdbm-compat4 libgdbm6 libperl5.28 libpq5 perl perl-modules-5.28 pgbackrest pgdg-keyring postgresql-client-common postgresql-common ssl-cert
ja pgbackrest, mis sisaldab mõnda faili
/usr/bin/pgbackrest - programm /etc/pgbackrest.conf - peamine seadistusfail
Eraldi kasutajat ei moodustata, tundub, et kõige sobilikum on tegutseda postgres kasutajana.
Varundamise seadistamine
Repo arvutis tuleb moodustada nt seadistusfail /etc/pgbackrest.conf
# cat /etc/pgbackrest.conf [global] repo-path=/var/lib/pgbackrest repo1-retention-full=1 process-max=2 log-level-console=info log-level-file=debug start-fast=y stop-auto=y [db-primary] pg1-path=/var/lib/postgresql/10/main pg1-host=tf-vm-84 pg1-host-user=postgres
ja varundatavas arvutis seadistusfail /etc/pgbackrest.conf
# cat /etc/pgbackrest.conf [global] repo1-host=tf-vm-85 repo1-path=/var/lib/pgbackrest repo1-host-user=postgres process-max=2 log-level-console=info log-level-file=debug [db-primary] pg1-path=/var/lib/postgresql/10/main
Varundamine
Varundamiseks sobib repo arvutis öelda nt
$ pgbackrest --stanza=db-tf-vm-84 stanza-create $ pgbackrest --stanza=db-primary backup $ pgbackrest --stanza=db-primary --type=full backup $ pgbackrest --stanza=db-primary info
Taaste
Taastamiseks sobib varundatavas arvutis öelda nt (või ilma --delta suvandita)
$ pgbackrest --stanza=db-primary --delta restore
Varundusest eemaldamine
TODO
$ pgbackrest --stanza=db-primary stop $ pgbackrest --stanza=db-primary stanza-delete --force
Vanade varunduste eemaldamine
Tavaliselt toimub see järgmise varunduse käigus automaatselt, aga seda saab ka käsitsi esile kutsuda, nt
- pgbackrest töötamise põhimõttest tingituna ei saa vahepealseid varundusi eemaldada, saab eemalda suuremal või vähemal määral järjestikulist vanemat otsa
- veenduda, et regulaarne varundamine on välja lülitatud ajutiselt (nt cron töö)
- vähendada pgbackrest.conf seadistusfailis retention suurust sobivaks (nii, et tabatakse sobivat hulka vanu varundusi)
- kustutada mida tabataks
$ pgbackrest --config /etc/pgbackrest.conf --stanza=pgcluster_13_main_toodang --dry-run expire $ pgbackrest --config /etc/pgbackrest.conf --stanza=pgcluster_13_main_toodang expire
- seadistada tagasi retention sobiv suurus
Integreerimine muu varundusega
Kui üldiselt on kasutuses nt Data Protector tarkvara, siis võiks korraldada kahe tasemelise varundamise
- pgbackrest varundab varunduse arvuti failisüsteemi HP DP mõttes 1st stage varunduse
- data protector kirjutab 1st stage varundust failisüsteemist 2nd stage varunduseks linti
Kasulikud lisamaterjalid
- https://www.cybertec-postgresql.com/en/remote-backup-and-restore-with-pgbackrest/
- https://learn.crunchydata.com/
- https://wiki.postgresql.org/wiki/Binary_Replication_Tools
- https://medium.com/leboncoin-engineering-blog/managing-postgresql-backup-and-replication-for-very-large-databases-61fb36e815a0
Timeline
PostgreSQL timeline on varundamisega tegelemisel väga oluline kontseptsioon
- üks postgresql andmebaas st teenus ning temaga tegelev pgbackrest varundus viibivad ühel ajahetkel nö ühes ja samas kohas, st nad toimetavad kooskõlaliselt
- kui mingeid nö segajaid ei ole (nt äsja ei ole taastatud andmebaasi varundusest), siis postgresqli baasi ja tema pgbacrest varundus nö kulgevad ajas edasi
- postgresqli baasil ja pgbackrest varundusel on võimekus hallata erinevaid kombinatsioone töötavast baasist ja tema varundusest
- wal logi kuulub alati mingi ja ainult ühe timeline juurde
- ühe absoluutse ajahetke taasteni ühest konkreetselt full varundusest viib ainult üks tee mööda timeline'isid (ja seotud wal failisid)
Näide töötava baasi ja varunduse nö kombinatsioonidest
- alguses käivitati baas ja temast tehti esimene varundus - öeldakse, et süsteem toimib 'timeline 1' peal
- baasi kasutatakse - hakatakse andmeid sisestama ja varundusse kopeeritakse järjest uusi timeline-1 seotud wal faile
- seejärel baas taastati varundusest - öeldakse, et süsteem toimib 'timeline 2' peal
- seejärel taastatud baas varundati - varunduses on nüüd timeline-1 ja timeline-2 variatsioonid full backupid + neile vastavad wal failid
- seejärel baas taastati varundusest üsna käivitamise järgse puhta seisuga - öeldakse, et süsteem toimib 'timeline 3' peal
- baas töötab ja wal logid liiguvad pgbackrest varundusse, aga nende wal logide juures on märge timeline-3 peale kuulumise kohta
- ja taastatud baasi varundatakse - varunduses on nüüd kokku timeline-1, timeline-2 ja timeline-3 variatsioonid + vastavad wal failide komplektid
Kui sellisesse olekusse saabunud baasi taastada viimasele varundusele eelnevale ajahetkele, siis
- taasteks on ainumõeldav kasutada timeline-1 varundusest alates, ja ühel hetkel liigub wal logide kasutamine timeline-3 peale - timeline-2 osakond jääb üldse vahele kuna ta ei puutu asjasse (timeline-3 seisukohast on tegu kõrvalharuga)
- peale taastet toimetatakse timeline-4 peal
Käesoleva timeline väärtuse küsimine, vastus on '3'
postgres=# select pg_walfile_name(pg_current_wal_lsn());
pg_walfile_name
--------------------------
00000003000000000000006B
(1 row)
Minio
# cat /etc/pgbackrest.conf [global] repo1-type=s3 repo1-s3-endpoint=s3-by-minio.moraal.ee:9000 repo1-s3-uri-style=path repo1-s3-region=trt repo1-path=/path-project-test-pgbackrest-1 repo1-s3-bucket=bucket-division-project-test repo1-s3-key=key-division-project-test repo1-s3-key-secret=keysecret-parool repo1-retention-full=3 repo1-retention-diff=7 process-max=2 log-level-console=info log-level-file=info [pg_16] pg1-path=/var/lib/postgresql/16/main
Käsundamine
mc alias set pgrepotest https://s3-by-minio.moraal.ee:9000 key-division-project-test keysecret-parool # mc ls pgrepotest/bucket-division-project-test/path-project-test-pgbackrest-1 [2025-10-30 00:56:02 EET] 0B archive/ [2025-10-30 00:56:02 EET] 0B backup/ # mc cp --recursive pgrepotest/bucket-division-project-test/path-project-test-pgbackrest-1 local-path-project-test-pgbackrest-1 # mc rm --recursive --force pgrepotest/bucket-division-project-test/path-project-test-pgbackrest-1/archive # mc rm --recursive --force pgrepotest/bucket-division-project-test/path-project-test-pgbackrest-1/backup