Fyrirvari
Ég er verktaki. Ég skrifa kóða og hafa samskipti við gagnagrunninn eingöngu sem notandi. Á engan hátt þykist ég vera kerfisstjóri og því síður dba. En…
Það gerðist svo að ég þurfti að skipuleggja öryggisafrit af postgresql gagnagrunninum. Engin ský - notaðu bara SSH og vertu viss um að allt virki án þess að biðja um peninga. Hvað gerum við í slíkum tilfellum? Það er rétt, við ýtum pgdump inn í cron, afritum allt í skjalasafnið á hverjum degi, og ef við erum alveg týnd sendum við þetta skjalasafn eitthvað langt í burtu.
Að þessu sinni var erfiðleikinn sá að samkvæmt áætlunum átti gagnagrunnurinn að stækka um +- 100 MB á dag. Auðvitað, eftir nokkrar vikur mun löngunin til að taka öryggisafrit af öllu með pgdump hverfa. Þetta er þar sem stigvaxandi öryggisafrit koma til bjargar.
Áhugavert? Velkomin í köttinn.
Stigvaxandi öryggisafrit er tegund öryggisafrits þegar ekki eru allar frumskrár afritaðar, heldur aðeins nýjar og þær sem hafa verið breytt frá því að fyrra afritið var búið til.
Eins og allir verktaki sem var ALVEG ófús (á þeim tíma) að skilja ranghala postgres, vildi ég finna græna hnappinn. Jæja, þú veist, eins og í AWS, DigitalOcean: þú ýttir á einn hnapp - þú fékkst afritun, þú ýttir á annan - þú settir upp öryggisafrit, þann þriðja - þú færðir allt aftur í nokkrar klukkustundir. Ég fann ekki hnapp eða fallegt GUI tól. Ef þú þekkir einn (ókeypis eða ódýr), skrifaðu um það í athugasemdunum.
Eftir að hafa googlað fann ég tvö verkfæri pgbarman и pg bakstoð. Mér tókst einfaldlega ekki með þeirri fyrri (mjög dreifð skjöl, ég reyndi að átta mig á öllu samkvæmt gömlum handbókum), en með þeirri seinni reyndust skjölin upp á við, en ekki gallalaus. Til að einfalda vinnu þeirra sem standa frammi fyrir svipuðu verkefni var þessi grein skrifuð.
Eftir að hafa lesið þessa grein muntu læra hvernig á að gera stigvaxandi afrit, vista þau á ytri netþjóni (geymsla með afritum) og endurheimta þau ef gagnatap eða önnur vandamál verða á aðalþjóninum.
Þjálfun
Til að endurskapa handbókina þarftu tvo VPS. Sú fyrsta verður geymslan (geymslan sem afritin verða geymd á) og sú seinni, í raun, þjónninn sjálfur með postgres (í mínu tilfelli, útgáfa 11 af postgres).
Gert er ráð fyrir að á þjóninum með postgres sétu með root, sudo user, postgres user og postgres sjálfur er uppsettur (postgres notandinn er búinn til sjálfkrafa þegar postgresql er sett upp), og á repository servernum er root og sudo user (í handbókinni). notandanafnið pgbackrest verður notað).
Svo að þú hafir færri vandamál þegar þú endurgerir leiðbeiningarnar skrifa ég skáletrað hvar, með hvaða notanda og með hvaða réttindum framkvæmdi ég skipunina á meðan þú skrifar og skoðar greinina.
Setja upp pg bakstoð
Geymsla (notandi pgbackrest):
1. Sæktu skjalasafnið úr pgbackrest og fluttu innihald þess í /build möppuna:
sudo mkdir /build
sudo wget -q -O -
https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz |
sudo tar zx -C /build
2. Settu upp ósjálfstæðin sem nauðsynleg eru fyrir samsetningu:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev
3. Að setja saman bakstoð:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src
4. Afritaðu keyrsluskrána í /usr/bin möppuna:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
5. Pgbackrest krefst perl. Setja upp:
sudo apt-get install perl
6. Búðu til möppur fyrir annála, gefðu þeim ákveðin réttindi:
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. Athugaðu:
pgbackrest version
Postgres þjónn (sudo notandi eða rót):
Ferlið við að setja upp pgbackrest á netþjóni með postgres er svipað og uppsetningarferlið á geymslunni (já, pgbackrest verður að vera uppsett á báðum netþjónum), en í 6. mgr. skipar annar og síðastur:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
skipta út fyrir:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
Að setja upp samskipti milli netþjóna í gegnum lykilorðslausan SSH
Til þess að pgbackrest virki rétt er nauðsynlegt að stilla samspilið milli postgres þjónsins og geymslunnar með því að nota lykilskrána.
Geymsla (notandi pgbackrest):
Búðu til lyklapar:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""
Attention! Við keyrum ofangreindar skipanir án sudo.
Postgres þjónn (sudo notandi eða rót):
Búðu til lyklapar:
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 ""
Geymsla (sudo notandi):
Afritaðu opinbera lykil postgres netþjónsins yfir á geymsluþjóninn:
(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
Í þessu skrefi verður þú beðinn um lykilorð fyrir rótarnotandann. Þú þarft að slá inn lykilorð rótarnotanda postgres þjónsins!
Postgres þjónn (sudo notandi):
Afritaðu opinbera geymslulykilinn á netþjóninn með 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
Í þessu skrefi verður þú beðinn um lykilorð fyrir rótarnotandann. Þú þarft að slá inn nákvæmlega lykilorð rótarnotanda geymslunnar!
Við athugum:
Geymsla (rótnotandi, fyrir hreinleika tilraunarinnar):
sudo -u pgbackrest ssh postgres@<postgres_server_ip>
Postgres þjónn (rótnotandi, fyrir hreinleika tilraunarinnar):
sudo -u postgres ssh pgbackrest@<repository_server_ip>
Við tryggjum að við fáum aðgang án vandræða.
Að setja upp postgres netþjón
Postgres þjónn (sudo notandi eða rót):
1. Leyfum að banka á postgres netþjóninn frá ytri IP-tölum. Til að gera þetta skaltu breyta skránni postgresql.conf (staðsett í /etc/postgresql/11/main möppunni), bætir línunni við hana:
listen_addresses = '*'
Ef slík lína er þegar til, annað hvort afskrifa hana eða stilla færibreytugildið sem '*'.
Í skrá pg_hba.conf (einnig staðsett í möppunni /etc/postgresql/11/main) bætið við eftirfarandi línum:
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5
þar sem:
hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля
2. Við skulum gera nauðsynlegar stillingar í postgresql.conf (það er í möppunni /etc/postgresql/11/main) til að pgbakstoð virki:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica
3. Gerum nauðsynlegar stillingar í pgbackrest stillingarskránni (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=<repository_server_ip>
4. Endurhlaða postgresql:
sudo service postgresql restart
Að setja upp geymsluþjón
Geymsla (pgbackrest notandi):
Við skulum gera nauðsynlegar stillingar í stillingarskránni pg bakstoð
(/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ð búa til geymslu
Geymsla (pgbackrest notandi):
Búðu til nýja geymslu fyrir klasann helstu:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
Проверка
Postgres þjónn (sudo notandi eða rót):
Við athugum á postgres þjóninum:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
Geymsla (pgbackrest notandi):
Við athugum á geymsluþjóninum:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
Við tryggjum að í úttakinu sjáum við línuna „athugaðu skipunarlok: lokið með góðum árangri“.
Þreyttur? Við skulum halda áfram að áhugaverðasta hlutanum.
Að gera öryggisafrit
Geymsla (pgbackrest notandi):
1. Framkvæma öryggisafrit:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. Gakktu úr skugga um að öryggisafrit hafi verið búið til:
ls /var/lib/pgbackrest/backup/main/
Pgbackrest mun búa til fyrsta fulla öryggisafritið. Ef þú vilt geturðu keyrt öryggisafritsskipunina aftur og gengið úr skugga um að kerfið búi til stigvaxandi öryggisafrit.
Ef þú vilt taka fullt öryggisafrit aftur, tilgreindu þá viðbótarflag:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backup
Ef þú vilt nákvæma stjórnborðsúttak skaltu einnig tilgreina:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
Endurheimtir öryggisafrit
Postgres þjónn (sudo notandi eða rót):
1. Stöðvaðu hlaupandi klasa:
sudo pg_ctlcluster 11 main stop
2. Endurheimt úr öryggisafriti:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore
Til að endurheimta gagnagrunninn í stöðu síðasta FULLU öryggisafritsins, notaðu skipunina án þess að tilgreina recovery_target:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore
Mikilvægt! Eftir endurheimt getur það gerst að gagnagrunnurinn festist í bataham (það verða villur eins og VILLA: getur ekki keyrt DROP DATABASE í skrifvarin færslu). Satt að segja hef ég ekki enn skilið hvað þetta tengist. Lausnin er sem hér segir (þú þarft að bíða aðeins eftir að skipunin er framkvæmd):
sudo -u postgres psql -c "select pg_wal_replay_resume()"
Í raun er hægt að endurheimta tiltekið öryggisafrit með nafni þess. Hér er ég aðeins
3. Ræstu þyrpinguna:
sudo pg_ctlcluster 11 main start
Eftir að hafa endurheimt öryggisafritið þurfum við að framkvæma annað öryggisafrit:
Geymsla (pgbackrest notandi):
sudo pgbackrest --stanza=main backup
Það er allt og sumt. Að endingu vil ég minna á að ég er á engan hátt að reyna að þykjast vera eldri dba og mun nota skýin við minnsta tækifæri. Eins og er er ég sjálfur að byrja að kynna mér ýmis efni eins og öryggisafrit, afritun, eftirlit o.fl. og ég skrifa litlar skýrslur um niðurstöðurnar til að leggja lítið af mörkum til samfélagsins og skilja eftir lítil svindlblöð fyrir sjálfan mig.
Í eftirfarandi greinum mun ég reyna að tala um viðbótareiginleika - endurheimt gagna í hreinan þyrping, dulkóðun afrita og birting á S3, afrit í gegnum rsync.
Heimild: www.habr.com