Pgbackrest көмегімен қосымша postgresql сақтық көшірмелері - әзірлеушіден жас жауынгерге арналған курс

Ескерту

Мен әзірлеушімін. Мен код жазамын және дерекқормен тек пайдаланушы ретінде әрекеттесемін. Ешқандай жағдайда мен өзімді жүйелік әкімші ретінде көрсетпеймін, тіпті dba. Бірақ…

Маған postgresql дерекқорының сақтық көшірмесін жасау қажет болды. Бұлттар жоқ - жай ғана SSH пайдаланыңыз және бәрі ақша сұрамай жұмыс істейтініне көз жеткізіңіз. Мұндай жағдайларда не істейміз? Дұрыс, біз pgdump файлын cron ішіне итереміз, күн сайын мұрағатқа барлығының сақтық көшірмесін жасаймыз, ал егер біз толығымен жоғалсақ, бұл мұрағатты алыс жерге жібереміз.

Бұл жолғы қиындық, жоспарлар бойынша мәліметтер базасы күніне шамамен +- 100 МБ-қа өсуі керек еді. Әрине, бірнеше аптадан кейін барлығын pgdump көмегімен сақтық көшірмелеу ниеті жоғалады. Бұл жерде қосымша сақтық көшірмелер құтқаруға келеді.

Қызықты? мысыққа қош келдіңіз.

Қосымша сақтық көшірме – бұл барлық бастапқы файлдар көшірілмейтін, тек жаңалары және алдыңғы көшірме жасалғаннан кейін өзгертілгендері көшірілетін сақтық көшірменің түрі.

Постгрестің қыр-сырын түсінгісі келмейтін кез келген әзірлеуші ​​сияқты (сол кезде) мен жасыл түймені тапқым келді. Білесіз бе, AWS, DigitalOcean сияқты: сіз бір түймені бастыңыз - репликация алдыңыз, екіншісін бастыңыз - сақтық көшірмелерді орнаттыңыз, үшіншісі - бәрін бірнеше сағатқа артқа айналдырдыңыз. Мен түймені немесе әдемі GUI құралын таппадым. Егер сіз біреуді білсеңіз (тегін немесе арзан), бұл туралы түсініктемелерде жазыңыз.

Гуглингтен кейін мен екі құрал таптым pgbarman и pgbackrest. Мен біріншісіне қол жеткізе алмадым (құжаттама өте сирек, мен бәрін ескі нұсқаулықтарға сәйкес анықтауға тырыстым), бірақ екіншісінде құжаттама тең дәрежеде болды, бірақ кемшіліктерсіз емес. Осындай тапсырмаға тап болғандардың жұмысын жеңілдету үшін бұл мақала жазылды.

Осы мақаланы оқығаннан кейін сіз қосымша сақтық көшірмелерді жасауды, оларды қашықтағы серверге (сақтық көшірмелері бар репозиторий) сақтауды және деректер жоғалған немесе негізгі серверде басқа мәселелер туындаған жағдайда оларды қалпына келтіруді үйренесіз.

Дайындау

Нұсқаулықты қайта шығару үшін сізге екі VPS қажет. Біріншісі - сақтау орны (сақтық көшірмелер сақталатын репозиторий), екіншісі, шын мәнінде, postgres бар сервердің өзі (менің жағдайда, postgres нұсқасының 11 нұсқасы).

Postgres бар серверде сізде root, sudo пайдаланушысы, postgres пайдаланушысы және postgres өзі орнатылған (postgres пайдаланушысы postgresql орнату кезінде автоматты түрде жасалады), ал репозиторий серверінде 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

Бұл қадамда сізден түбірлік пайдаланушы үшін құпия сөз сұралады. Сізге postgres серверінің түбірлік пайдаланушысының құпия сөзін енгізу қажет!

Postgres сервері (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@<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>

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 # Параметр, указывающий сколько хранить полных бэкапов. Т.е. если у вас есть два полных бэкапа и вы создаете третий - первые два будут удалены вместе с инкрементами. 
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 --delta restore

3. Кластерді бастаңыз:

sudo pg_ctlcluster 11 main start

Сақтық көшірмені қалпына келтіргеннен кейін біз екінші сақтық көшірмені жасауымыз керек:

Репозиторий (pgbackrest пайдаланушысы):

sudo pgbackrest --stanza=main backup

Бар болғаны. Қорытындылай келе, мен өзімді аға дба ретінде көрсетуге тырыспайтынымды және ең кішкентай мүмкіндікте бұлттарды пайдаланатынымды еске салғым келеді. Қазіргі уақытта мен өзім резервтік көшірме, репликация, мониторинг және т.б. сияқты әртүрлі тақырыптарды зерттей бастадым. және мен қоғамға аз да болса үлес қосу үшін нәтижелер туралы шағын есептерді жазамын және өзіме шағын парақтар қалдырамын.

Келесі мақалаларда мен қосымша мүмкіндіктер туралы айтуға тырысамын - таза кластерге деректерді қалпына келтіру, сақтық көшірмелерді шифрлау және S3 жүйесіне жариялау, rsync арқылы сақтық көшірмелер.

Ақпарат көзі: www.habr.com

пікір қалдыру