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 /build2. Paigaldame vajalikud sÔltuvused:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev3. Kogume pgbackresti:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src4. Kopeerime kÀivitatava faili kausta /usr/bin:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest5. Pgbackrest nÔuab perl'i. Paigaldame:
sudo apt-get install perl6. 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.conf7. Kontrollime:
pgbackrest versioonPostgres 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.confasendame jÀrgnevaga:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.confServerite 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_keysSelle 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 md5kus:
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 meetod2. 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 = replica3. 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 restartRepo-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-archivingLao 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 checkRepo (pgbackrest kasutaja):
Kontrollime repository serveris:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info checkVeenduge, 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 backupKui soovite konsoolis detailset vÀljundit, siis lisage 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 klastri:
sudo pg_ctlcluster 11 main stop2. Taastame varukoopiast:
sudo -u postgres pgbackrest --stanza=main --delta restore3. KĂ€ivitame klastri:
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 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
