Ko te taapiri i nga taapiri postgresql me te pgbackrest - he akoranga mo te rangatahi toa mai i te kaiwhakawhanake

Whakakahoretanga

He kaiwhakawhanake ahau. Ka tuhi ahau i te waehere me te taunekeneke ki te papaarangi hei kaiwhakamahi anake. Kaore au e kii he kaiwhakahaere punaha, he iti ake te dba. Engari…

I tupu i hiahia ahau ki te whakarite i tetahi taapiri o te putunga raraunga postgresql. Kaore he kapua - whakamahia noa te SSH me te whakarite kia pai nga mea katoa me te kore tono moni. He aha ta tatou mahi i roto i enei keehi? Ka tika, ka panaia e matou te pgdump ki roto i te cron, ka penapena nga mea katoa ki te puranga ia ra, a ki te ngaro rawa atu, ka tukuna atu tenei puranga ki tawhiti.

I tenei wa ko te uaua ko te mea i runga i nga mahere, ko te tikanga ka tipu te paataka korero ma te +- 100 MB ia ra. Ae ra, i muri i nga wiki e rua ka ngaro te hiahia ki te whakahoki i nga mea katoa me te pgdump. Koinei te waahi ka tae mai nga taapiri taapiri ki te whakaora.

He mea whakamere? Nau mai ki te ngeru.

Ko te taapiri taapiri he momo taapiri kaore i te kapehia nga konae puna katoa, engari ko nga mea hou me nga mea kua rereke mai i te wa i hangaia ai te kape o mua.

Ka rite ki tetahi kaiwhakawhanake kaore i tino pai (i tera wa) ki te mohio ki nga uaua o nga pou, i hiahia ahau ki te rapu i te paatene matomato. Ana, kei te mohio koe, penei i roto i te AWS, DigitalOcean: i pehi koe i te paatene kotahi - ka whiwhi koe i te tukurua, ka pehi koe i te tuarua - ka whakarite koe i nga taapiri, te tuatoru - ka hurihia e koe nga mea katoa mo etahi haora. Kaore au i kitea he paatene, he taputapu GUI ataahua ranei. Mena ka mohio koe ki tetahi (kore utu, utu iti ranei), tuhia ki roto i nga korero.

I muri i te rapu rapu ka kitea e au nga taputapu e rua pgbarman и pgbackrest. Kaore au i angitu me te tuatahi (he iti rawa nga tuhinga, i whakamatau ahau ki te tarai i nga mea katoa e ai ki nga pukapuka tawhito), engari me te tuarua ka puta nga tuhinga ki runga ki te par, engari kaore he hapa. Hei whakangawari i nga mahi a te hunga e pa ana ki tetahi mahi penei, i tuhia tenei tuhinga.

I muri i te panui i tenei tuhinga, ka ako koe me pehea te hanga taapiri taapiri, tiakina ki tetahi tuumau mamao (putanga me nga taapiri) ka whakahoki mai mena ka ngaro nga raraunga, etahi atu raru ranei i te tūmau matua.

Whakangungu

Hei whakaputa i te pukapuka ka hiahia koe kia rua VPS. Ko te tuatahi ko te rokiroki (te putunga e penapena ai nga taapiri), me te tuarua, me te pono, ko te kaimau tonu me nga pou (i taku keehi, ko te putanga 11 o nga postgres).

E kiia ana kei runga i te kaimau me nga postgres kei a koe te pakiaka, te kaiwhakamahi sudo, te kaiwhakamahi postgres me te postgres ake ka whakauruhia (ka hangaia te kaiwhakamahi postgres i te wa e whakauru ana i te postgresql), a kei runga i te tuunga putunga he pakiaka me te kaiwhakamahi sudo (i te pukapuka pukapuka. ka whakamahia te ingoa kaiwhakamahi pgbackrest).

Kia iti ake ai o raru i te wa e whakaputa ana i nga tohutohu, ka tuhia e ahau ki roto i te titaha kei hea, he aha te kaiwhakamahi me nga mana i mahia e au te whakahau i a koe e tuhi ana me te tirotiro i te tuhinga.

Kei te whakauru i te pgbackrest

Putunga (kaiwhakamahi pgbackrest):

1. Tikiake i te pūranga mai i te pgbackrest ka whakawhiti i ona ihirangi ki te kōpaki /hanga:

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

2. Tāutahia ngā herenga e tika ana mō te hui:

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

3. Huinga pgbackrest:

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

4. Tāruatia te kōnae kawe ki te whaiaronga /usr/bin:

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

5. Pgbackrest me perl. Tāuta:

sudo apt-get install perl

6. Waihangahia he raarangi mo nga raarangi, hoatu etahi mana:

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

pgbackrest version

Tūmau Postgres (kaiwhakamahi sudo, pakiaka ranei):

Ko te tukanga o te whakauru i te pgbackrest ki runga i te tūmau me nga poupou he rite ki te tukanga whakauru i runga i te putunga (ae, me whakauru te pgbackrest ki nga tūmau e rua), engari i te 6 o nga rarangi ko te tuarua me te whakahau whakamutunga:

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

whakakapi ki:

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

Te whakarite i te taunekeneke i waenga i nga kaitoro ma te SSH kore kupuhipa

Kia tika ai te mahi a pgbackrest, he mea tika kia whirihorahia te taunekeneke i waenga i te tuumau postgres me te putunga ma te whakamahi i te konae matua.

Putunga (kaiwhakamahi pgbackrest):

Waihangahia he takirua matua:

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

Tūpato Ka whakahaerehia e matou nga whakahau i runga ake nei me te kore sudo.

Tūmau Postgres (kaiwhakamahi sudo, pakiaka ranei):

Waihangahia he takirua matua:

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

Pupuri (kaiwhakamahi sudo):

Tāruatia te kī tūmatanui o te tūmau postgres ki te tūmau putunga:

(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

I tenei taahiraa ka uihia koe mo te kupuhipa mo te kaiwhakamahi pakiaka. Me whakauru koe i te kupuhipa o te kaiwhakamahi pakiaka o te poutūmau postgres!

Tūmau Postgres (kaiwhakamahi sudo):

Tāruatia te kī tūmatanui putunga ki te tūmau me ngā pou:

(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

I tenei taahiraa ka uihia koe mo te kupuhipa mo te kaiwhakamahi pakiaka. Me whakauru tika koe i te kupuhipa o te kaiwhakamahi pakiaka o te putunga!

Ka tirohia e matou:

Pupuri (kaiwhakamahi pakiaka, mo te ma o te whakamatautau):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Postgres server (kaiwhakamahi pakiaka, mo te ma o te whakamatautau):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Ka whakarite maatau ka uru atu kaore he raru.

Te whakatu i tetahi tūmau postgres

Tūmau Postgres (kaiwhakamahi sudo, pakiaka ranei):

1. Tukua kia patoto ki te tūmau postgres mai i nga IP o waho. Hei mahi i tenei, whakatikahia te konae postgresql.conf (kei roto i te /etc/postgresql/11/kōpaki matua), tāpirihia te raina ki reira:

listen_addresses = '*'

Mēnā kei te tīariari kē taua rārangi, wetewete te kōrero, tautuhia rānei te uara tawhā hei '*'.

I roto i te kōnae pg_hba.conf (kei roto ano i te kōpaki /etc/postgresql/11/main) tāpirihia ngā rārangi e whai ake nei:

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

kei hea:

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

2. Kia hanga a te tautuhinga e tika ana i roto i postgresql.conf (kei roto i te kōpaki /etc/postgresql/11/main) mo te pgbackrest ki te mahi:

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

3. Me hanga nga tautuhinga e tika ana ki te konae whirihoranga pgbackrest (/etc/pgbackrest/pgbackrest.conf):

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

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

4. Utaina ano postgresql:

sudo service postgresql restart

Te whakatu i tetahi tūmau putunga

Putunga (kaiwhakamahi pgbackrest):

Me hanga e tatou nga tautuhinga e tika ana i roto i te konae whirihoranga 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 # Параметр, указывающий сколько хранить полных бэкапов. Т.е. если у вас есть два полных бэкапа и вы создаете третий, то самый старый бэкап будет удален. Можно произносить как "хранить не более двух бэкапов" - по аналогии с ротациями логов. Спасибо @Aytuar за исправление ошибки.
start-fast=y # Начинает резервное копирование немедленно, прочитать про этот параметр можно тут https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving

Te hanga putunga

Putunga (kaiwhakamahi pgbackrest):

Waihangahia he rokiroki hou mo te tautau matua:

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

tirohanga

Tūmau Postgres (kaiwhakamahi sudo, pakiaka ranei):

Ka tirohia e matou i runga i te tūmau postgres:

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

Putunga (kaiwhakamahi pgbackrest):

Ka tirohia e matou te tūmau putunga:

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

Ka whakarite maatau kei roto i te putanga ka kite tatou i te rarangi "tirohia te mutunga o te whakahau: kua oti pai".

Устали? Переходим к самому интересному.

Te hanga tārua

Putunga (kaiwhakamahi pgbackrest):

1. Mahi i te tārua:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Me mohio kua hanga he taapiri:

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

Ka hanga e Pgbackrest te taapiri katoa tuatahi. Ki te hiahia koe, ka taea e koe te whakahaere ano i te whakahau taapiri me te whakarite ka hangaia e te punaha he taapiri taapiri.

Mena kei te pirangi koe ki te hanga i te taapiri katoa, tohua he haki taapiri:

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

Mena kei te pirangi koe ki te whakaputanga whakamaarama taipitopito, tohua ano:

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

Te whakaora i te tārua

Tūmau Postgres (kaiwhakamahi sudo, pakiaka ranei):

1. Whakamutua te kahui rere:

sudo pg_ctlcluster 11 main stop

2. Whakaora mai i te tārua:

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

Hei whakaora i te papaaarangi ki te ahua o te taapiri FULL whakamutunga, whakamahia te whakahau me te kore e tohu recovery_target:

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

He mea nui! I muri i te whakaoranga, ka mau pea te paataka raraunga ki te aratau whakaora (ka puta nga hapa penei i te HAPA: kaore e taea te whakahaere i te DROP DATABASE i roto i te tauwhitinga panui-anake). Kia pono, kare ano au kia mohio he aha te hononga o tenei. Ko te otinga e whai ake nei (me tatari koe i muri i te mahi o te whakahau):

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

Inaa, ka taea te whakahoki mai i tetahi taapiri motuhake ma tona ingoa. Tenei ahau anake Ka hoatu e ahau he hononga ki te whakaahuatanga o tenei ahuatanga i roto i nga tuhinga. Ka tohutohu nga kaihanga ki te whakamahi i tenei waahanga me te tupato me te whakamarama he aha. Ka taea e au te taapiri mai i a au ano i whakamahia e au. Mena ka tino hiahia koe, kia mohio kei muri i te whakaoranga ka puta te papaaarangi ki te aratau whakaora (tīpakohia te pg_is_in_recovery() me whakaatu te “f”) a, i te keehi, hangahia he taapiri katoa i muri i te whakaoranga.

3. Tīmatahia te kāhui:

sudo pg_ctlcluster 11 main start

I muri i te whakahokinga o te taapiri, me mahi he taapiri tuarua:

Putunga (kaiwhakamahi pgbackrest):

sudo pgbackrest --stanza=main backup

Heoi ano. Hei whakamutunga, e hiahia ana ahau ki te whakamahara ki a koe kaore au e ngana ki te kii he dba pakeke ahau ka whakamahi i nga kapua i te wa iti. I tenei wa, kei te timata ahau ki te ako i nga momo kaupapa penei i te taapiri, te tukurua, te tirotiro, aha atu. a ka tuhia e au etahi purongo iti mo nga hua ka taea e au te koha iti ki te hapori me te waiho i nga pepa tinihanga iti maku.

I roto i nga tuhinga e whai ake nei ka ngana ahau ki te korero mo etahi atu waahanga - te whakaora raraunga ki te kahui ma, te whakamunatanga o nga taapiri me te whakaputa ki te S3, nga taapiri ma te rsync.

Source: will.com

Tāpiri i te kōrero