Vastutusest loobumine
Mina olen arendaja. Kirjutan koodi ja suhtlen andmebaasiga vaid kasutajana. Ma ei pretendeeri sugugi sĂŒsteemiadministraatori vĂ”i eriti DBA ametikohale. KuidâŠ
Nii juhtus, et mul oli vaja korraldada PostgreSQL andmebaasi varundamine. Ilma igasuguste pilvedeta â hoia SSH ja tee nii, et kĂ”ik toimiks ja ei kĂŒsiks raha. Mida me sellistes olukordades teeme? Ăige, paneme pgdumpsi cronâi, varundame iga pĂ€ev kĂ”ik arhiivi ja kui asi viimasel ajal Ă€ra lĂ€heb â saadame selle arhiivi kuskile kaugemale.
Seekord seisnes raskus selles, et plaanide kohaselt pidi andmebaas kasvama umbes +- 100 MB pĂ€evas. Loomulikult kaob pĂ€rast paar nĂ€dalat soov varundada kĂ”ike pgdumpâiga. Siin tulevad appi inkrementaalsed varundused.
Huvitav? Tere tulemast allapoole.
Inkrementaalne varukoopia on varukoopia tĂŒĂŒp, kus kopeeritakse mitte kĂ”ik allika failid, vaid ainult uued ja muudetud failid alates eelneva koopia loomise hetkest.
Nagu iga arendaja, kes EI soovi (tol hetkel) sĂŒveneda postgres'i nĂ”kste, soovisin leida rohelist nuppu. Teate kĂŒll, nagu AWS-is, DigitalOceanis: vajutad ĂŒhte nuppu â saad replikatsiooni, vajutad teist â seadistad varukoopiad, kolmandat â kĂ”ik taastatakse paar tundi tagasi. Nuppe ja kena GUI tööriista ei leidnud. Kui te teate sellist (tasuta vĂ”i odavat) â kirjutage sellest kommentaarides.
Otsides leidsin kaks tööriista pgbarman ja pgbackrest. Esimese tööga lihtsalt ei lĂ€inud (vĂ€ga napp dokumentatsioon, proovisin kĂ”ike ĂŒles tĂ”sta vanade kĂ€siraamatute jĂ€rgi), kuid teise dokumentatsioon oli tasemel, kuid mitte ilma puudusteta. Selleks, et lihtsustada töö tegemist neile, kes sellise ĂŒlesandega silmitsi seisavad, on see artikkel kirjutatud.
Seda artiklit lugedes Ôpite tegema inkrementaalseid varukoopiaid, salvestama neid eemalolevale serverile (varukoopiaid sisaldav repository) ja taastama neid, kui andmed kaovad vÔi esinevad teised probleemid peamise serveriga.
Ettevalmistus
Manuaali jÀrgimiseks vajate kahte VPS-i. Esimene on salvestus (varunduste hoidla), teine on PostgreSQL server (minu puhul PostgreSQL versioon 11).
Eeldatakse, et PostgreSQL serveris on teil root, sudo kasutaja, postgres kasutaja ja PostgreSQL on installitud (postgres kasutaja luuakse automaatselt PostgreSQL-i installimisel), ja hoidlas on root ja sudo kasutaja (manuaalis kasutatakse kasutajanime pgbackrest).
Et teil oleks vĂ€hem probleeme juhiste jĂ€rgimisel â kursiivis mainin kus, millise kasutaja ja milliste Ă”igustega ma kĂ€sklusi tĂ€itsin artikli kirjutamise ja kontrollimise ajal.
pgbackresti installimine
Hoidla (kasutaja pgbackrest):
1. Laadige alla pgbackresti arhiiv ja viige 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 /build2. Installige vajalikud sÔltuvused:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev3. Koguge pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src4. Koonime kÀivitatava faili katalooge /usr/bin:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest5. Pgbackrest vajab perl'i. Paigaldame:
sudo apt-get install perl6. Loome logide kataloogid ja anname neile Ô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.conf7. Kontrollime:
pgbackrest versionPostgres server (sudo kasutaja vÔi root):
Pgbackrest'i installimise protsess postgres serveris on sarnane installimise protsessiga repositoori (jah, pgbackrest peab olema mÔlemal serveril), aga 6. punktis asenda teise ja viimase kÀsu:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.confjÀrgmiseks:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.confServerite vahelise suhtluse seadistamine passwordless SSH kaudu
Et pgbackrest korralikult töötaks, on vajalik seadistada suhtlus postgres serveri ja repositoori vahel vÔtme-faili kaudu.
Hoidla (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.
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_keysSelle sammu kĂ€igus kĂŒsitakse root kasutaja parooli. Sisestage kindlasti postgres serveri root kasutaja parool!
Postgres server (sudo kasutaja):
Kopeerime repository avaliku vÔtme postgres 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 /home/pgbackrest/.ssh/id_rsa.pub) |
sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys
Selle sammu kĂ€igus kĂŒsitakse root kasutaja parooli. Sisestage kindlasti repository root kasutaja parool!
Kontrollin:
Repository (root kasutaja, eksperimenti puhtuse huvides):
sudo -u pgbackrest ssh postgres@Postgres server (root kasutaja, eksperimenti puhtuse huvides):
sudo -u postgres ssh pgbackrest@Veendume, et saame probleemideta juurde pÀÀseda.
Postgres serveri seadistamine
Postgres server (sudo kasutaja vÔi root):
1. Lubame âĂŒlesse joonistadaâ postgres serverile vĂ€liste ip-de kaudu. Selleks redigeerime faili postgresql.conf (asub kaustas /etc/postgresql/11/main), lisades sinna jĂ€rgmise rea:
listen_addresses = '*'Kui selline rida on juba olemas â kommenteerige see vĂ€lja vĂ”i seadke parameetri vÀÀrtus â*â.
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 md5kus:
hostssl/host - ĂŒhendame SSL-i kaudu (vĂ”i mitte)
all - lubame ĂŒhenduse kĂ”igi andmebaasidega
all - kasutajanimi, kellele lubame ĂŒhenduse (kĂ”ik)
0.0.0.0/0 - vĂ”rgu mask, mille kaudu saab ĂŒhendust vĂ”tta
md5 - parooli krĂŒptimise meetod2. Teeme vajalikud seadistused postgresql.conf (asub kaustas /etc/postgresql/11/main) pgbackrest tööks:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Kus main on klastri nimi. Postgresse installimisel loob see automaatselt klastri main.
archive_mode = on
max_wal_senders = 3
wal_level = replica3. Teeme vajalikud seadistused pgbackrest konfigureerimisfailis (/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 restartRepo-serveri seadistamine
Repo (pgbackrest kasutaja):
Teeme vajalikud seadistused konfigureerimisfailis 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 palju tÀisvarukoopiaid hoida. St, kui teil on kaks tÀisvarukoopiat ja te loote kolmanda - esimesed kaks eemaldatakse koos inkrementidega.
start-fast=y # Alustab varukoopiat kohe, selle parameetri kohta saate lugeda siit https://postgrespro.ru/docs/postgrespro/9.5/continuous-archivingLoo hoidla
Repo (pgbackrest kasutaja):
Loome uue hoidla klastrile 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 checkRepo (pgbackrest kasutaja):
Kontrollime repository serveris:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info checkVeenduge, et vĂ€ljundis on rida âcheck command end: completed successfullyâ.
Kuidas, olete vÀsinud? Liigume pÔnevama 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Ă€isvarukoopia. Soovi korral vĂ”ite varukoopia kĂ€skluse uuesti kĂ€ivitada ja veenduda, et sĂŒsteem loob inkrementaalse varukoopia.
Kui soovite teha tÀielikku varukoopiat uuesti, siis mÀrkige tÀiendav lipp:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backupKui soovite konsoolis ĂŒksikasjalikku vĂ€ljundit, mĂ€rkige ka:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backupTaastame varukoopia
Postgres server (sudo kasutaja vÔi root):
1. Peatame töötava klastrit:
sudo pg_ctlcluster 11 main stop2. Taastame varukoopiast:
sudo -u postgres pgbackrest --stanza=main --delta restore3. KĂ€ivitame klastrit:
sudo pg_ctlcluster 11 main startPĂ€rast varukoopia taastamist peame tegema uue varukoopia:
Repo (pgbackrest kasutaja):
sudo pgbackrest --stanza=main backupSellega on kĂ”ik. LĂ”petuseks tahan meelde tuletada, et ma ei pĂŒĂŒa mingil juhul esitada end senior DBA-na ning iga vĂ”imaluse korral kasutan pilve. Praegu hakkan ise uurima erinevaid teemasid nagu varundamine, replikatsioon, jĂ€lgimine jne ja tulemuste kohta kirjutan lĂŒhikesi aruandeid, et anda oma panus kogukonda ja jĂ€tta endale vĂ€ikseid abimaterjale.
JĂ€rgmistes artiklites pĂŒĂŒan rÀÀkida lisafunktsioonidest â andmete taastamine puhtale klastrile, varukoopiate krĂŒpteerimine ja S3-le avaldamine, varukoopiad rsynci kaudu.
Allikas: habr.com
