د pgbackrest سره زیاتیدونکي پوسټګریسکیل بیک اپ - د پراختیا کونکي څخه د ځوان جنګیالیو لپاره کورس

ردول

زه یو پرمخ وړونکی یم. زه کوډ لیکم او یوازې د یو کارونکي په توګه د ډیټابیس سره اړیکه لرم. په هیڅ صورت کې زه د سیسټم مدیر نه یم، ډیر لږ DBA. خو…

دا داسې پیښ شوي چې زه اړتیا لرم چې د postgresql ډیټابیس بیک اپ تنظیم کړم. هیڅ بادل نشته - یوازې SSH وکاروئ او ډاډ ترلاسه کړئ چې هرڅه د پیسو غوښتنې پرته کار کوي. په داسې حالاتو کې څه وکړو؟ دا سمه ده ، موږ pgdump په کرون کې فشار راوړو ، هره ورځ آرشیف ته هرڅه بیک اپ کوو ، او که موږ په بشپړ ډول ورک شو ، نو موږ دا آرشیف لرې لرې لیږو.

دا ځل ستونزه دا وه چې د پلانونو سره سم، ډیټابیس باید هره ورځ شاوخوا + - 100 MB وده وکړي. البته ، د څو اونیو وروسته د pgdump سره د هرڅه بیک اپ کولو لیوالتیا به ورکه شي. دا هغه ځای دی چې زیاتیدونکي بیک اپ ژغورنې ته راځي.

په زړه پورې؟ بلی ته ښه راغلاست.

زیاتیدونکي بیک اپ یو ډول بیک اپ دی کله چې ټولې سرچینې فایلونه کاپي شوي نه وي، مګر یوازې نوي او هغه چې د پخوانۍ کاپي له رامینځته کیدو راهیسې بدل شوي.

د هر هغه پراختیا کونکي په څیر چې په بشپړ ډول نه غوښتل (په هغه وخت کې) د پوسټګریس پیچلتیاو باندې پوه شي، ما غوښتل شنه تڼۍ ومومئ. ښه، تاسو پوهیږئ، لکه په AWS کې، ډیجیټل اوشین: تاسو یوه تڼۍ کیکاږئ - تاسو نقل ترلاسه کړ، تاسو دویم فشار ورکړ - تاسو بیک اپ ترتیب کړ، دریم - تاسو هر څه په څو ساعتونو کې بیرته راګرځول. ما یو تڼۍ یا ښکلی GUI وسیله ونه موندله. که تاسو یو پیژنئ (وړیا یا ارزانه) ، په نظرونو کې یې ولیکئ.

د ګوګل کولو وروسته ما دوه وسیلې وموندلې pgbarman и pgbackrest. زه په ساده ډول د لومړي سره بریالی نه شوم (ډیر لږ اسناد، ما هڅه وکړه چې هرڅه د پخوانیو لارښودونو سره سم معلوم کړم)، مګر د دویم سره اسناد په مساوي توګه وګرځیدل، مګر د نیمګړتیاوو پرته. د هغو کسانو د کار ساده کولو لپاره چې د ورته دندې سره مخ دي، دا مقاله لیکل شوې.

د دې مقالې لوستلو وروسته، تاسو به زده کړئ چې څنګه زیاتیدونکي بیک اپ جوړ کړئ، دوی په ریموټ سرور کې خوندي کړئ (د بیک اپ سره ذخیره) او په اصلي سرور کې د معلوماتو ضایع کیدو یا نورو ستونزو په صورت کې یې بیرته راګرځوئ.

د چمتو کولو لپاره

د لارښود بیا تولید لپاره تاسو به دوه VPS ته اړتیا ولرئ. لومړی به ذخیره وي (هغه ذخیره چې په هغې کې به بیک اپ زیرمه شي) ، او دوهم ، په حقیقت کې ، سرور پخپله د پوسټګریس سره (زما په قضیه کې ، د پوسټ 11 نسخه).

داسې انګیرل کیږي چې په سرور کې د پوسټګریس سره تاسو روټ، سوډو کارن، د پوسټګریس کارن او پوسټګریس پخپله نصب شوی (د پوسټګریس کاروونکي په اوتومات ډول رامینځته کیږي کله چې د postgresql نصب کول)، او د ذخیره کولو سرور کې د روټ او سوډو کاروونکي شتون لري (په لارښود کې د کارن نوم 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 پرل ته اړتیا لري. لګول:

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

پوسټګریس سرور (سوډو کارن یا روټ):

د پوسټګریس سره په سرور کې د pgbackrest نصبولو پروسه په ذخیره کې د نصب کولو پروسې سره ورته ده (هو، pgbackrest باید په دواړو سرورونو کې نصب شي) مګر په 6th پراګراف کې دوهم او وروستی حکمونه:

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 په سمه توګه کار وکړي، دا اړینه ده چې د کلیدي فایل په کارولو سره د پوسټګریس سرور او ذخیره کولو ترمنځ تعامل تنظیم کړئ.

ذخیره (د کارن pgbackrest):

کلیدي جوړه جوړه کړئ:

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

پاملرنه وکړئ! موږ پورتنۍ کمانډونه پرته له سوډو چلوو.

پوسټګریس سرور (سوډو کارن یا روټ):

کلیدي جوړه جوړه کړئ:

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 کارونکي):

د پوسټګریس سرور عامه کیلي د ذخیره کولو سرور ته کاپي کړئ:

(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

پدې مرحله کې به تاسو څخه د روټ کارونکي لپاره د پټنوم غوښتنه وشي. تاسو اړتیا لرئ د پوسټګریس سرور د روټ کارونکي رمز دننه کړئ!

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

پدې مرحله کې به تاسو څخه د روټ کارونکي لپاره د پټنوم غوښتنه وشي. تاسو اړتیا لرئ د ذخیره کولو د روټ کارونکي دقیق رمز دننه کړئ!

موږ ګورو:

ذخیره (د ریښې کاروونکي، د تجربې د پاکوالي لپاره):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

د پوسټګریس سرور (د ریښې کارونکي، د تجربې پاکوالي لپاره):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

موږ ډاډ ترلاسه کوو چې موږ پرته له ستونزو لاسرسی ترلاسه کوو.

د پوسټګریس سرور تنظیم کول

پوسټګریس سرور (سوډو کارن یا روټ):

1. اجازه راکړئ چې د بهرني IPs څخه د پوسټګریس سرور ټکولو ته اجازه ورکړو. د دې کولو لپاره، فایل سم کړئ 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

د تفتیش

پوسټګریس سرور (سوډو کارن یا روټ):

موږ د پوسټګریس سرور چیک کوو:

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

د بیک اپ بیا رغول

پوسټګریس سرور (سوډو کارن یا روټ):

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 ډیټابیس یوازې د لوستلو لیږد کې نشي اجرا کولی). د ریښتیني کیدو لپاره ، زه لاهم نه پوهیږم چې دا له څه سره تړاو لري. حل په لاندې ډول دی (تاسو به د کمانډ اجرا کیدو وروسته یو څه انتظار ته اړتیا ولرئ):

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

Add a comment