Copïau wrth gefn postgresql cynyddrannol gyda pgbackrest - cwrs ar gyfer ymladdwr ifanc gan y datblygwr

Ymwadiad

Rwy'n ddatblygwr. Rwy'n ysgrifennu cod ac yn rhyngweithio â'r gronfa ddata fel defnyddiwr yn unig. Nid wyf mewn unrhyw ffordd yn esgus bod yn weinyddwr system, llawer llai yn dba. Ond…

Digwyddodd felly bod angen i mi drefnu copi wrth gefn o gronfa ddata postgresql. Dim cymylau - defnyddiwch SSH a gwnewch yn siŵr bod popeth yn gweithio heb ofyn am arian. Beth ydym ni'n ei wneud mewn achosion o'r fath? Mae hynny'n iawn, rydyn ni'n gwthio pgdump i mewn i cron, yn gwneud copi wrth gefn o bopeth i'r archif bob dydd, ac os ydyn ni ar goll yn llwyr, rydyn ni'n anfon yr archif hon i rywle ymhell i ffwrdd.

Y tro hwn yr anhawster oedd, yn ôl y cynlluniau, bod y gronfa ddata i fod i dyfu tua +- 100 MB y dydd. Wrth gwrs, ar ôl ychydig o wythnosau bydd yr awydd i wneud copi wrth gefn o bopeth gyda pgdump yn diflannu. Dyma lle daw copïau wrth gefn cynyddrannol i'r adwy.

Diddorol? Croeso i gath.

Math o wrth gefn yw copi wrth gefn cynyddrannol pan na chaiff pob ffeil ffynhonnell ei chopïo, ond dim ond rhai newydd a'r rhai sydd wedi newid ers creu'r copi blaenorol.

Fel unrhyw ddatblygwr a oedd yn hollol anfodlon (ar y pryd) i ddeall cymhlethdodau postgres, roeddwn i eisiau dod o hyd i'r botwm gwyrdd. Wel, wyddoch chi, fel yn AWS, DigitalOcean: fe wnaethoch chi wasgu un botwm - fe gawsoch chi ddyblygu, fe wnaethoch chi wasgu'r ail - fe wnaethoch chi sefydlu copïau wrth gefn, y trydydd - fe wnaethoch chi rolio popeth yn ôl ychydig oriau. Wnes i ddim dod o hyd i fotwm nac offeryn GUI hardd. Os ydych chi'n gwybod un (am ddim neu rhad), ysgrifennwch amdano yn y sylwadau.

Ar ôl googling darganfyddais ddau declyn pgbarman и pgbackrest. Yn syml, ni lwyddais gyda'r un cyntaf (dogfennaeth denau iawn, ceisiais gyfrifo popeth yn ôl hen lawlyfrau), ond gyda'r ail un roedd y ddogfennaeth hyd at par, ond nid heb ddiffygion. Er mwyn symleiddio gwaith y rhai sy'n wynebu tasg debyg, ysgrifennwyd yr erthygl hon.

Ar ôl darllen yr erthygl hon, byddwch yn dysgu sut i wneud copïau wrth gefn cynyddrannol, eu cadw i weinydd pell (storfa gyda chopïau wrth gefn) a'u hadfer rhag ofn y bydd data'n cael ei golli neu broblemau eraill ar y prif weinydd.

Hyfforddiant

I atgynhyrchu'r llawlyfr bydd angen dau VPS arnoch. Y cyntaf fydd y storfa (y storfa lle bydd y copïau wrth gefn yn cael eu storio), a'r ail, mewn gwirionedd, y gweinydd ei hun gyda postgres (yn fy achos i, fersiwn 11 o postgres).

Tybir bod gwraidd, defnyddiwr sudo, defnyddiwr postgres a postgres ei hun wedi'i osod ar y gweinydd gyda postgres (mae'r defnyddiwr postgres yn cael ei greu'n awtomatig wrth osod postgresql), ac ar weinydd y storfa mae defnyddiwr gwraidd a sudo (yn y llawlyfr bydd yr enw defnyddiwr pgbackrest yn cael ei ddefnyddio).

Er mwyn i chi gael llai o broblemau wrth atgynhyrchu'r cyfarwyddiadau, rwy'n ysgrifennu mewn llythrennau italig ble, gyda pha ddefnyddiwr a gyda pha hawliau wnes i weithredu'r gorchymyn wrth ysgrifennu a gwirio'r erthygl.

Gosod pgbackrest

Ystorfa (pgbackrest defnyddiwr):

1. Lawrlwythwch yr archif o pgbackrest a throsglwyddwch ei gynnwys i'r ffolder /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. Gosodwch y dibyniaethau angenrheidiol ar gyfer cynulliad:

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

3. Cydosod pgbackrest:

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

4. Copïwch y ffeil gweithredadwy i'r cyfeiriadur / usr/bin:

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

5. Pgbackrest angen perl. Gosod:

sudo apt-get install perl

6. Creu cyfeiriaduron ar gyfer logiau, rhoi hawliau penodol iddynt:

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. Gwiriwch:

pgbackrest version

Gweinydd Postgres (defnyddiwr sudo neu wreiddyn):

Mae'r broses o osod pgbackrest ar weinydd gyda postgres yn debyg i'r broses osod ar y storfa (ie, rhaid gosod pgbackrest ar y ddau weinydd), ond yn y 6ed paragraff mae'r ail orchymyn a'r olaf:

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

yn ei le:

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

Sefydlu rhyngweithio rhwng gweinyddwyr trwy SSH heb gyfrinair

Er mwyn i pgbackrest weithio'n gywir, mae angen ffurfweddu'r rhyngweithio rhwng y gweinydd postgres a'r ystorfa gan ddefnyddio'r ffeil allweddol.

Ystorfa (pgbackrest defnyddiwr):

Creu pâr allweddol:

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

Sylw! Rydym yn rhedeg y gorchmynion uchod heb sudo.

Gweinydd Postgres (defnyddiwr sudo neu wreiddyn):

Creu pâr allweddol:

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

Ystorfa (defnyddiwr sudo):

Copïwch allwedd gyhoeddus y gweinydd postgres i weinydd y gadwrfa:

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

Ar y cam hwn gofynnir i chi am y cyfrinair ar gyfer y defnyddiwr gwraidd. Mae angen i chi nodi cyfrinair defnyddiwr gwraidd y gweinydd postgres!

Gweinydd Postgres (defnyddiwr sudo):

Copïwch allwedd gyhoeddus y storfa i'r gweinydd gyda postgres:

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

Ar y cam hwn gofynnir i chi am y cyfrinair ar gyfer y defnyddiwr gwraidd. Mae angen i chi nodi'n union gyfrinair defnyddiwr gwraidd yr ystorfa!

Rydym yn gwirio:

Ystorfa (defnyddiwr gwraidd, ar gyfer purdeb yr arbrawf):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Gweinydd Postgres (defnyddiwr gwraidd, er purdeb yr arbrawf):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Rydym yn sicrhau ein bod yn cael mynediad heb broblemau.

Sefydlu gweinydd postgres

Gweinydd Postgres (defnyddiwr sudo neu wreiddyn):

1. Gadewch i ni ganiatáu curo ar y gweinydd postgres o IPs allanol. I wneud hyn, golygwch y ffeil postgresql.conf (wedi'i leoli yn y ffolder /etc/postgresql/11/main), gan ychwanegu'r llinell ato:

listen_addresses = '*'

Os oes llinell o'r fath yn bodoli'n barod, naill ai dad-wneud sylw neu gosodwch y gwerth paramedr fel '*'.

Mewn ffeil pg_hba.conf (hefyd wedi'i leoli yn y ffolder /etc/postgresql/11/main) ychwanegwch y llinellau canlynol:

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

lle:

hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля

2. Gadewch i ni wneud y gosodiadau angenrheidiol yn postgresql.conf (mae yn y ffolder /etc/postgresql/11/main) i pgbackrest weithio:

archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica

3. Gadewch i ni wneud y gosodiadau angenrheidiol yn y ffeil ffurfweddu pgbackrest (/etc/pgbackrest/pgbackrest.conf):

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

[global]
log-level-file=detail
repo1-host=<repository_server_ip>

4. Ail-lwytho postgresql:

sudo service postgresql restart

Sefydlu gweinydd cadwrfa

Ystorfa (defnyddiwr pgbackrest):

Gadewch i ni wneud y gosodiadau angenrheidiol yn y ffeil ffurfweddu pgbackrest
(/etc/pgbackrest/pgbackrest.conf):

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

[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # Параметр, указывающий сколько хранить полных бэкапов. Т.е. если у вас есть два полных бэкапа и вы создаете третий - первые два будут удалены вместе с инкрементами. 
start-fast=y # Начинает резервное копирование немедленно, прочитать про этот параметр можно тут https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving

Creu ystorfa

Ystorfa (defnyddiwr pgbackrest):

Creu storfa newydd ar gyfer y clwstwr prif:

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

Проверка

Gweinydd Postgres (defnyddiwr sudo neu wreiddyn):

Rydym yn gwirio ar y gweinydd postgres:

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

Ystorfa (defnyddiwr pgbackrest):

Rydym yn gwirio ar weinydd y gadwrfa:

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

Rydyn ni'n gwneud yn siŵr ein bod ni'n gweld y llinell “gwirio diwedd y gorchymyn: wedi'i gwblhau'n llwyddiannus” yn yr allbwn.

Wedi blino? Gadewch i ni symud ymlaen at y rhan fwyaf diddorol.

Gwneud copi wrth gefn

Ystorfa (defnyddiwr pgbackrest):

1. Perfformio copi wrth gefn:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Gwnewch yn siŵr bod copi wrth gefn wedi'i greu:

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

Bydd Pgbackrest yn creu'r copi wrth gefn llawn cyntaf. Os dymunwch, gallwch redeg y gorchymyn wrth gefn eto a sicrhau bod y system yn creu copi wrth gefn cynyddrannol.

Os ydych chi am wneud copi wrth gefn llawn eto, yna nodwch faner ychwanegol:

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

Os ydych chi eisiau allbwn consol manwl, yna nodwch hefyd:

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

Adfer copi wrth gefn

Gweinydd Postgres (defnyddiwr sudo neu wreiddyn):

1. Stopiwch y clwstwr rhedeg:

sudo pg_ctlcluster 11 main stop

2. Adfer o copi wrth gefn:

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

3. Dechreuwch y clwstwr:

sudo pg_ctlcluster 11 main start

Ar ôl adfer y copi wrth gefn, mae angen i ni berfformio ail wrth gefn:

Ystorfa (defnyddiwr pgbackrest):

sudo pgbackrest --stanza=main backup

Dyna i gyd. I gloi, hoffwn eich atgoffa nad wyf mewn unrhyw ffordd yn ceisio esgus bod yn uwch dba ac y byddaf yn defnyddio'r cymylau cyn gynted â phosibl. Ar hyn o bryd, rydw i fy hun yn dechrau astudio pynciau amrywiol fel gwneud copi wrth gefn, dyblygu, monitro, ac ati. ac rwy’n ysgrifennu adroddiadau bach am y canlyniadau er mwyn gwneud cyfraniad bach i’r gymuned a gadael taflenni twyllo bach i mi fy hun.

Yn yr erthyglau canlynol byddaf yn ceisio siarad am nodweddion ychwanegol - adfer data i glwstwr glân, amgryptio copïau wrth gefn a chyhoeddi i S3, copïau wrth gefn trwy rsync.

Ffynhonnell: hab.com

Ychwanegu sylw