Tutvumine wal-g PostgreSQL varundamissüsteemiga

WAL-G — lihtne ja tõhus tööriist PostgreSQL-i varundamiseks pilves. Oma põhifunktsionaalsuses on see populaarse tööriista, WAL-Erewritten in Go. WAL-G-l on aga üks oluline uus omadus — delta-kopiad. Delta-kopiad WAL-G salvestavad faililehe, mis on muutunud alates eelmisest varukoopiast. WAL-G-s on rakendatud üsna palju tehnoloogiaid varundamiste korrastamiseks. WAL-G töötab palju kiiremini kui WAL-E.

WAL-G tööpõhimõtete kohta saate lugeda artiklis: Kiirus bäkapped. Yandexi loeng

S3 salvestusprotokoll on muutunud populaarseks andmete salvestamiseks. Üks S3 eeliseid on API kaudu juurdepääsu võimaldamine, mis võimaldab paindlikku suhtlemist salvestusega, sealhulgas avalikku lugemise juurdepääsu, samal ajal kui teabe uuendamine salvestuses toimub vaid volitatud isikute poolt.

On olemas mitmeid nii avatud kui ka erasektori rakendusi, mis töötavad S3 protokolli alusel. Täna vaatleme populaarset lahendust väikeste salvestuste korraldamiseks — Minio.

Wal-g testimiseks sobib üks PostgreSQL server ja S3 asemel kasutatakse Minio.

Minio server

Minio installimine

yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio

Muuda AccessKey ja SecretKey failis /etc/minio/minio.conf

vi /etc/minio/minio.conf

Kui te ei kasuta nginx'i Minio ees, on vajalik muuta

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Käivitame Minio

systemctl start minio

Siseneme Minio veebiliidesesse http://ip-aadress-serverist-minio:9000 ja loome ämber (näiteks pg-backups).

Andmebaasi server

WAL-G rpm pakin mina (Anton Patsev). Github, Fedora COPR.

Kellel pole RPM-põhist süsteemi, kasutage ametlikku juhendit paigaldusjuhendit.

Koos wal-g binaarfailiga rpm-is kaasnevad skriptid, mis impordivad muutujad failist /etc/wal-g.d/server-s3.conf.

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

Paigaldame wal-g.

yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g

Kontrollime wal-g versiooni.

wal-g --version
wal-g versioon v0.2.14

Redigeerime /etc/wal-g.d/server-s3.conf vastavalt oma vajadustele.

Konfigureerimisfailid ja andmebaasiklusteri kasutatavad andmefailid säilitatakse traditsiooniliselt koos klastrite andmekataloogis, mida tavaliselt nimetatakse PGDATA

#!/bin/bash

export PG_VER="9.6"

export WALE_S3_PREFIX="s3://pg-backups" # бакет, который мы создали в S3
export AWS_ACCESS_KEY_ID="xxxx" # AccessKey из /etc/minio/minio.conf 
export AWS_ENDPOINT="http://ip-адрес-сервера-minio:9000"
export AWS_S3_FORCE_PATH_STYLE="true"
export AWS_SECRET_ACCESS_KEY="yyyy" # SecretKey из /etc/minio/minio.conf

export PGDATA=/var/lib/pgsql/$PG_VER/data/
export PGHOST=/var/run/postgresql/.s.PGSQL.5432 # Сокет для подключения к PostgreSQL

export WALG_UPLOAD_CONCURRENCY=2 # Кол-во потоков для закачки 
export WALG_DOWNLOAD_CONCURRENCY=2 # Кол-во потоков для скачивания
export WALG_UPLOAD_DISK_CONCURRENCY=2 # Кол-во потоков на диске для закачки
export WALG_DELTA_MAX_STEPS=7
export WALG_COMPRESSION_METHOD=brotli # Какой метод сжатия использовать.

WAL-G seadistamisel määrate WALG_DELTA_MAX_STEPS — sammude arvu, mille võrra võib delta-varundus base-varundusest erineda, ning määrate delta-koopia poliitika. Kas teete koopia viimase olemasoleva delta järgi või loote delta algsest täielikust varundusest. See on vajalik juhul, kui teie andmebaasis muutub pidevalt sama andmeosa, sama teave muutub pidevalt.

Seadistame andmebaasi.

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql96 postgresql96-server mc

Initsialiseerime andmebaasi.

/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK

Kui testite ühel serveril, tuleb muuta wal_level parameeter archive’iks PostgreSQL versioonide puhul, mis on alla 10, ja replica’ks PostgreSQL 10 ja kõrgemate versioonide puhul.

wal_level = archive

Teeme WAL arhiivide varundamise iga 60 sekundi tagant PostgreSQL-i abil. Tootmises on teil muu archive_timeout väärtus.

archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Käivitatakse archive_command iga 60 sekundi tagant.

Käivitame PostgreSQL-i

systemctl start postgresql-9.6

Erinevas konsoolis vaatame PostgreSQL-i logisid vigade osas: (postgresql-Wed.log muutke vastavalt praegusele).

tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Siseneme psql-i.

su - postgres
psql

Loome psql'is andmebaasi.

Loome tabeli andmebaasis test1.

create database test1;

Lülitame andmebaasi test.

postgres=# c test1;

Loome tabeli indexing_table.

test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());

Andmete lisamine.

Käivitame andmete sisestamise. Ootame 10-20 minutit.

#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done

Kindlasti teeme täieliku varukoopia.

su - postgres
/usr/local/bin/backup-push.sh

Vaata kirjeid tabelis andmebaasis test1.

select * from indexing_table;
2020-01-29 09:41:25.226198+
2020-01-29 09:42:25.336989+
2020-01-29 09:43:25.356069+
2020-01-29 09:44:25.37381+
2020-01-29 09:45:25.392944+
2020-01-29 09:46:25.412327+
2020-01-29 09:47:25.432564+
2020-01-29 09:48:25.451985+
2020-01-29 09:49:25.472653+
2020-01-29 09:50:25.491974+
2020-01-29 09:51:25.510178+

Rea on praegune aeg.

Vaata täielike varukoopiate nimekirja.

/usr/local/bin/backup-list.sh

Taastamise testimine.

Täielik taastamine, mille käigus rakendame kõik kättesaadavad WAL-id.

Peatame PostgreSQL.

Kustutame kõik kaustast /var/lib/pgsql/9.6/data.

Käivitame skripti /usr/local/bin/backup-fetch.sh kasutaja postgres alt.

su - postgres
/usr/local/bin/backup-fetch.sh

Varukoopia eemaldamine on lõpetatud.

Lisame recovery.conf kausta /var/lib/pgsql/9.6/data järgmise sisuga.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'

Käivitame PostgreSQL. PostgreSQL käivitab taastamisprotsessi arhiveeritud WAL-idest ja avab seejärel andmebaasi.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Taastamine kindlal ajal.

Kui soovime andmebaasi taastada konkreetsetesse minutitesse, lisame failis recovery.conf parameetri recovery_target_time – määrame, millise ajani andmebaasi taastada.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'

Pärast taastamist vaatame üle tabeli indexing_table.

 2020-01-29 09:41:25.226198+00
 2020-01-29 09:42:25.336989+00
 2020-01-29 09:43:25.356069+00
 2020-01-29 09:44:25.37381+00
 2020-01-29 09:45:25.392944+00

Käivitame PostgreSQL. PostgreSQL käivitab taastamisprotsessi arhiveeritud WAL-idest ja avab seejärel andmebaasi.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Testimine

Genereerime 1GB andmebaasi, nagu siin kirjeldatud. https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Küsimine seadme suurust pärast 1GB andmete genereerimist.

postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB

s4cmd on tasuta käsurea tööriist andmete haldamiseks, mis asuvad Amazon S3 salvestuses. Tööriist on kirjutatud Python programmeerimiskeeles ning seetõttu saab seda kasutada nii Windowsis kui ka Linuxis.

Paigaldame s4cmd.

pip install s4cmd

LZ4

s4cmd --endpoint-url=http://ip-адрес-сервера-minio:9000 --access-key=xxxx --secret-key=yyyy du -r s3://pg-backups
840540822       s3://pg-backups/wal_005/
840 MB lz4 formaadis ainult WAL logide jaoks

Terve varukoopia lz4 - 1GB andmeid
time backup_push.sh
real 0m18.582s

S3 konteineri suurus pärast täielikku varukoopiat

581480085       s3://pg-backups/basebackups_005/
842374424   s3://pg-backups/wal_005
581 MB võtab terve varukoopia.

LZMA

Pärast 1 GB andmete genereerimist
338413694       s3://pg-backups/wal_005/
338 MB logisid formaadis lzma

Täieliku varukoopia genereerimise aeg
time backup_push.sh
real    5m25.054s

S3-seadmestiku suurus
270310495       s3://pg-backups/basebackups_005/
433485092   s3://pg-backups/wal_005/

270 MB hõlmab täielikku varukoopiat formaadis lzma

Brotli

Pärast 1 GB andmete genereerimist
459229886       s3://pg-backups/wal_005/
459 MB logisid formaadis brotli

Täieliku varukoopia genereerimise aeg
real    0m23.408s

S3-seadmestiku suurus
312960942       s3://pg-backups/basebackups_005/
459309262   s3://pg-backups/wal_005/

312 MB hõlmab täielikku varukoopiat formaadis brotli

Tulemuste võrdlemine graafikul.

Tutvumine wal-g PostgreSQL varundamissüsteemiga

Nagu näeme, on Brotli suuruselt võrreldav LZMA-ga, kuid varukoopia teostatakse LZ4 aja jooksul.

PostgreSQLi venekeelse kogukonna jututuba: https://t.me/pgsql

Palun pange Githubis täht, kui kasutate wal-g

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster