ʻO nā kākoʻo postgresql hoʻonui me ka pgbackrest - he papa no kahi ʻōpio hakakā mai ka mea hoʻomohala

Hoʻolele

He mea hoʻomohala wau. Kākau wau i ke code a launa pū me ka waihona ma ke ʻano he mea hoʻohana. ʻAʻole wau e hoʻohālike i ka luna hoʻonohonoho, ʻoi aku ka liʻiliʻi o ka dba. Akā…

Ua pono iaʻu e hoʻonohonoho i kahi waihona o ka waihona postgresql. ʻAʻohe ao - e hoʻohana wale iā SSH a e hōʻoia i ka holo ʻana o nā mea āpau me ka ʻole e noi kālā. He aha kā mākou e hana ai ma ia mau hihia? Pololei, pana mākou i ka pgdump i loko o ka cron, hoʻihoʻi i nā mea a pau i ka waihona i kēlā me kēia lā, a inā nalowale mākou, hoʻouna mākou i kēia waihona ma kahi mamao.

ʻO kēia manawa ka paʻakikī e like me nā hoʻolālā, ua manaʻo ʻia e ulu ka waihona ma kahi o +- 100 MB i kēlā me kēia lā. ʻOiaʻiʻo, ma hope o ʻelua mau pule e nalowale ka makemake e hoʻihoʻi i nā mea āpau me pgdump. ʻO kēia kahi e hoʻopakele ai nā waihona hoʻonui.

hoihoi? Welina mai i ka popoki.

ʻO ka Incremental Backup kahi ʻano o ka hoʻihoʻi ʻana inā ʻaʻole kope ʻia nā faila kumu a pau, akā nā mea hou a me nā mea i hoʻololi ʻia mai ka wā i hana ʻia ai ke kope mua.

E like me kekahi mea hoʻomohala i makemake ʻole (i kēlā manawa) e hoʻomaopopo i ka paʻakikī o nā postgres, makemake wau e ʻimi i ka pihi ʻōmaʻomaʻo. ʻAe, ʻike ʻoe, e like me AWS, DigitalOcean: ua paʻi ʻoe i hoʻokahi pihi - loaʻa iā ʻoe ka hoʻopiʻi ʻana, paʻi ʻoe i ka lua - hoʻonohonoho ʻoe i nā backup, ʻo ke kolu - ua ʻōwili ʻoe i nā mea āpau i nā hola ʻelua. ʻAʻole i loaʻa iaʻu kahi pihi a i ʻole kahi mea hana GUI nani. Inā ʻike ʻoe i hoʻokahi (free a cheap paha), e kākau e pili ana i ia mea ma nā ʻōlelo.

Ma hope o ka googling ua loaʻa iaʻu nā mea hana ʻelua pgbarman и pgbackrest. ʻAʻole wau i kūleʻa me ka mea mua (nā palapala liʻiliʻi loa, ua hoʻāʻo wau e noʻonoʻo i nā mea āpau e like me nā manual kahiko), akā me ka lua o ka palapala i hoʻololi ʻia i ka par, akā ʻaʻole me ka hemahema. No ka maʻalahi o ka hana a ka poʻe e kū nei i kahi hana like, ua kākau ʻia kēia ʻatikala.

Ma hope o ka heluhelu ʻana i kēia ʻatikala, e aʻo ʻoe pehea e hana ai i nā backup incremental, mālama iā lākou i kahi kikowaena mamao (repository me nā backup) a hoʻihoʻi iā lākou i ka wā o ka nalowale o ka ʻikepili a i ʻole nā ​​pilikia ʻē aʻe ma ka kikowaena nui.

ʻO ka hoʻomākaukauʻana

No ka hana hou i ka manual e pono ʻoe i ʻelua VPS. ʻO ka mua ka waiho ʻana (ka waihona kahi e mālama ʻia ai nā backup), a ʻo ka lua, ʻoiaʻiʻo, ʻo ka server ponoʻī me nā postgres (i koʻu hihia, version 11 o postgres).

Manaʻo ʻia aia ma ka server me nā postgres he aʻa kāu, sudo mea hoʻohana, postgres mea hoʻohana a me nā postgres ponoʻī ua hoʻokomo ʻia (ua hana ʻia ka mea hoʻohana postgres i ka wā e hoʻokomo ai i ka postgresql), a ma ka waihona waihona aia ke kumu a me ka mea hoʻohana sudo (i ka manual. e hoʻohana ʻia ka inoa mea hoʻohana pgbackrest) .

No ka liʻiliʻi o nā pilikia i ka hana hou ʻana i nā ʻōlelo aʻo, kākau wau ma ka italic ma hea, me ka mea hoʻohana a me nā kuleana hea wau i hoʻokō ai i ke kauoha i ke kākau ʻana a me ka nānā ʻana i ka ʻatikala.

Ke kau nei i ka pgbackrest

Waihona (mea hoʻohana pgbackrest):

1. Hoʻoiho i ka waihona mai ka pgbackrest a hoʻoili i kāna mau mea i ka waihona /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. E hoʻouka i nā mea hilinaʻi e pono ai no ka hui ʻana:

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

3. Hoʻohui i ka pgbackrest:

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

4. E kope i ka faila hiki ke hoʻokō i ka papa kuhikuhi /usr/bin:

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

5. Pgbackrest pono perl. E hoʻouka:

sudo apt-get install perl

6. E hana i nā papa kuhikuhi no nā lāʻau, e hāʻawi iā lākou i kekahi mau kuleana:

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. Nānā:

pgbackrest version

Server postgres (mea hoʻohana sudo a kumu paha):

ʻO ke kaʻina o ka hoʻokomo ʻana i ka pgbackrest ma kahi kikowaena me nā postgres e like me ke kaʻina hana ma ka waihona (ʻae, pono e hoʻokomo ʻia ka pgbackrest ma nā kikowaena ʻelua), akā ma ka paukū 6 ka lua a me ke kauoha hope:

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

pani me:

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

Hoʻonohonoho i ka pilina ma waena o nā kikowaena ma o ka SSH password ʻole

I mea e hana pono ai ka pgbackrest, pono e hoʻonohonoho i ka pilina ma waena o ka server postgres a me ka waihona me ka hoʻohana ʻana i ka faila kī.

Waihona (mea hoʻohana pgbackrest):

E hana i hui kī:

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

E hoʻomaikaʻi mai! Holo mākou i nā kauoha i luna me ka ʻole sudo.

Server postgres (mea hoʻohana sudo a kumu paha):

E hana i hui kī:

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

Waihona (sudo mea hoʻohana):

E kope i ke kī lehulehu o ka server postgres i ke kikowaena waihona:

(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

Ma kēia ʻanuʻu e nīnau ʻia ʻoe no ka ʻōlelo huna no ka mea hoʻohana kumu. Pono ʻoe e hoʻokomo i ka ʻōlelo huna o ka mea hoʻohana kumu o ka server postgres!

Ke kikowaena Postgres (mea hoʻohana sudo):

E kope i ka waihona kī lehulehu i ka kikowaena me nā 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

Ma kēia ʻanuʻu e nīnau ʻia ʻoe no ka ʻōlelo huna no ka mea hoʻohana kumu. Pono ʻoe e hoʻokomo pololei i ka ʻōlelo huna o ka mea hoʻohana kumu o ka waihona!

E nānā mākou:

Waihona (mea hoʻohana kumu, no ka maʻemaʻe o ka hoʻokolohua):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Postgres server (mea hoʻohana kumu, no ka maʻemaʻe o ka hoʻokolohua):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Hoʻomaopopo mākou e loaʻa iā mākou ke komo me ka pilikia ʻole.

Hoʻonohonoho i kahi kikowaena postgres

Server postgres (mea hoʻohana sudo a kumu paha):

1. E ʻae kākou i ke kīkēkē ʻana i ke kikowaena postgres mai nā IP waho. No ka hana ʻana i kēia, hoʻoponopono i ka faila postgresql.conf (aia i loko o ka /etc/postgresql/11/main folder), e hoʻohui i ka laina iā ia:

listen_addresses = '*'

Inā loaʻa kēia laina, wehe ʻole a hoʻonohonoho i ka waiwai hoʻohālikelike ʻo '*'.

Ma ka waihona pg_hba.conf (aia ma ka waihona /etc/postgresql/11/main) e hoʻohui i kēia mau laina:

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

kahi:

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

2. E hana kāua i nā hoʻonohonoho pono i loko postgresql.conf (aia ma ka waihona /etc/postgresql/11/main) no ka pgbackrest e hana:

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

3. E hana kāua i nā hoʻonohonoho pono i ka faila hoʻonohonoho pgbackrest (/etc/pgbackrest/pgbackrest.conf):

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

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

4. Hoʻouka hou i ka postgresql:

sudo service postgresql restart

Hoʻonohonoho i kahi kikowaena waihona

Waihona (mea hoʻohana pgbackrest):

E hana i nā hoʻonohonoho pono i ka faila hoʻonohonoho 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

Ke hana ʻana i kahi waihona

Waihona (mea hoʻohana pgbackrest):

E hana i kahi waihona hou no ka hui ka papa kuhikuhiE:

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

nana

Server postgres (mea hoʻohana sudo a kumu paha):

Nānā mākou i ka server postgres:

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

Waihona (mea hoʻohana pgbackrest):

Nānā mākou i ka waihona waihona:

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

Hoʻomaopopo mākou i ka hopena i ʻike mākou i ka laina "check command end: hoʻopau kūleʻa".

luhi? E neʻe kākou i ka ʻāpana hoihoi loa.

Ke hana ʻana i kahi waihona

Waihona (mea hoʻohana pgbackrest):

1. Hana i kahi waihona:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. E hōʻoia ua hana ʻia kahi waihona:

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

E hana ʻo Pgbackrest i ka waihona piha mua. Inā makemake ʻoe, hiki iā ʻoe ke holo hou i ke kauoha hoʻihoʻi a e hōʻoia i ka hana ʻana o ka ʻōnaehana i kahi waihona hoʻonui.

Inā makemake ʻoe e hana hou i kahi hoʻihoʻi piha, a laila e kuhikuhi i kahi hae hou:

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

Inā makemake ʻoe i ka huahana console kikoʻī, a laila e kuhikuhi pū:

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

Hoʻihoʻi hou i kahi waihona

Server postgres (mea hoʻohana sudo a kumu paha):

1. Hoʻopau i ka pūʻulu holo:

sudo pg_ctlcluster 11 main stop

2. Hoʻihoʻi ʻia mai ka waihona:

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

No ka hoʻihoʻi ʻana i ka waihona i ka mokuʻāina o ka hope FULL backup, e hoʻohana i ke kauoha me ka ʻole e kuhikuhi ana i ka recovery_target:

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

Mea nui! Ma hope o ka hoʻihoʻi ʻana, paʻa paha ka waihona i ke ʻano hoʻihoʻi (e loaʻa nā hewa e like me ERROR: ʻaʻole hiki ke hoʻokō i ka DROP DATABASE ma kahi kālepa heluhelu wale nō). ʻO kaʻoiaʻiʻo, ʻaʻole wau i maopopo i ke ʻano o kēia pili. Penei ka hopena (pono ʻoe e kali iki ma hope o ka hoʻokō ʻia ʻana o ke kauoha):

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

ʻO kaʻoiaʻiʻo, hiki ke hoʻihoʻi i kahi waihona kikoʻī ma kona inoa. Eia wau wale nō E hāʻawi wau i kahi loulou i ka wehewehe ʻana o kēia hiʻohiʻona ma ka palapala. Manaʻo nā mea hoʻomohala e hoʻohana i kēia koho me ka akahele a wehewehe i ke kumu. Hiki iaʻu ke hoʻohui mai iaʻu iho ua hoʻohana wau ia. Inā pono ʻoe, e hōʻoia ma hope o ka hoʻihoʻi ʻana i ka ʻikepili e puka i ke ʻano hoʻihoʻi (koho i ka pg_is_in_recovery() e hōʻike i ka "f") a, inā wale nō, e hana i kahi hoʻihoʻi piha ma hope o ka hoʻihoʻi ʻana.

3. E hoʻomaka i ka pūʻulu:

sudo pg_ctlcluster 11 main start

Ma hope o ka hoʻihoʻi ʻana i ka waihona, pono mākou e hana i kahi kope lua:

Waihona (mea hoʻohana pgbackrest):

sudo pgbackrest --stanza=main backup

ʻo ia wale nō. I ka hopena, makemake wau e hoʻomanaʻo iā ʻoe ʻaʻole wau e hoʻāʻo e hoʻohālike i ke ʻano he dba kiʻekiʻe a e hoʻohana i nā ao i kahi manawa liʻiliʻi. I kēia manawa, hoʻomaka wau e aʻo i nā kumuhana like ʻole e like me ka backup, replication, monitoring, etc. a kākau wau i nā hōʻike liʻiliʻi e pili ana i nā hopena i mea e hāʻawi liʻiliʻi ai i ke kaiāulu a waiho i nā pepa hoʻopunipuni liʻiliʻi noʻu iho.

Ma nā ʻatikala aʻe e hoʻāʻo wau e kamaʻilio e pili ana i nā hiʻohiʻona hou - ka hoʻihoʻi ʻana i ka ʻikepili i kahi puʻupuʻu maʻemaʻe, ka hoʻopili ʻana i nā backup a me ka paʻi ʻana iā S3, backups ma rsync.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka