— lihtne ja tõhus tööriist PostgreSQL-i varundamiseks pilves. Oma põhifunktsionaalsuses on see tuntud tööriista järeltulija , kuid ümber kirjutatud Go keeles. Kuid WAL-G-l on üks oluline uus omadus — delta-varundused. Delta-varundused salvestavad faililehed, mis on muutunud varasema varunduse versiooniga võrreldes. WAL-G-s on rakendatud üsna palju tehnoloogiaid varunduste paralleelseks töötlemiseks. WAL-G töötab palju kiiremini kui WAL-E.
WAL-G tööpõhimõtteid saab lugeda artiklist:
S3 salvestusprotokoll on saanud populaarsuseks andmete salvestamiseks. Üks S3 eeliseid on API kaudu ligipääsu võimalus, mis võimaldab paindlikku suhtlemist salvestusse, sealhulgas avalikku lugemisõigust, samas kui andmete uuendamine salvestuses toimub ainult volitatud isikute poolt.
On olemas mitmeid nii avatud kui ka erasektori S3 protokolli põhiseid salvestuslahendusi. Täna vaatame populaarset lahendust väikeste salvestuste loomiseks — Minio.
WAL-G testimiseks sobib üks PostgreSQL server ja S3 asenduseks kasutatakse Miniot.
Minio server
Minio installimine
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minioMuudame AccessKey ja SecretKey failis /etc/minio/minio.conf
vi /etc/minio/minio.confKui te ei kasuta Nginx-i Minio ees, siis tuleb muuta
--address 127.0.0.1:9000--address 0.0.0.0:9000Käivitame Minio
systemctl start minioSiseneme Minio veebiliidesesse ja loome baketi (näiteks pg-backups).
Andmebaasi server
WAL-G rpm paketi koostajaks olen mina (Anton Patsev). , .
Kellel ei ole RPM-põhist süsteemi, kasutage ametlikku paigaldusjuhendit.
Koos WAL-G binaarfailiga rpm-s on olemas skriptid, mis impordivad muutujaid 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.shInstallime 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.
Konfiguratsioonifailid ja andmebaasi klastrit kasutavad andmefailid on traditsiooniliselt salvestatud klastris 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 — maksimaalne sammude arv, mille võrra delta-varundus võib base-varundusest erineda, ja määrate delta-koopia poliitika. Kas teete koopia viimastest olemasolevatest delta-varundustest või teete delta algsest täisvarundusest. See on vajalik juhul, kui teie andmebaasis muutub pidevalt sama andmebaasi element, sama andmed pidevalt muudetakse.
Paigaldame 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 ühe serveri peal, tuleb seadistada parameeter wal_level väärtusele archive PostgreSQL versioonides, mis on vanemad kui 10, ja replica PostgreSQL 10 ja uuemates versioonides.
wal_level = archiveTeeme WAL arhiivide varundamise iga 60 sekundi tagant PostgreSQL-i abil. Teie tootmisversioonis on archive_timeout väärtus erinev.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Iga 60 sekundi tagant käivitatakse käsk archive_command.Käivitame PostgreSQL-i
systemctl start postgresql-9.6Vaadake PostgreSQL logisid eraldi konsoolis vigade osas: (postgresql-Wed.log asendage praegusega).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logLogime psql-i sisse.
su - postgres
psqlLoome psql-is andmebaasi.
Loome tabeli andmebaasis test1.
create database test1;Vahetame 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äisvarunduse.
su - postgres
/usr/local/bin/backup-push.shVaadake 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+Rida on praegune aeg.
Vaadake täisvarunduste loendit
/usr/local/bin/backup-list.shTaastamise testimine
Täielik taastamine koos kõigi saadaolevate WAL-ide rakendamisega.
Peatame PostgreSQL-i.
Kustutame kõik failid kaustast /var/lib/pgsql/9.6/data.
Käivitame skripti /usr/local/bin/backup-fetch.sh kasutajalt postgres.
su - postgres
/usr/local/bin/backup-fetch.shVarundamise väljavõtmine on lõpule viidud.
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-i. PostgreSQL käivitab taastamisprotsessi arhiivitud WAL-i kaudu ja alles siis avaneb andmebaas.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logTaastamine kindlaksmääratud ajani.
Kui soovime taastada andmebaasi kindla minuti jooksul, lisame recovery.conf faili parameetri recovery_target_time — näitame, millise aja jaoks 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 üles andmeindekseerimise tabeli.
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-i. PostgreSQL käivitab taastamisprotsessi arhiivitud WAL-i kaudu ja alles siis avaneb andmebaas.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logTestimine
Genereerime 1GB andmebaasi nagu siin on kirjeldatud.
Küsi konteineri suurust pärast 1GB andmete genereerimist.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd — tasuta käsurea tööriist Amazon S3-s asuvate andmete haldamiseks. Tööriist on kirjutatud python programmeerimiskeeles ja seetõttu saab seda kasutada nii Windowsi kui ka Linuxi operatsioonisüsteemides.
Installeerime s4cmd.
pip install s4cmdLZ4
s4cmd --endpoint-url=http:\/\/ip-aadress-serveri-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 logidest
Täielik varukoopia lz4 - 1GB andmeid
time backup_push.sh
real 0m18.582s
S3 konteineri suurus pärast täisvarukoopiat
581480085 s3:\/\/pg-backups\/basebackups_005\/
842374424 s3:\/\/pg-backups\/wal_005
581 MB võtab täielik varukoopia.LZMA
Pärast 1GB andmete genereerimist
338413694 s3:\/\/pg-backups\/wal_005\/
338 MB logisid lzma formaadis
Täieliku varukoopia genereerimise aeg
time backup_push.sh
real 5m25.054s
Konteineri suurus S3-s
270310495 s3:\/\/pg-backups\/basebackups_005\/
433485092 s3:\/\/pg-backups\/wal_005\/
270 MB võtab täielik varukoopia lzma formaadis.Brotli
Pärast 1GB andmete genereerimist
459229886 s3:\/\/pg-backups\/wal_005\/
459 MB logisid brotli formaadis
Täieliku varukoopia genereerimise aeg
real 0m23.408s
Konteineri suurus S3-s
312960942 s3:\/\/pg-backups\/basebackups_005\/
459309262 s3:\/\/pg-backups\/wal_005\/
312 MB võtab täielik varukoopia brotli formaadis.
Võrdlus tulemuste graafikul.

Nagu näeme, et Brotli suurus on võrreldav LZMA-ga, kuid varukoopia tegemine kestab sama kaua kui LZ4.
PostgreSQL-i venekeelse kogukonna vestlus:
Palun pange täht Githubis, kui kasutate.
Allikas: habr.com
