Inkrementeerivad varukoopiad postgresql'iga pgbackrest — noore arendaja kursus arendajalt

MĂ€rkus

Ma olen arendaja. Kirjutan koodi ja suhtlen andmebaasiga ainult kasutajana. Ma ei pretendeeri mingil juhul sĂŒsteemiadministratori, veel vĂ€hem DBA ametikohale. Aga...

Nii juhtus, et mul tuli organiseerida PostgreSQL andmebaasi varundamine. Ilma igasuguste pilveteenusteta — hoidke SSH ja tehke, et kĂ”ik töötaks ning ei paluks raha. Mida me sellistes olukordades teeme? Õige, paneme pg_dump'i cron'i, varundame iga pĂ€ev kĂ”ik arhiivi ja kui asi lĂ€heb tĂ€iesti kĂ€est Ă€ra, saadame selle arhiivi kuhugi kaugele.

Seekord oli keerukus selles, et plaane oli, et andmebaas peaks kasvama umbes +100 MB pÀevas. Loomulikult, juba paar nÀdalat hiljem kaob soov kÔik pg_dump'iga varundada. Siin tulevad abiks inkrementaalsed varukoopiad.

Huvitav? Tere tulemast katte alla.

Inkrementaalne varukoopia on reserveerimise liik, kus ei kopeerita kÔiki allika faile, vaid ainult uusi ja muudetud faile alates eelneva koopia loomise hetkest.

Nagu iga arendaja, kes sel hetkel ei soovinud vinjettide peensustesse sĂŒveneda, tahtsin leida roheline nupp. Teate kĂŒll, nagu AWS-is, DigitalOceanis: vajutad ĂŒhte nuppu — saad replikatsiooni, vajutad teist — seadistad varukoopiad, kolmandat — kĂ”ik tagasi paar tundi. Nuppu ja ilusat GUI tööriista ma ei leidnud. Kui te teate sellist (tasuta vĂ”i odavat) — kirjutage sellest kommentaarides.

Otsides leidsin kaks tööriista. pgbarman ja pgbackrest. Esimese puhul ei lĂ€inud mul lihtsalt hĂ€sti (vĂ€ga napp dokumentatsioon, proovisin kĂ”ike ĂŒles seada vanade manuaalide jĂ€rgi), aga teise dokumentatsioon osutus tasemele, kuigi mitte ilma puudusteta. Selleks, et lihtsustada töö tegemist neile, kes sellise ĂŒlesande ette vĂ”tavad, kirjutasin selle artikli.

Seda artiklit lugedes Ôpite tegema inkrementaalset varukoopiat, sÀilitama neid eemal asuvas serveris (varukoopiate repository's) ja taastama neid juhul, kui andmed on kadunud vÔi on probleeme peamisel serveril.

Ettevalmistus

Manuaali kordamiseks vajate kahte VPS-i. Esimene on salvestus (repository, kuhu varukoopiad paigutatakse), teine on siis PostgreSQL server (minu puhul PostgreSQL 11 versioon).

Eeldatakse, et postgres serveris on teil root, sudo kasutaja, postgres kasutaja ja postgres on paigaldatud (postgres kasutaja luuakse automaatselt postgresql-i installimisel), ning repository serveris on root ja sudo kasutaja (manuaalis kasutatakse kasutajanime pgbackrest).

Kuna soovin, et teil oleks vĂ€hem probleeme juhendi jĂ€rgimisel — kursiivis mĂ€rgin, kus, millise kasutaja ja milliste Ă”igustega ma kĂ€sku tĂ€itsin artikli kirjutamise ja kontrollimise ajal.

pgbackresti installimine

Repository (kasutaja pgbackrest):

1. Laadime alla pgbackresti arhiivi ja viime selle sisu kausta /build:

sudo mkdir /build
sudo wget -q -O - 
       https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz | 
       sudo tar zx -C /build

2. Paigaldame vajalikud sÔltuvused:

sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev 
       libpq-dev

3. Kogume pgbackresti:

cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src

4. Kopeerime kÀivitatava faili kausta /usr/bin:

sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

5. Pgbackrest nÔuab perl'i. Paigaldame:

sudo apt-get install perl

6. Loome logide jaoks kaustad, anname neile vajalikud Ôigused:

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf

7. Kontrollime:

pgbackrest versioon

Postgres server (sudo kasutaja vÔi root):

pgbackresti installimise protsess postgres serveris on analoogeine repository serveris toimuvale installimise protsessile (jah, pgbackrest peab olema mÔlemal serveril), kuid 6. punktis asendame teise ja viimase kÀsu:

sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf

asendame jÀrgnevaga:

sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Serverite vahelise suhtluse seadistamine passwordless SSH kaudu

Et pgbackrest korrektselt töötaks, on oluline seadistada suhtlus postgres serveri ja repository vahel vÔti-faili kaudu.

Repository (kasutaja pgbackrest):

Loome vÔtmete paari:

mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa 
       -t rsa -b 4096 -N ""

TĂ€helepanu! Ülaltoodud kĂ€sud tuleb tĂ€ita ilma sudo-ta.

Postgres server (sudo kasutaja vÔi root):

Loome vÔtmete paari:

sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa 
       -t rsa -b 4096 -N ""

Repository (sudo kasutaja):

Kopeerime postgres serveri avaliku vÔtme repository serverisse:

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && 
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && 
       sudo ssh root@ cat /var/lib/postgresql/.ssh/id_rsa.pub) | 
       sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys

Selle sammul palutakse root kasutaja parooli. Sisestama peab just postgres serveri root kasutaja parooli!

Postgres server (sudo kasutaja):

Kopeerime repo avaliku vÔtme postgres serverile:

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && 
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && 
       sudo ssh root@ cat /home/pgbackrest/.ssh/id_rsa.pub) | 
       sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys

Selle sammul palutakse root kasutaja parooli. Sisestama peab just repo root kasutaja parooli!

Kontrollime:

Repo (root kasutaja, katse puhtuse nimel):

sudo -u pgbackrest ssh postgres@

Postgres server (root kasutaja, katse puhtuse nimel):

sudo -u postgres ssh pgbackrest@

Veendume, et pÀÀseme probleemideta juurde.

Postgres serveri seadistamine

Postgres server (sudo kasutaja vÔi root):

1. Lubame 'koputamise' postgres serverile vÀlistelt IP-delt. Selleks redigeerime faili postgresql.conf (asub kaustas /etc/postgresql/11/main), lisades sinna jÀrgmise rea:

listen_addresses = '*'

Kui selline rida juba eksisteerib — kas kommenteerime selle lahti vĂ”i seadistame parameetri vÀÀrtuse ‘*’.

Failis pg_hba.conf (asub samuti kaustas /etc/postgresql/11/main) lisame jÀrgmised read:

hostssl  all  all  0.0.0.0/0  md5
host  all  all  0.0.0.0/0  md5

kus:

hostssl/host - ĂŒhendame SSL-i kaudu (vĂ”i mitte)
all - lubame ĂŒhenduse kĂ”igi andmebaasidega
all - kasutajanimi, kellele lubame ĂŒhenduse (kĂ”igile)
0.0.0.0/0 - vĂ”rgumask, mille kaudu saab ĂŒhendust vĂ”tta
md5 - parooli krĂŒpteerimise meetod

2. Teeme vajalikud seadistused postgresql.conf (see asub kaustas /etc/postgresql/11/main) pgbackrest tööks:

archive_command = 'pgbackrest --stanza=main archive-push %p' # Kus main - klastri nimi. Postgres'i installimisel luuakse automaatselt klaster main.
archive_mode = on
max_wal_senders = 3
wal_level = replica

3. Teeme vajalikud seadistused pgbackrest konfiguratsioonifailis (/etc/pgbackrest/pgbackrest.conf):

[main]
pg1-path=/var/lib/postgresql/11/main

[global]
log-level-file=detail
repo1-host=

4. TaaskÀivitame postgresql:

sudo service postgresql restart

Repo-serveri seadistamine

Repo (pgbackrest kasutaja):

Teeme vajalikud seadistused konfiguratsioonifailis pgbackrest
(/etc/pgbackrest/pgbackrest.conf):

[main]
pg1-host=
pg1-path=/var/lib/postgresql/11/main

[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # Parameeter, mis nÀitab, kui kaua sÀilitada tÀiskoopiaid. See tÀhendab, et kui teil on kaks tÀiskoopiat ja loote jÀrgmise kolmanda - siis eemaldatakse esimesed kaks koos inkrementidega.
start-fast=y # Alustab kohe varundamist, selle parameetri kohta saate lugeda siit https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving

Lao loomine

Repo (pgbackrest kasutaja):

Loome uue lao klastri jaoks main:

sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create

Kontrollimine

Postgres server (sudo kasutaja vÔi root):

Kontrollime postgres serveris:

sudo -u postgres pgbackrest --stanza=main --log-level-console=info check

Repo (pgbackrest kasutaja):

Kontrollime repository serveris:

sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check

Veenduge, et vÀljaandes on rida «check command end: completed successfully».

Kurnatud? Liigume huvitavama osa juurde.

Teeme varukoopia

Repo (pgbackrest kasutaja):

1. Teeme varukoopia:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Veenduge, et varukoopia on loodud:

ls /var/lib/pgbackrest/backup/main/

Pgbackrest loob esimese tĂ€iskoopia. Soovi korral vĂ”ite varukoopia kĂ€ivitada uuesti, et veenduda, et sĂŒsteem loob inkrementaalse varukoopia.

Kui soovite uuesti teha tÀiskoopia, lisage lisalipp:

sudo -u pgbackrest pgbackrest --stanza=main --type=full backup

Kui soovite konsoolis detailset vÀljundit, siis lisage ka:

sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup

Taastame varukoopia

Postgres server (sudo kasutaja vÔi root):

1. Peatame töötava klastri:

sudo pg_ctlcluster 11 main stop

2. Taastame varukoopiast:

sudo -u postgres pgbackrest --stanza=main --delta restore

3. KĂ€ivitame klastri:

sudo pg_ctlcluster 11 main start

PĂ€rast varukoopia taastamist peame tegema uue varukoopia:

Repo (pgbackrest kasutaja):

sudo pgbackrest --stanza=main backup

Sellega on kĂ”ik. LĂ”petuseks tahan meelde tuletada, et ma ei pĂŒĂŒa mitte mingil moel esitleda end senior dba'na ja vĂ”imaluse korral kasutan kindlasti pilve. Hetkel hakkan ise uurima erinevaid teemasid nagu varukoopiad, replikatsioonid, monitooring jne ning kirjutama vĂ€ikeseid aruandeid, et anda oma panus kogukonda ja jĂ€tta endale vĂ€ikesed mĂ€rkmed.

JĂ€rgnevates artiklites pĂŒĂŒan rÀÀkida tĂ€iendavatest funktsioonidest — andmete taastamine puhtale klastrile, varukoopiate krĂŒptimine ja avaldamine S3-s, varukoopiad lĂ€bi rsync.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster