Cùl-taic mean air mhean postgresql le pgbackrest - cùrsa airson trodaiche òg bhon leasaiche

Àicheadh

'S e leasaiche a th' annam. Bidh mi a’ sgrìobhadh còd agus ag eadar-obrachadh leis an stòr-dàta a-mhàin mar neach-cleachdaidh. Ann an dòigh sam bith chan eil mi a 'leigeil orm a bhith nam rianadair siostam, nas lugha na dba. Ach…

Mar sin thachair e gum feumadh mi cùl-taic den stòr-dàta postgresql a chuir air dòigh. Gun sgòthan - dìreach cleachd SSH agus dèan cinnteach gu bheil a h-uile càil ag obair gun a bhith ag iarraidh airgead. Dè nì sinn ann an leithid de chùisean? Tha sin ceart, bidh sinn a’ putadh pgdump a-steach gu cron, a’ toirt cùl-taic don tasglann a h-uile latha, agus ma tha sinn gu tur air chall, bidh sinn a’ cur an tasglann seo an àiteigin fada air falbh.

An turas seo b’ e an duilgheadas a bh’ ann, a rèir nam planaichean, gun robh còir aig an stòr-dàta fàs timcheall air + - 100 MB gach latha. Gu dearbh, às deidh beagan sheachdainean falbhaidh am miann cùl-taic a dhèanamh de gach nì le pgdump. Seo far am bi cùl-taic mean air mhean a 'tighinn gu teasairginn.

Inntinneach? Fàilte don chat.

Is e seòrsa de chùl-taic a th’ ann an cùl-taic mean air mhean nuair nach tèid a h-uile faidhle stòr a chopaigeadh, ach dìreach feadhainn ùra agus an fheadhainn a chaidh atharrachadh bho chaidh an leth-bhreac a chruthachadh.

Coltach ri leasaiche sam bith a bha gu tur deònach (aig an àm sin) a bhith a 'tuigsinn cho duilich' sa bha postgres, bha mi airson am putan uaine a lorg. Uill, tha fios agad, mar ann an AWS, DigitalOcean: bhrùth thu aon phutan - fhuair thu ath-riochdachadh, bhrùth thu an dàrna fear - stèidhich thu cùl-taic, an treas fear - chuir thu a h-uile càil air ais uair no dhà. Cha do lorg mi putan no inneal GUI brèagha. Ma tha thu eòlach air fear (an-asgaidh no saor), sgrìobh mu dheidhinn anns na beachdan.

An dèidh googling lorg mi dà inneal pgbarman и cùl-taic. Gu sìmplidh cha do shoirbhich leam leis a’ chiad fhear (sgrìobhainnean gu math gann, dh’ fheuch mi ris a h-uile càil obrachadh a-mach a rèir seann leabhraichean-làimhe), ach leis an dàrna fear thionndaidh na sgrìobhainnean gu bhith suas ri par, ach chan ann às aonais lochdan. Gus obair an fheadhainn a tha mu choinneamh an aon ghnìomh a dhèanamh nas sìmplidhe, chaidh an artaigil seo a sgrìobhadh.

Às deidh dhut an artaigil seo a leughadh, ionnsaichidh tu mar a nì thu cùl-taic mean air mhean, sàbhail iad gu frithealaiche iomallach (stòr le cùl-taic) agus cuir air ais iad gun fhios nach caill thu dàta no duilgheadasan eile air a’ phrìomh fhrithealaiche.

Ullachadh

Gus an leabhar-làimhe ath-riochdachadh bidh feum agad air dà VPS. Is e a ’chiad fhear an stòradh (an stòr air am bi na cùl-taic air an stòradh), agus an dàrna fear, gu dearbh, am frithealaiche fhèin le postgres (anns a’ chùis agam, dreach 11 de postgres).

Thathas a’ gabhail ris gu bheil freumh, cleachdaiche sudo, cleachdaiche postgres agus postgres fhèin air a chuir a-steach air an fhrithealaiche le postgres (tha an cleachdaiche postgres air a chruthachadh gu fèin-ghluasadach nuair a stàlaicheas tu postgresql), agus air frithealaiche an stòr tha cleachdaiche root agus sudo (san leabhar-làimhe). thèid an t-ainm cleachdaiche pgbackrest a chleachdadh).

Gus am bi nas lugha de dhuilgheadasan agad nuair a bhios tu ag ath-riochdachadh an stiùiridh, bidh mi a’ sgrìobhadh ann an clò eadailteach càite, leis an neach-cleachdaidh agus dè na còraichean a chuir mi an gnìomh an àithne fhad ‘s a tha thu a’ sgrìobhadh agus a ’sgrùdadh an artaigil.

A stàladh pgbackrest

Stòr-tasgaidh (pgbackrest neach-cleachdaidh):

1. Luchdaich sìos an tasglann bho pgbackrest agus gluais na tha ann dhan phasgan / togail:

sudo mkdir /build
sudo wget -q -O - 
       https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz | 
       sudo tar zx -C /build

2. Stàlaich na h-eisimeileachd a tha riatanach airson co-chruinneachadh:

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

3. A' cruinneachadh pgbackrest:

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

4. Dèan lethbhreac dhen fhaidhle so-ghnìomhaichte dhan eòlaire / usr/bin:

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

5. Feumaidh pgbackrest perl. Stàladh:

sudo apt-get install perl

6. Cruthaich clàran airson logaichean, thoir còraichean sònraichte dhaibh:

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. Thoir sùil:

pgbackrest version

Frithealaiche Postgres (cleachdaiche sudo no freumh):

Tha am pròiseas airson pgbackrest a chuir a-steach air frithealaiche le postgres coltach ris a’ phròiseas stàlaidh air an stòr (tha, feumar pgbackrest a chuir a-steach air an dà fhrithealaiche), ach anns an 6mh paragraf an dara àithne agus an àithne mu dheireadh:

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

cuir an àite:

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

A’ stèidheachadh eadar-obrachadh eadar frithealaichean tro SSH gun fhacal-faire

Gus am bi pgbackrest ag obair gu ceart, feumar an eadar-obrachadh eadar frithealaiche postgres agus an stòr a rèiteachadh a’ cleachdadh am prìomh fhaidhle.

Stòr-tasgaidh (pgbackrest neach-cleachdaidh):

Cruthaich prìomh phaidhir:

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

Thoir aire! Bidh sinn a’ ruith na h-òrdughan gu h-àrd gun sudo.

Frithealaiche Postgres (cleachdaiche sudo no freumh):

Cruthaich prìomh phaidhir:

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 (cleachdaiche sudo):

Dèan lethbhreac de iuchair phoblach an fhrithealaiche postgres gu frithealaiche an tasgaidh:

(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

Aig a 'cheum seo thèid iarraidh ort am facal-faire airson an neach-cleachdaidh root. Feumaidh tu facal-faire neach-cleachdaidh freumh an fhrithealaiche postgres a chuir a-steach!

Frithealaiche Postgres (cleachdaiche sudo):

Dèan lethbhreac de iuchair phoblach an stòrais chun an fhrithealaiche 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

Aig a 'cheum seo thèid iarraidh ort am facal-faire airson an neach-cleachdaidh root. Feumaidh tu dìreach facal-faire neach-cleachdaidh freumh an stòr a chuir a-steach!

Bidh sinn a ’sgrùdadh:

Stòr (neach-cleachdaidh bunaiteach, airson purrachd an deuchainn):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Frithealaiche Postgres (neach-cleachdaidh bunaiteach, airson purrachd an deuchainn):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Bidh sinn a’ dèanamh cinnteach gum faigh sinn cothrom gun duilgheadasan.

A' stèidheachadh frithealaiche postgres

Frithealaiche Postgres (cleachdaiche sudo no freumh):

1. Leig leinn bualadh air an fhrithealaiche postgres bho IPan taobh a-muigh. Gus seo a dhèanamh, deasaich am faidhle postgresql.conf (suidhichte anns a’ phasgan /etc/postgresql/11/main), a’ cur na loidhne ris:

listen_addresses = '*'

Ma tha loidhne mar seo ann mu thràth, an dàrna cuid cuir a-mach e no suidhich luach a’ pharamadair mar ‘*’.

Ann am faidhle pg_hba.conf (cuideachd suidhichte sa phasgan /etc/postgresql/11/main) cuir na loidhnichean a leanas ris:

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

far:

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

2. Dèanamaid na roghainnean riatanach a-steach postgresql.conf (tha e sa phasgan /etc/postgresql/11/main) airson pgbackrest a bhith ag obair:

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

3. Dèanamaid na roghainnean riatanach anns an fhaidhle rèiteachaidh pgbackrest (/etc/pgbackrest/pgbackrest.conf):

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

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

4. Ath-luchdaich postgresql:

sudo service postgresql restart

A' stèidheachadh frithealaiche tasgaidh

Stòr-tasgaidh (cleachdaiche pgbackrest):

Dèanamaid na roghainnean riatanach anns an fhaidhle rèiteachaidh cùl-taic
(/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

A 'cruthachadh stòr-dàta

Stòr-tasgaidh (cleachdaiche pgbackrest):

Cruthaich stòr ùr airson a’ bhuidheann prìomh:

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

sgrùdadh

Frithealaiche Postgres (cleachdaiche sudo no freumh):

Nì sinn sgrùdadh air an fhrithealaiche postgres:

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

Stòr-tasgaidh (cleachdaiche pgbackrest):

Nì sinn sgrùdadh air frithealaiche an stòrais:

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

Bidh sinn a’ dèanamh cinnteach anns an toradh gum faic sinn an loidhne “seic deireadh àithne: crìochnaichte gu soirbheachail”.

Sgìthichte? Gluaisidh sinn air adhart chun phàirt as inntinniche.

A 'dèanamh cùl-taic

Stòr-tasgaidh (cleachdaiche pgbackrest):

1. Dèan cùl-taic:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Dèan cinnteach gu bheil lethbhreac glèidhidh air a chruthachadh:

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

Cruthaichidh Pgbackrest a’ chiad chùl-taic slàn. Ma thogras tu, is urrainn dhut an àithne cùl-taic a ruith a-rithist agus dèan cinnteach gu bheil an siostam a’ cruthachadh cùl-taic mean air mhean.

Ma tha thu airson cùl-taic slàn a dhèanamh a-rithist, an uairsin sònraich bratach a bharrachd:

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

Ma tha thu ag iarraidh toradh tòcan mionaideach, an uairsin sònraich cuideachd:

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

Ag ath-nuadhachadh cùl-taic

Frithealaiche Postgres (cleachdaiche sudo no freumh):

1. Cuir stad air a 'chlò-bhualadh ruith:

sudo pg_ctlcluster 11 main stop

2. Ag ath-nuadhachadh bho chùl-taic:

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

Gus an stòr-dàta a thoirt air ais gu staid an cùl-taic LÀN mu dheireadh, cleachd an àithne gun a bhith a’ sònrachadh recovery_target:

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

Cudromach! Às deidh faighinn air ais, dh’ fhaodadh e tachairt gun tèid an stòr-dàta an sàs ann am modh ath-bheothachaidh (bidh mearachdan ann mar MEARACHD: chan urrainn dha DROP DATABASE a chuir an gnìomh ann an gnìomh leughaidh a-mhàin). Gus a bhith onarach, cha do thuig mi fhathast cò ris a tha seo ceangailte. Tha am fuasgladh mar a leanas (feumaidh tu feitheamh beagan às deidh an àithne a chuir gu bàs):

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

Gu dearbh, tha e comasach cùl-taic sònraichte a thoirt air ais leis an ainm. Seo mise a-mhàin Bheir mi seachad ceangal ris an tuairisgeul air an fheart seo anns na sgrìobhainnean. Tha an luchd-leasachaidh a’ comhairleachadh an roghainn seo a chleachdadh le rabhadh agus mìnich carson. Is urrainn dhomh a chur ris uam fhìn gun do chleachd mi e. Ma dh’ fheumas tu, dèan cinnteach às deidh faighinn seachad air an stòr-dàta a-mach à modh ath-bheothachaidh (tagh pg_is_in_recovery () bu chòir “f”) a nochdadh agus, gun fhios nach dèan thu, cùl-taic slàn às deidh faighinn seachad air.

3. Tòisich am brabhsair:

sudo pg_ctlcluster 11 main start

Às deidh dhuinn an cùl-taic ath-nuadhachadh, feumaidh sinn dàrna cùl-taic a dhèanamh:

Stòr-tasgaidh (cleachdaiche pgbackrest):

sudo pgbackrest --stanza=main backup

Sin e. Gu crìch, bu mhath leam a chuir nad chuimhne nach eil mi idir a’ feuchainn ri leigeil orm gur e àrd-dba a th’ annam agus gun cleachd mi na sgòthan aig a’ char as lugha. An-dràsta, tha mi fhìn a’ tòiseachadh a’ sgrùdadh diofar chuspairean leithid cùl-taic, ath-riochdachadh, sgrùdadh, msaa. agus bidh mi a’ sgrìobhadh aithisgean beaga mu na toraidhean gus tabhartas beag a dhèanamh don choimhearsnachd agus duilleagan meallta beaga fhàgail dhomh fhìn.

Anns na h-artaigilean a leanas feuchaidh mi ri bruidhinn mu fheartan a bharrachd - faighinn air ais dàta gu cruinneachadh glan, crioptachadh cùl-taic agus foillseachadh gu S3, cùl-taic tro rsync.

Source: www.habr.com

Cuir beachd ann