Ċaħda
Jien żviluppatur. Nikteb kodiċi u jinteraġixxi mad-database biss bħala utent. Bl-ebda mod ma nippretendu li nkun amministratur tas-sistema, u wisq inqas dba. Imma...
Ġara li kelli bżonn norganizza backup tad-database postgresql. Ebda sħab - uża biss SSH u kun żgur li kollox jaħdem mingħajr ma titlob flus. X'nagħmlu f'każijiet bħal dawn? Dak id-dritt, aħna nimbottaw pgdump fis-cron, tagħmel backup ta 'kollox fl-arkivju kuljum, u jekk nintilfu kompletament, nibagħtu dan l-arkivju x'imkien 'il bogħod.
Din id-darba d-diffikultà kienet li skont il-pjanijiet, id-database suppost kellha tikber b'madwar +- 100 MB kuljum. Naturalment, wara ftit ġimgħat ix-xewqa li tagħmel backup ta 'kollox ma' pgdump se tisparixxi. Dan huwa fejn backups inkrementali jiġu għas-salvataġġ.
Interessanti? Merħba għall-qattus.
Il-backup inkrementali huwa tip ta 'backup meta mhux il-fajls tas-sors kollha jiġu kkupjati, iżda dawk ġodda biss u dawk mibdula mill-ħolqien tal-kopja preċedenti.
Bħal kull żviluppatur li ma kienx ASSOLUTAMENT lest (dak iż-żmien) li jifhem l-intricacies tal-postgres, ridt insib il-buttuna ħadra. Tajjeb, taf, bħal f'AWS, DigitalOcean: għafast buttuna waħda - għafast replikazzjoni, għafast it-tieni - waqqaft backups, it-tielet - irromblajt kollox lura ftit sigħat. Ma sibtx buttuna jew għodda GUI sabiħa. Jekk taf waħda (b'xejn jew irħisa), ikteb dwarha fil-kummenti.
Wara google sibt żewġ għodod pgbarman и pgbackrest. Sempliċement ma rnexxilix bl-ewwel waħda (dokumentazzjoni skarsa ħafna, ippruvajt nifhem kollox skont manwali qodma), iżda bit-tieni waħda d-dokumentazzjoni rriżultat li kienet sa l-istess, iżda mhux mingħajr difetti. Biex tissimplifika l-ħidma ta 'dawk li huma ffaċċjati b'kompitu simili, dan l-artikolu inkiteb.
Wara li taqra dan l-artikolu, titgħallem kif tagħmel backups inkrementali, issalvahom f'server remot (repożitorju b'backups) u tirrestawrahom f'każ ta 'telf ta' data jew problemi oħra fuq is-server prinċipali.
Taħriġ
Biex tirriproduċi l-manwal ser ikollok bżonn żewġ VPS. L-ewwel se jkun il-ħażna (ir-repożitorju li fuqu se jinħażnu l-backups), u t-tieni, fil-fatt, is-server innifsu ma 'postgres (fil-każ tiegħi, verżjoni 11 ta' postgres).
Huwa preżunt li fuq is-server bil-postgres għandek root, sudo user, postgres user u postgres innifsu huwa installat (l-utent postgres jinħoloq awtomatikament meta jinstalla postgresql), u fuq is-server tar-repożitorju hemm root u sudo user (fil-manwal se jintuża l-isem tal-utent pgbackrest).
Sabiex ikollok inqas problemi meta tirriproduċi l-istruzzjonijiet, nikteb bil-korsiv fejn, b'liema utent u b'liema drittijiet wettaqt il-kmand waqt li tikteb u tiċċekkja l-artiklu.
Installazzjoni ta' pgbackrest
Repożitorju (utent pgbackrest):
1. Niżżel l-arkivju minn pgbackrest u ttrasferixxi l-kontenut tiegħu fil-folder /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. Installa d-dipendenzi meħtieġa għall-assemblaġġ:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev
3. Armar ta 'pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src
4. Ikkopja l-fajl eżekutibbli fid-direttorju /usr/bin:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
5. Pgbackrest jeħtieġ perl. Installa:
sudo apt-get install perl
6. Oħloq direttorji għal zkuk, agħtihom ċerti drittijiet:
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. Iċċekkja:
pgbackrest version
Server Postgres (utent sudo jew root):
Il-proċess ta 'installazzjoni ta' pgbackrest fuq server b'postgres huwa simili għall-proċess ta 'installazzjoni fuq ir-repożitorju (iva, pgbackrest għandu jkun installat fuq iż-żewġ servers), iżda fis-6 paragrafu it-tieni u l-aħħar kmandi:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
ibdel bi:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
Twaqqif ta' interazzjoni bejn servers permezz ta' SSH mingħajr password
Sabiex pgbackrest jaħdem b'mod korrett, huwa meħtieġ li tiġi kkonfigurata l-interazzjoni bejn is-server postgres u r-repożitorju billi tuża l-fajl ewlieni.
Repożitorju (utent pgbackrest):
Oħloq par ewlieni:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""
Attenzjoni! Aħna nħaddmu l-kmandi ta 'hawn fuq mingħajr sudo.
Server Postgres (utent sudo jew root):
Oħloq par ewlieni:
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 ""
Repożitorju (utent sudo):
Ikkopja ċ-ċavetta pubblika tas-server postgres fis-server tar-repożitorju:
(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
F'dan il-pass inti tintalab il-password għall-utent root. Għandek bżonn iddaħħal il-password tal-utent tal-għeruq tas-server postgres!
Server Postgres (utent sudo):
Ikkopja ċ-ċavetta pubblika tar-repożitorju fis-server b'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
F'dan il-pass inti tintalab il-password għall-utent root. Ikollok bżonn iddaħħal eżattament il-password tal-utent għerq tar-repożitorju!
Aħna niċċekkjaw:
Repożitorju (utent għeruq, għall-purità tal-esperiment):
sudo -u pgbackrest ssh postgres@<postgres_server_ip>
Server Postgres (utent għeruq, għall-purità tal-esperiment):
sudo -u postgres ssh pgbackrest@<repository_server_ip>
Aħna niżguraw li jkollna aċċess mingħajr problemi.
Twaqqif ta' server postgres
Server Postgres (utent sudo jew root):
1. Ejja nħallu jħabbtu fuq is-server tal-postgres minn IPs esterni. Biex tagħmel dan, editja l-fajl postgresql.conf (li tinsab fil-folder /etc/postgresql/11/main), żżid il-linja miegħu:
listen_addresses = '*'
Jekk linja bħal din diġà teżisti, jew neħħi l-kumment jew issettja l-valur tal-parametru bħala '*'.
Fil-fajl pg_hba.conf (li tinsab ukoll fil-folder /etc/postgresql/11/main) żid il-linji li ġejjin:
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5
fejn:
hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля
2. Ejja nagħmlu s-settings meħtieġa fi postgresql.conf (huwa fil-folder /etc/postgresql/11/main) biex pgbackrest jaħdem:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica
3. Ejja nagħmlu s-settings meħtieġa fil-fajl tal-konfigurazzjoni pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=<repository_server_ip>
4. Reload postgresql:
sudo service postgresql restart
Twaqqif ta' server ta' repożitorju
Repożitorju (utent pgbackrest):
Ejja nagħmlu s-settings meħtieġa fil-fajl tal-konfigurazzjoni 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
Ħolqien ta' repożitorju
Repożitorju (utent pgbackrest):
Oħloq ħażna ġdida għall-cluster prinċipali:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
Проверка
Server Postgres (utent sudo jew root):
Aħna niċċekkjaw fuq is-server tal-postgres:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
Repożitorju (utent pgbackrest):
Aħna niċċekkjaw fuq is-server tar-repożitorju:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
Aħna niżguraw li fl-output naraw il-linja "iċċekkja t-tmiem tal-kmand: komplut b'suċċess".
Għajjien? Ejja ngħaddu għall-aktar parti interessanti.
Nagħmlu backup
Repożitorju (utent pgbackrest):
1. Agħmel backup:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. Kun żgur li tkun inħoloq backup:
ls /var/lib/pgbackrest/backup/main/
Pgbackrest se joħloq l-ewwel backup sħiħ. Jekk tixtieq, tista 'tħaddem il-kmand tal-backup mill-ġdid u kun żgur li s-sistema toħloq backup inkrementali.
Jekk trid terġa' tagħmel backup sħiħ, imbagħad speċifika bandiera addizzjonali:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backup
Jekk trid output tal-console dettaljati, imbagħad speċifika wkoll:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
Ir-restawr ta' backup
Server Postgres (utent sudo jew root):
1. Waqqaf il-cluster running:
sudo pg_ctlcluster 11 main stop
2. Ir-restawr mill-backup:
sudo -u postgres pgbackrest --stanza=main --delta restore
3. Ibda l-cluster:
sudo pg_ctlcluster 11 main start
Wara li nirrestawraw il-backup, irridu nwettqu t-tieni backup:
Repożitorju (utent pgbackrest):
sudo pgbackrest --stanza=main backup
Dak kollox. Bħala konklużjoni, nixtieq infakkarkom li bl-ebda mod qed nipprova nippretendu li jien dba anzjan u se nuża s-sħab mal-iċken opportunità. Bħalissa, jien stess qed nibda nistudja diversi suġġetti bħal backup, replikazzjoni, monitoraġġ, eċċ. u nikteb rapporti żgħar dwar ir-riżultati sabiex nagħti kontribut żgħir lill-komunità u nħalli cheat sheets żgħar għalija nnifsi.
Fl-artikoli li ġejjin ser nipprova nitkellem dwar karatteristiċi addizzjonali - irkupru tad-data għal cluster nadif, encryption ta 'backups u pubblikazzjoni għal S3, backups permezz ta' rsync.
Sors: www.habr.com