Cúltacaí incriminteacha postgresql le pgbackrest - cúrsa do throdaire óg ón bhforbróir

Séanadh

Is forbróir mé. Scríobhaim cód agus idirghníomhaím leis an mbunachar sonraí mar úsáideoir amháin. Ní ligim orm ar bhealach ar bith gur riarthóir córais mé, níos lú ná dba. Ach…

Tharla sé mar sin go raibh orm cúltaca de bhunachar sonraí postgresql a eagrú. Gan scamaill - bain úsáid as SSH agus déan cinnte go n-oibríonn gach rud gan airgead a iarraidh. Cad a dhéanaimid i gcásanna den sórt sin? Sin ceart, brúimid pgdump isteach cron, cúltaca gach rud sa chartlann gach lá, agus má táimid caillte go hiomlán, a chuirimid ar an gcartlann seo áit éigin i bhfad ar shiúl.

An uair seo ba í an deacracht a bhí ann ná de réir na bpleananna, go raibh an bunachar sonraí ceaptha méadú de thart ar + - 100 MB in aghaidh an lae. Ar ndóigh, tar éis cúpla seachtain beidh an fonn chun gach rud a chúltaca le pgdump imithe. Seo nuair a thagann cúltacaí incriminteacha chun tarrthála.

Suimiúil? Fáilte go cat.

Is cineál cúltaca é cúltaca incriminteach nuair nach ndéantar gach comhad foinse a chóipeáil, ach cinn nua amháin agus iad siúd a athraíodh ó cruthaíodh an chóip roimhe seo.

Cosúil le forbróir ar bith nach raibh toilteanach go hiomlán (ag an am sin) tuiscint a fháil ar intricacies postgres, bhí mé ag iarraidh an cnaipe glas a aimsiú. Bhuel, tá a fhios agat, cosúil le AWS, DigitalOcean: bhrúigh tú cnaipe amháin - fuair tú macasamhlú, bhrúigh tú an dara ceann - bhunaigh tú cúltacaí, an tríú ceann - rolladh tú gach rud ar ais cúpla uair an chloig. Níor aimsigh mé cnaipe ná uirlis álainn GUI. Má tá aithne agat ar cheann (saor in aisce nó saor), scríobh faoi sna tuairimí.

Tar éis googling fuair mé dhá uirlis pgbarman и aischéimnithí. Níor éirigh liom ach leis an gcéad cheann (doiciméadú an-ghann, rinne mé iarracht gach rud a dhéanamh amach de réir na sean-lámhleabhair), ach leis an dara ceann d'éirigh leis an doiciméadú a bheith cothrom le par, ach ní gan lochtanna. Scríobhadh an t-alt seo chun obair na ndaoine sin a bhfuil a leithéid de chúram orthu a shimpliú.

Tar éis duit an t-alt seo a léamh, beidh tú ag foghlaim conas cúltacaí incriminteacha a dhéanamh, iad a shábháil ar fhreastalaí iargúlta (stór le cúltacaí) agus iad a chur ar ais i gcás caillteanas sonraí nó fadhbanna eile ar an bpríomhfhreastalaí.

Oiliúint

Chun an lámhleabhar a atáirgeadh beidh dhá VPS uait. Is é an chéad cheann an stóráil (an stór ar a stórálfar na cúltacaí), agus an dara ceann, i ndáiríre, an freastalaí féin le postgres (i mo chás, leagan 11 de postgres).

Glactar leis go bhfuil fréamh agat ar an bhfreastalaí le postgres, úsáideoir sudo, úsáideoir postgres agus tá postgres féin suiteáilte (cruthaítear an t-úsáideoir postgres go huathoibríoch nuair a shuiteáil postgresql), agus ar an bhfreastalaí stór tá fréamh agus úsáideoir sudo (sa lámhleabhar úsáidfear an t-ainm úsáideora pgbackrest).

Ionas go mbeidh níos lú fadhbanna agat agus tú ag atáirgeadh na dtreoracha, scríobhaim i gcló iodálach cén áit, leis an úsáideoir agus leis na cearta a rinne mé an t-ordú a fhorghníomhú agus an t-alt á scríobh agus á sheiceáil.

Suiteáil pgbackrest

Stór (pgbackrest úsáideora):

1. Íoslódáil an chartlann ó pgbackrest agus aistrigh a bhfuil ann go dtí an fillteán / 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. Suiteáil na spleáchais is gá le haghaidh cóimeála:

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

3. Pgbackrest a chur le chéile:

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

4. Cóipeáil an comhad inrite chuig an eolaire / usr/bin:

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

5. Éilíonn Pgbackrest perl. Suiteáil:

sudo apt-get install perl

6. Cruthaigh eolairí le haghaidh logaí, tabhair cearta áirithe dóibh:

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. Seiceáil:

pgbackrest version

Freastalaí Postgres (úsáideoir sudo nó fréamh):

Tá an próiseas chun pgbackrest a shuiteáil ar fhreastalaí le postgres cosúil leis an bpróiseas suiteála ar an stór (tá, ní mór pgbackrest a shuiteáil ar an dá fhreastalaí), ach sa 6ú mír an dara hordú agus an ceann deireanach:

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

ionad le:

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

Idirghníomhaíocht a shocrú idir freastalaithe trí SSH gan pasfhocal

Ionas go n-oibreoidh pgbackrest i gceart, is gá an t-idirghníomhú idir an freastalaí postgres agus an stór a chumrú ag baint úsáide as an eochairchomhad.

Stór (pgbackrest úsáideora):

Cruthaigh péire eochair:

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

Rabhadh! Ritheann muid na horduithe thuas gan sudo.

Freastalaí Postgres (úsáideoir sudo nó fréamh):

Cruthaigh péire eochair:

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

Stór (sudo úsáideoir):

Cóipeáil eochair phoiblí an fhreastalaí postgres chuig an bhfreastalaí taisc:

(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

Ag an gcéim seo iarrfar ort an focal faire don úsáideoir fréimhe. Ní mór duit pasfhocal úsáideora fhréamh an fhreastalaí postgres a chur isteach!

Freastalaí Postgres (úsáideoir sudo):

Cóipeáil eochair phoiblí an taisc don fhreastalaí le 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

Ag an gcéim seo iarrfar ort an focal faire don úsáideoir fréimhe. Ní mór duit a chur isteach go díreach an focal faire an úsáideora fhréamh an stór!

Déanaimid seiceáil:

Stór (fréamhúsáideoir, le haghaidh íonachta an turgnaimh):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Freastalaí Postgres (úsáideoir fréimhe, le haghaidh íonachta an turgnaimh):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Déanaimid cinnte go bhfaighimid rochtain gan fadhbanna.

Freastalaí postgres a shocrú

Freastalaí Postgres (úsáideoir sudo nó fréamh):

1. Ceadaimis cnagadh ar an bhfreastalaí postgres ó IPanna seachtracha. Chun seo a dhéanamh, cuir an comhad in eagar postgresql.conf (lonnaithe sa /etc/postgresql/11/main fillteán), ag cur an líne leis:

listen_addresses = '*'

Má tá a leithéid de líne ann cheana féin, déan trácht uirthi nó socraigh luach an pharaiméadar mar '*'.

I gcomhad pg_hba.conf (atá lonnaithe san fhillteán freisin /etc/postgresql/11/main) cuir na línte seo a leanas leis:

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

más rud é:

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

2. Déanaimis na socruithe riachtanacha i postgresql.conf (tá sé san fhillteán /etc/postgresql/11/main) le go n-oibreoidh pgbackrest:

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

3. Déanaimis na socruithe riachtanacha sa chomhad cumraíochta pgbackrest (/etc/pgbackrest/pgbackrest.conf):

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

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

4. Athlódáil postgresql:

sudo service postgresql restart

Freastalaí stórtha a shocrú

Stór (úsáideoir pgbackrest):

Déanaimis na socruithe riachtanacha sa chomhad cumraíochta aischéimnithí
(/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 # Параметр, указывающий сколько хранить полных бэкапов. Т.е. если у вас есть два полных бэкапа и вы создаете третий, то самый старый бэкап будет удален. Можно произносить как "хранить не более двух бэкапов" - по аналогии с ротациями логов. Спасибо @Aytuar за исправление ошибки.
start-fast=y # Начинает резервное копирование немедленно, прочитать про этот параметр можно тут https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving

Ag cruthú stór

Stór (úsáideoir pgbackrest):

Cruthaigh stór nua don bhraisle príomh-:

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

Проверка

Freastalaí Postgres (úsáideoir sudo nó fréamh):

Déanaimid seiceáil ar an bhfreastalaí postgres:

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

Stór (úsáideoir pgbackrest):

Déanaimid seiceáil ar an bhfreastalaí stór:

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

Déanaimid cinnte go bhfeicimid an líne “seiceáil deireadh na n-orduithe: críochnaithe go rathúil” san aschur.

Tuirseach? A ligean ar bogadh ar aghaidh go dtí an chuid is suimiúla.

Ag déanamh cúltaca

Stór (úsáideoir pgbackrest):

1. Déan cúltaca:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Bí cinnte go bhfuil cúltaca cruthaithe:

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

Cruthóidh Pgbackrest an chéad chúltaca iomlán. Más mian leat, is féidir leat an t-ordú cúltaca a rith arís agus a chinntiú go gcruthóidh an córas cúltaca incriminteach.

Más mian leat cúltaca iomlán a dhéanamh arís, sonraigh bratach breise:

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

Más mian leat aschur consól mionsonraithe, sonraigh freisin:

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

Cúltaca a athbhunú

Freastalaí Postgres (úsáideoir sudo nó fréamh):

1. Stop an braisle ag rith:

sudo pg_ctlcluster 11 main stop

2. Athchóiriú ó chúltaca:

sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore

Chun an bunachar sonraí a chur ar ais go dtí staid an chúltaca IOMLÁN deiridh, bain úsáid as an ordú gan recovery_target a shonrú:

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

Tábhachtach! Tar éis é a ghnóthú, d'fhéadfadh sé tarlú go n-éireoidh an bunachar sonraí i bhfostú sa mhodh aisghabhála (beidh earráidí cosúil le EARRÁID: ní féidir DROP DATA BASE a rith in idirbheart inléite amháin). Le bheith macánta, níor thuig mé fós cad a bhaineann leis seo. Is é seo a leanas an réiteach (beidh ort fanacht beagán tar éis an t-ordú a fhorghníomhú):

sudo -u postgres psql -c "select pg_wal_replay_resume()"

Go deimhin, is féidir cúltaca ar leith a chur ar ais faoina ainm. Seo mise amháin Cuirfidh mé nasc ar fáil leis an gcur síos ar an ngné seo sa doiciméadú. Molann na forbróirí an rogha seo a úsáid go cúramach agus míníonn siad cén fáth. Is féidir liom a rá uaim féin gur úsáid mé é. Más gá, déan cinnte go n-imíonn an bunachar sonraí as an modh aisghabhála tar éis é a ghnóthú (roghnaigh pg_is_in_recovery() ba cheart “f”) a thaispeáint agus, ar eagla na heagla, déan cúltaca iomlán tar éis é a ghnóthú.

3. Tosaigh an braisle:

sudo pg_ctlcluster 11 main start

Tar éis an cúltaca a athchóiriú, ní mór dúinn an dara cúltaca a dhéanamh:

Stór (úsáideoir pgbackrest):

sudo pgbackrest --stanza=main backup

Sin é an méid. Mar fhocal scoir, ba mhaith liom a chur i gcuimhne duit nach bhfuil mé ar aon bhealach ag iarraidh ligean orm gur duine sinsearach mé agus go n-úsáidfidh mé na scamaill a luaithe is féidir. Faoi láthair, táim féin ag tosú ag déanamh staidéir ar ábhair éagsúla cosúil le cúltaca, macasamhlú, monatóireacht, etc. agus scríobhaim tuairiscí beaga faoi na torthaí ar mhaithe le cur go mór leis an bpobal agus bileoga beaga cheat a fhágáil dom féin.

Sna hailt seo a leanas déanfaidh mé iarracht labhairt faoi ghnéithe breise - aisghabháil sonraí go braisle glan, criptiú cúltacaí agus foilsiú go S3, cúltacaí trí rsync.

Foinse: will.com

Add a comment