pgbackrest සමඟ වර්ධක postgresql උපස්ථ - සංවර්ධකයාගේ තරුණ සටන්කරුවෙකු සඳහා පාඨමාලාවක්

වියාචනය

මම සංවර්ධකයෙක්. මම කේතය ලියන අතර දත්ත සමුදාය සමඟ අන්තර් ක්‍රියා කරන්නේ පරිශීලකයෙකු ලෙස පමණි. කිසිම ආකාරයකින් මම පද්ධති පරිපාලකයෙකු ලෙස පෙනී නොසිටිමි, dba වඩා අඩුය. එහෙත්…

මට postgresql දත්ත ගබඩාවේ උපස්ථයක් සංවිධානය කිරීමට අවශ්‍ය විය. වලාකුළු නැත - SSH භාවිතා කර මුදල් නොඉල්ලමින් සියල්ල ක්‍රියාත්මක වන බවට වග බලා ගන්න. එවැනි අවස්ථාවලදී අප කරන්නේ කුමක්ද? ඒක හරි, අපි pgdump එක cron එකට තල්ලු කරලා, හැමදාම archive එකට හැම දෙයක්ම backup කරලා, සම්පූර්ණයෙන්ම නැති උනොත් අපි මේ archive එක ඈත කොහේ හරි යවනවා.

මෙවර දුෂ්කරතාවය වූයේ සැලසුම් වලට අනුව, දත්ත සමුදාය දිනකට +- 100 MB කින් පමණ වර්ධනය වීමට නියමිතව තිබීමයි. ඇත්ත වශයෙන්ම, සති කිහිපයකට පසු pgdump සමඟ සෑම දෙයක්ම උපස්ථ කිරීමට ඇති ආශාව අතුරුදහන් වනු ඇත. වර්ධක උපස්ථ ගලවා ගැනීමට පැමිණෙන්නේ මෙහිදීය.

රසවත්ද? cat වෙත සාදරයෙන් පිළිගනිමු.

වර්ධක උපස්ථය යනු සියලුම මූලාශ්‍ර ගොනු පිටපත් නොකරන ලද උපස්ථ වර්ගයකි, නමුත් නව ඒවා පමණක් සහ පෙර පිටපත නිර්මාණය කිරීමෙන් පසු වෙනස් වූ ඒවා පමණි.

postgres හි සංකීර්ණතා තේරුම් ගැනීමට (එවකට) කිසිසේත්ම අකමැති වූ ඕනෑම සංවර්ධකයෙකු මෙන්, මට හරිත බොත්තම සොයා ගැනීමට අවශ්‍ය විය. හොඳයි, ඔබ දන්නවා, AWS, DigitalOcean හි මෙන්: ඔබ එක් බොත්තමක් එබුවා - ඔබට අනුකරණයක් ලැබුණා, ඔබ දෙවැන්න එබුවා - ඔබ උපස්ථ සකස් කළා, තුන්වැන්න - ඔබ සියල්ල පැය කිහිපයක් ආපසු පෙරළුවා. මම බොත්තමක් හෝ ලස්සන GUI මෙවලමක් සොයා ගත්තේ නැත. ඔබ එකක් දන්නේ නම් (නොමිලේ හෝ ලාභ), ඒ ගැන අදහස් දැක්වීමේදී ලියන්න.

ගූගල් කර බැලීමෙන් පසු මට මෙවලම් දෙකක් හමු විය pgbarman и pgbackrest. පළමු එක සමඟ මම සරලව සාර්ථක වූයේ නැත (ඉතා විරල ලියකියවිලි, මම පැරණි අත්පොත් වලට අනුව සියල්ල සොයා ගැනීමට උත්සාහ කළෙමි), නමුත් දෙවැන්න සමඟ ප්‍රලේඛනය සමාන විය, නමුත් අඩුපාඩු නොමැතිව නොවේ. සමාන කාර්යයකට මුහුණ දෙන අයගේ කාර්යය සරල කිරීම සඳහා, මෙම ලිපිය ලියා ඇත.

මෙම ලිපිය කියවීමෙන් පසු, වර්ධක උපස්ථ සෑදීම, දුරස්ථ සේවාදායකයකට (උපස්ථ සහිත ගබඩාව) සුරකින්න සහ දත්ත නැතිවීම හෝ ප්‍රධාන සේවාදායකයේ වෙනත් ගැටළු ඇති විට ඒවා ප්‍රතිසාධනය කරන්නේ කෙසේදැයි ඔබ ඉගෙන ගනු ඇත.

සකස් කිරීම

අත්පොත ප්‍රතිනිෂ්පාදනය කිරීමට ඔබට VPS දෙකක් අවශ්‍ය වේ. පළමුවැන්න ගබඩාව (උපස්ථ ගබඩා කරනු ලබන ගබඩාව) වන අතර, දෙවනුව, ඇත්ත වශයෙන්ම, postgres සහිත සේවාදායකයම වේ (මගේ නඩුවේදී, postgres හි 11 වන අනුවාදය).

postgres සහිත සේවාදායකයේ ඔබට root, sudo පරිශීලක, postgres පරිශීලක සහ postgres ස්ථාපනය කර ඇති බවට උපකල්පනය කෙරේ (postgresql ස්ථාපනය කිරීමේදී postgres පරිශීලකයා ස්වයංක්‍රීයව නිර්මාණය වේ), සහ ගබඩා සේවාදායකයේ root සහ sudo පරිශීලක (අත්පොතෙහි ඇත. පරිශීලක නාමය pgbackrest භාවිතා කරනු ඇත) .

උපදෙස් ප්‍රතිනිෂ්පාදනය කිරීමේදී ඔබට අඩු ගැටළු ඇති වන පරිදි, මම ඇල අකුරු වලින් ලියන්නෙමි එහිදී, කුමන පරිශීලකයෙකු සමඟද සහ කුමන අයිතිවාසිකම් සමඟද මම විධානය ක්‍රියාත්මක කළේ ලිපිය ලිවීමේදී සහ පරීක්ෂා කිරීමේදී.

pgbackrest ස්ථාපනය කිරීම

ගබඩාව (පරිශීලක pgbackrest):

1. pgbackrest වෙතින් සංරක්ෂිතය බාගත කර එහි අන්තර්ගතය /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. එකලස් කිරීම සඳහා අවශ්ය පරායත්තයන් ස්ථාපනය කරන්න:

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

3. pgbackrest එකලස් කිරීම:

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

4. ක්‍රියාත්මක කළ හැකි ගොනුව /usr/bin නාමාවලියට පිටපත් කරන්න:

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

5. Pgbackrest සඳහා perl අවශ්‍යයි. ස්ථාපනය කරන්න:

sudo apt-get install perl

6. ලඝු-සටහන් සඳහා නාමාවලි සාදන්න, ඔවුන්ට නිශ්චිත අයිතිවාසිකම් ලබා දෙන්න:

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. පරීක්ෂා කරන්න:

pgbackrest version

Postgres සේවාදායකය (sudo පරිශීලක හෝ root):

postgres සහිත සේවාදායකයක් මත pgbackrest ස්ථාපනය කිරීමේ ක්‍රියාවලිය ගබඩාවේ ස්ථාපන ක්‍රියාවලියට සමාන වේ (ඔව්, pgbackrest සේවාදායකයන් දෙකෙහිම ස්ථාපනය කළ යුතුය), නමුත් 6 වන ඡේදයේ දෙවන සහ අවසාන විධාන:

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

සමඟ ප්රතිස්ථාපනය කරන්න:

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

මුරපද රහිත SSH හරහා සේවාදායකයන් අතර අන්තර්ක්‍රියා සැකසීම

pgbackrest නිවැරදිව ක්‍රියා කිරීම සඳහා, යතුරු ගොනුව භාවිතයෙන් postgres සේවාදායකය සහ ගබඩාව අතර අන්තර්ක්‍රියා වින්‍යාස කිරීම අවශ්‍ය වේ.

ගබඩාව (පරිශීලක pgbackrest):

යතුරු යුගලයක් සාදන්න:

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

කරුණාකරලා! අපි ඉහත විධානයන් sudo නොමැතිව ක්රියාත්මක කරන්නෙමු.

Postgres සේවාදායකය (sudo පරිශීලක හෝ root):

යතුරු යුගලයක් සාදන්න:

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

ගබඩාව (sudo පරිශීලක):

postgres සේවාදායකයේ පොදු යතුර ගබඩා සේවාදායකයට පිටපත් කරන්න:

(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

මෙම පියවරේදී root පරිශීලකයා සඳහා මුරපදය ඔබෙන් අසනු ඇත. ඔබ postgres සේවාදායකයේ root පරිශීලකයාගේ මුරපදය ඇතුළත් කළ යුතුය!

Postgres සේවාදායකය (sudo පරිශීලක):

පෝස්ට්ග්‍රෙස් සමඟ ගබඩා පොදු යතුර සේවාදායකයට පිටපත් කරන්න:

(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

මෙම පියවරේදී root පරිශීලකයා සඳහා මුරපදය ඔබෙන් අසනු ඇත. ඔබ ගබඩාවේ මූල පරිශීලකයාගේ මුරපදය හරියටම ඇතුළත් කළ යුතුය!

අපි පරීක්ෂා කරමු:

ගබඩාව (මූල පරිශීලකයා, අත්හදා බැලීමේ සංශුද්ධතාවය සඳහා):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Postgres සේවාදායකය (මූල පරිශීලකයා, අත්හදා බැලීමේ සංශුද්ධතාවය සඳහා):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

ගැටළු නොමැතිව අපට ප්රවේශය ලබා ගැනීමට අපි වග බලා ගන්නෙමු.

postgres සේවාදායකයක් පිහිටුවීම

Postgres සේවාදායකය (sudo පරිශීලක හෝ root):

1. බාහිර IP වලින් postgres සේවාදායකයට තට්ටු කිරීමට ඉඩ දෙමු. මෙය සිදු කිරීම සඳහා, ගොනුව සංස්කරණය කරන්න postgresql.conf (/etc/postgresql/11/main ෆෝල්ඩරයේ පිහිටා ඇත), එයට පේළිය එක් කරමින්:

listen_addresses = '*'

එවැනි රේඛාවක් දැනටමත් තිබේ නම්, එය අදහස් දැක්වීම ඉවත් කරන්න හෝ පරාමිති අගය '*' ලෙස සකසන්න.

ගොනුවේ pg_hba.conf (ෆෝල්ඩරයේ ද පිහිටා ඇත /etc/postgresql/11/main) පහත පේළි එකතු කරන්න:

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

කොහේද:

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

2. අවශ්‍ය සැකසුම් සකස් කරමු postgresql.conf (එය ෆෝල්ඩරයේ ඇත /etc/postgresql/11/main) වැඩ කිරීමට pgbackrest සඳහා:

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

3. pgbackrest වින්‍යාස ගොනුව තුළ අවශ්‍ය සැකසුම් සකස් කරමු (/etc/pgbackrest/pgbackrest.conf):

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

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

4. postgresql නැවත පූරණය කරන්න:

sudo service postgresql restart

ගබඩා සේවාදායකයක් සැකසීම

ගබඩාව (pgbackrest පරිශීලක):

වින්‍යාස ගොනුවේ අවශ්‍ය සැකසුම් කරමු 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

ගබඩාවක් නිර්මාණය කිරීම

ගබඩාව (pgbackrest පරිශීලක):

පොකුර සඳහා නව ගබඩාවක් සාදන්න ප්රධාන:

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

පරීක්ෂා

Postgres සේවාදායකය (sudo පරිශීලක හෝ root):

අපි postgres සේවාදායකය පරීක්ෂා කරන්නෙමු:

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

ගබඩාව (pgbackrest පරිශීලක):

අපි ගබඩා සේවාදායකය පරීක්ෂා කරන්නෙමු:

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

ප්‍රතිදානයේදී අපි “පරීක්ෂා විධාන අවසානය: සාර්ථකව නිම කරන ලද” රේඛාව දකින බවට අපි සහතික වෙමු.

මහන්සිද? අපි වඩාත් රසවත් කොටස වෙත යමු.

උපස්ථයක් සෑදීම

ගබඩාව (pgbackrest පරිශීලක):

1. උපස්ථයක් සිදු කරන්න:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. උපස්ථයක් සාදා ඇති බවට වග බලා ගන්න:

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

Pgbackrest පළමු සම්පූර්ණ උපස්ථය සාදනු ඇත. ඔබට අවශ්‍ය නම්, ඔබට උපස්ථ විධානය නැවත ක්‍රියාත්මක කර පද්ධතිය වර්ධක උපස්ථයක් නිර්මාණය කරන බවට වග බලා ගත හැකිය.

ඔබට නැවත සම්පූර්ණ උපස්ථයක් සෑදීමට අවශ්‍ය නම්, අමතර ධජයක් සඳහන් කරන්න:

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

ඔබට සවිස්තරාත්මක කොන්සෝල ප්‍රතිදානය අවශ්‍ය නම්, තවද සඳහන් කරන්න:

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

උපස්ථයක් ප්‍රතිසාධනය කිරීම

Postgres සේවාදායකය (sudo පරිශීලක හෝ root):

1. ධාවන පොකුර නවත්වන්න:

sudo pg_ctlcluster 11 main stop

2. උපස්ථයෙන් ප්‍රතිසාධනය කිරීම:

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

දත්ත සමුදාය අවසාන සම්පූර්ණ උපස්ථයේ තත්වයට ප්‍රතිසාධනය කිරීමට, recovery_target සඳහන් නොකර විධානය භාවිතා කරන්න:

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

වැදගත්! ප්‍රතිසාධනයෙන් පසුව, දත්ත සමුදාය ප්‍රතිසාධන මාදිලියේ සිරවීම සිදුවිය හැක (Error: DROP DATABASE කියවිය හැකි ගනුදෙනුවකදී ක්‍රියාත්මක කළ නොහැක). ඇත්තම කිව්වොත්, මෙය සම්බන්ධ වන්නේ කුමක් දැයි මට තවමත් වැටහුණේ නැත. විසඳුම පහත පරිදි වේ (විධානය ක්‍රියාත්මක කිරීමෙන් පසු ඔබට ටිකක් රැඳී සිටීමට සිදුවනු ඇත):

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

ඇත්ත වශයෙන්ම, එහි නම මගින් නිශ්චිත උපස්ථයක් ප්රතිස්ථාපනය කළ හැකිය. මෙන්න මම විතරයි මම ලේඛනයේ මෙම විශේෂාංගයේ විස්තරයට සබැඳියක් ලබා දෙන්නෙමි. සංවර්ධකයින් මෙම විකල්පය ප්‍රවේශමෙන් භාවිතා කිරීමට උපදෙස් දෙන අතර එයට හේතුව පැහැදිලි කරන්න. මම එය භාවිතා කළ බව මට මගෙන් එකතු කළ හැකිය. ඔබට ඇත්තටම අවශ්‍ය නම්, ප්‍රතිසාධනයෙන් පසු දත්ත සමුදාය ප්‍රතිසාධන මාදිලියෙන් පිටවන බවට වග බලා ගන්න (pg_is_in_recovery() "f" පෙන්විය යුතුය) සහ, ප්‍රතිසාධනයෙන් පසු සම්පූර්ණ උපස්ථයක් කරන්න.

3. පොකුර ආරම්භ කරන්න:

sudo pg_ctlcluster 11 main start

උපස්ථය ප්‍රතිසාධනය කිරීමෙන් පසු, අපට දෙවන උපස්ථයක් සිදු කිරීමට අවශ්‍ය වේ:

ගබඩාව (pgbackrest පරිශීලක):

sudo pgbackrest --stanza=main backup

එච්චරයි. අවසාන වශයෙන්, මම ඔබට මතක් කිරීමට කැමති මම කිසිඳු ආකාරයකින් ජ්‍යෙෂ්ඨ dba කෙනෙකු ලෙස පෙනී සිටීමට උත්සාහ නොකරන බවත්, කුඩාම අවස්ථාවෙහිදී වලාකුළු භාවිතා කරන බවත්ය. දැනට, මමම උපස්ථ කිරීම, අනුකරණය කිරීම, අධීක්ෂණය වැනි විවිධ මාතෘකා අධ්‍යයනය කිරීමට පටන් ගනිමි. සහ මම ප්‍රජාවට කුඩා දායකත්වයක් ලබා දීම සඳහා ප්‍රතිඵල ගැන කුඩා වාර්තා ලියන්නෙමි.

පහත ලිපි වලින් මම අමතර විශේෂාංග ගැන කතා කිරීමට උත්සාහ කරමි - පිරිසිදු පොකුරකට දත්ත ප්‍රතිසාධනය, උපස්ථ සංකේතනය කිරීම සහ S3 වෙත ප්‍රකාශනය කිරීම, rsync හරහා උපස්ථ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න