Kërcënimi
Unë jam një zhvillues. Unë shkruaj kod, ndërveproj me bazën e të dhënave vetëm si një përdorues. Unë asnjëherë nuk pretendoj për pozitat e administratorit të sistemit dhe, për më tepër, dba. Por...
KĂ«shtu ndodhi qĂ« mĂ« duhej tĂ« organizoja njĂ« kopje rezervĂ« tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave postgresql. AsnjĂ« cloud â mbaji SSH dhe bĂ«j qĂ« tĂ« gjitha tĂ« funksionojnĂ« pa kĂ«rkuar para. ĂfarĂ« bĂ«jmĂ« nĂ« raste tĂ« tilla? E saktĂ«, e vendosim pgdump nĂ« cron, çdo ditĂ« bĂ«jmĂ« backup tĂ« gjithçkaje nĂ« arkiv dhe nĂ«se shkojmĂ« shumĂ« larg â e dĂ«rgojmĂ« kĂ«tĂ« arkiv diku larg.
Këtë herë, vështirësia ishte se sipas planeve, baza do të rritej rreth 100 MB në ditë. Natyrisht, tashmë pas disa javësh dëshira për të bërë backup të gjithçkaje me pgdump do të zhdukej. Këtu ndihmën e japin backup-et incrementale.
Interesant? Mirë se vini nën artikull.
Backup-i incremental është një lloj rezervë, ku nuk kopjohen të gjithë skedarët e burimit, por vetëm ato të reja dhe të ndryshuara nga krijimi i kopjes së mëparshme.
Si çdo zhvillues, AKTUALISHT nuk dĂ«shiroja (nĂ« atĂ« moment) tĂ« merrem me nuancat e postgres, doja tĂ« gjeja butonin e gjelbĂ«r. E dini si nĂ« AWS, DigitalOcean: e shtypi njĂ« buton â mora replikimin, e shtypi butonin tjetĂ«r â e konfigurava backup-in, butonin e tretĂ« â e ktheva gjithçka para disa orĂ«ve. Nuk e gjeta butonin dhe asnjĂ« mjet tĂ« bukur GUI. NĂ«se e dini njĂ« tĂ« tillĂ« (falas ose tĂ« lirĂ«) â shkruani pĂ«r kĂ«tĂ« nĂ« komentet.
Pas kërkimit kam gjetur dy mjete pgbarman dhe pgbackrest. Me të parin nuk munda të angazhohem (dokumentacion shumë i varfër, u përpoqa ta ngrita gjithçka sipas manualeve të vjetra), ndërsa dokumentacioni i të dytit ishte në një nivel të pranueshëm, por jo pa mangësi. Për ta thjeshtëzuar punën për ata që do të përballen me një detyrë të tillë, ky artikull u shkrua.
Pas leximit të këtij artikulli do të mësoni si të bëni backups incrementale, ti ruani ato në një server të largët (repo me backups) dhe ti rinovoni ato në rast humbjeje të të dhënave ose çështjeve të tjera në serverin kryesor.
Përgatitja
Për të rikrijuar manualin ju nevojiten dy VPS. I pari do të jetë depozitë (repo ku do të ruhen backups), dhe i dyti, vetë serveri me postgres (në rastin tim versioni 11 i postgres).
Supozhet që në serverin me postgres keni një root, një përdorues sudo, përdoruesin postgres dhe vetë postgres është instaluar (përdoruesi postgres krijohet automatikisht gjatë instalimit të postgresql), dhe në serverin-repozitor ka një root dhe një përdorues sudo (në manual do të përdoret emri i përdoruesit pgbackrest).
PĂ«r tĂ« pasur mĂ« pak probleme kur tĂ« riprodhoni udhĂ«zimin â me shkronja italike do tĂ« pĂ«rmend se ku, nga cili pĂ«rdorues dhe me cilat tĂ« drejta kam ekzekutuar komandĂ«n gjatĂ« shkruanjes dhe verifikimit tĂ« artikullit.
Instalimi i pgbackrest
Repoja (përdoruesi pgbackrest):
1. Shkarkoni arkivin me pgbackrest dhe transferoni përmbajtjen e tij në dosjen /build:
sudo mkdir /build
sudo wget -q -O -
https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz |
sudo tar zx -C /build2. Instaloni varësitë e nevojshme për ndërtimin:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev3. Ndërtoni pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src4. Kopjoni skedarin ekzekutiv në drejtorinë /usr/bin:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest5. Pgbackrest kërkon praninë e perl. Instaloni:
sudo apt-get install perl6. Krijoni drejtoritë për logët, jepni atyre të drejta specifike:
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. Verifikoni:
pgbackrest versionServeri Postgres (përdoruesi sudo ose root):
Procesi i instalimit të pgbackrest në serverin me postgres është i ngjashëm me procesin e instalimit në repository (po, pgbackrest duhet të jetë në të dy serverat), por në pikën 6, komandat e dyta dhe të fundit:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.confzëvendësohen me:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.confKonfigurimi i ndërveprimit midis serverëve përmes SSH pa fjalëkalim
Për të siguruar funksionimin e saktë të pgbackrest, është e nevojshme të konfigurohet ndërveprimi midis serverit postgres dhe repository me një çelës file.
Repoja (përdoruesi pgbackrest):
Krijoni një çift çelesh:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""Kujdes! Komandat e mësipërme ekzekutohen pa sudo.
Serveri Postgres (përdoruesi sudo ose root):
Krijoni një çift çelesh:
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 ""Repoja (përdoruesi sudo):
Kopjoni çelësin publik të serverit postgres në serverin-repozitor:
(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_keysNë këtë hap, do të kërkohet fjalëkalimi i përdoruesit root. Duhet të futni fjalëkalimin e përdoruesit root të serverit postgres!
Serveri Postgres (përdoruesi sudo):
Kopjojmë çelësin publik të depot në serverin me postgres:
(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
Në këtë hap, do të kërkohet fjalëkalimi i përdoruesit root. Duhet të futni fjalëkalimin e përdoruesit root të depot!
Po kontrollojmë:
Depoja (përdoruesi root, për pastërti eksperimentale):
sudo -u pgbackrest ssh postgres@Serveri Postgres (përdoruesi root, për pastërti eksperimentale):
sudo -u postgres ssh pgbackrest@Sigurohemi që po fitojmë akses pa probleme.
Konfigurimi i serverit postgres
Serveri Postgres (përdoruesi sudo ose root):
1. Do të lejojmë "të godasim" serverin postgres nga IP të jashtme. Për këtë, do të redaktojmë skedarin postgresql.conf (ndodhet në folderin /etc/postgresql/11/main), duke shtuar në të rreshtin:
listen_addresses = '*'NĂ«se njĂ« rresht i tillĂ« ekziston tashmĂ«, ose hiqni komentin nga ai, ose vendosni vlerĂ«n e parametrin si â*â.
Në skedar pg_hba.conf (po ashtu ndodhet në folderin /etc/postgresql/11/main) shtojmë këto rreshta:
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5ku:
hostssl/host - lidhemi përmes SSL (ose jo)
all - lejojmë lidhjen me të gjitha bazat
yt - emri i përdoruesit, të cilit i lejojmë lidhjen (të gjithëve)
0.0.0.0/0 - maska e rrjetit nga e cila mund të lidhemi
md5 - mënyra e enkriptimit të fjalëkalimit2. Do të bëjmë konfigurimet e nevojshme në postgresql.conf (ndodhet në folderin /etc/postgresql/11/main) për funksionimin e pgbackrest:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Ku main është emri i klasterit. Gjatë instalimit të postgres, automatikisht krijohet klasteri main.
archive_mode = on
max_wal_senders = 3
wal_level = replica3. Do të bëjmë konfigurimet e nevojshme në skedarin e konfigurimit pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=4. Rinisni postgresql:
sudo service postgresql restartKonfigurimi i serverit-repozitor
Depoja (përdoruesi pgbackrest):
Do të bëjmë konfigurimet e nevojshme në skedarin e konfigurimit 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 # Parametr që tregon sa shumë të ruajmë kopje të plota. Pra, nëse keni dy kopje të plota dhe krijoni një të tretë - dy të parat do të fshihen së bashku me incrementet.
start-fast=y # Fillon kopjimin menjëherë, lexoni për këtë parametr këtu https://postgrespro.ru/docs/postgrespro/9.5/continuous-archivingKrijimi i një depoje
Depoja (përdoruesi pgbackrest):
Krijojmë një depo të re për klasterin main:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
Kontrolli
Serveri Postgres (përdoruesi sudo ose root):
Kontrollojmë në serverin postgres:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info checkDepoja (përdoruesi pgbackrest):
Kontrollojmë në serverin e depozitës:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info checkSigurohemi që shohim rreshtin «check command end: completed successfully» në daljen.
E lodhur? Kalojmë në më tërheqësin.
Krijojmë një kopje rezervë
Depoja (përdoruesi pgbackrest):
1. Kryejmë kopjimin:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. Sigurohemi që kopja është krijuar:
ls /var/lib/pgbackrest/backup/main/Pgbackrest do të krijojë kopjen e parë të plotë. Nëse dëshironi, mund të ekzekutoni komandën e kopjimit përsëri dhe të siguroheni se sistemi do të krijojë një kopje incrementale.
Nëse dëshironi të bëni përsëri një kopje të plotë, specifikoni një flag shtesë:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backupNëse dëshironi një dalje të detajuar në konsolë, gjithashtu specifikoni:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backupRindërtojmë kopjen rezervë
Serveri Postgres (përdoruesi sudo ose root):
1. Ndalim klasterin që funksionon:
sudo pg_ctlcluster 11 main stop2. Rindërtohemi nga kopja rezervë:
sudo -u postgres pgbackrest --stanza=main --delta restore3. Nisim klasterin:
sudo pg_ctlcluster 11 main startPas rindërtimit të kopjes rezervë, na nevojitet të kryejmë përsëri një kopje rezervë:
Depoja (përdoruesi pgbackrest):
sudo pgbackrest --stanza=main backupKjo është e gjitha. Në përfundim, dua të kujtoj se nuk po përpiqem të dukem si një senior DBA dhe sa herë që kam mundësi, do të përdor re. Aktualisht po filloj të studioj tema të ndryshme si kopjimi, replikimi, monitorimi etj. dhe për rezultatet, po shkruaj raporte të vogla për të bërë një kontribut të vogël në komunitet dhe për të lënë disa shënime për vete.
Në artikujt e ardhshëm do të përpiqem të flas për veçori shtesë - rikuperimi i të dhënave në një klaster të pastër, enkriptimi i kopjeve rezervë dhe publikimi në S3, kopje rezervë përmes rsync.
Burimi: habr.com
