— lihtne ja tõhus tööriist PostgreSQL-i varundamiseks pilves. Oma põhifunktsionaalsuses on see populaarse tööriista, rewritten in Go. WAL-G-l on aga üks oluline uus omadus — delta-kopiad. Delta-kopiad 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:
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 minioMuuda AccessKey ja SecretKey failis /etc/minio/minio.conf
vi /etc/minio/minio.confKui te ei kasuta nginx'i Minio ees, on vajalik muuta
--address 127.0.0.1:9000--address 0.0.0.0:9000Käivitame Minio
systemctl start minioSiseneme Minio veebiliidesesse ja loome ämber (näiteks pg-backups).
Andmebaasi server
WAL-G rpm pakin mina (Anton Patsev). , .
Kellel pole RPM-põhist süsteemi, kasutage ametlikku 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.shPaigaldame wal-g.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gKontrollime wal-g versiooni.
wal-g --version
wal-g versioon v0.2.14Redigeerime /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 mcInitsialiseerime andmebaasi.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKKui 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 = archiveTeeme 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.6Erinevas 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.logSiseneme psql-i.
su - postgres
psqlLoome 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;
doneKindlasti teeme täieliku varukoopia.
su - postgres
/usr/local/bin/backup-push.shVaata 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.shTaastamise 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.shVarukoopia 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.logTaastamine 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+00Kä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.logTestimine
Genereerime 1GB andmebaasi, nagu siin kirjeldatud.
Küsimine seadme suurust pärast 1GB andmete genereerimist.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd 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 s4cmdLZ4
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 lzmaBrotli
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.

Nagu näeme, on Brotli suuruselt võrreldav LZMA-ga, kuid varukoopia teostatakse LZ4 aja jooksul.
PostgreSQLi venekeelse kogukonna jututuba:
Palun pange Githubis täht, kui kasutate
Allikas: habr.com
