Pgbackrest kasutamine: erinevus redaktsioonide vahel

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
182. rida: 182. rida:
 
* postgresqli baasil ja pgbackrest varundusel on võimekus hallata erinevaid kombinatsioone töötavast baasist ja tema varundusest
 
* 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
 
* 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
 
Näide töötava baasi ja varunduse nö kombinatsioonidest

Redaktsioon: 30. oktoober 2025, kell 01:25

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

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 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
  • 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

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