is een eenvoudige en effectieve tool voor het maken van back-ups van PostgreSQL naar de cloud. Wat de belangrijkste functionaliteit betreft, is het de erfgenaam van de populaire tool , maar herschreven in Go. Maar er is één belangrijke nieuwe functie in WAL-G: deltakopieën. delta-kopieën bewaar pagina's met bestanden die zijn gewijzigd sinds de vorige back-upversie. WAL-G implementeert heel wat technologieën voor het parallelliseren van back-ups. WAL-G is veel sneller dan WAL-E.
Details over hoe wal-g werkt zijn te vinden in het artikel:
Het S3-opslagprotocol is populair geworden voor het opslaan van gegevens. Een van de voordelen van S3 is de mogelijkheid om toegang te krijgen via API, waardoor u flexibele interactie met de opslag kunt organiseren, inclusief openbare leestoegang, terwijl het bijwerken van informatie in de opslag alleen door geautoriseerde personen gebeurt.
Er zijn verschillende publieke en private opslagimplementaties die het S3-protocol gebruiken. Vandaag zullen we kijken naar een populaire oplossing voor het organiseren van kleine opslag: Minio.
Een enkele PostgreSQL-server is prima voor het testen van wal-g, en Minio wordt gebruikt als vervanging voor S3.
Minio-server
Minio-installatie
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minioBewerk AccessKey en SecretKey in /etc/minio/minio.conf
vi /etc/minio/minio.confAls u nginx niet vóór Minio gaat gebruiken, moet u dit wijzigen
--address 127.0.0.1:9000--address 0.0.0.0:9000Minio lanceren
systemctl start minioGa naar de Minio-webinterface en maak een bucket (bijvoorbeeld pg-backups).
DB-server
WAL-G in rpm wordt door mij (Anton Patsev) geassembleerd. , .
Wie geen op RPM gebaseerd systeem heeft, gebruikt de ambtenaar door installatie.
Samen met het binaire bestand wal-g bevat rpm scripts die variabelen importeren uit het bestand /etc/wal-gd/server-s3.conf.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shWal installeren.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gWal-g-versie controleren.
wal-g --version
wal-g version v0.2.14Bewerk /etc/wal-gd/server-s3.conf naar uw wensen.
De configuratiebestanden en gegevensbestanden die door een databasecluster worden gebruikt, worden traditioneel samen opgeslagen in de clustergegevensmap, gewoonlijk aangeduid als 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 # Какой метод сжатия использовать.
Wanneer u WAL-G configureert, geeft u WALG_DELTA_MAX_STEPS op - het aantal stappen dat de deltaback-up maximaal mag duren vanaf de basisback-up, en geeft u het deltakopiebeleid op. Of u maakt een kopie van de laatste bestaande delta, of u maakt een delta van de originele volledige back-up. Dit is nodig in het geval dat hetzelfde onderdeel van de database in uw database altijd verandert, dezelfde gegevens voortdurend veranderen.
Het installeren van de database.
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 mcWe initialiseren de database.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKAls u op één server test, moet u de parameter wal_level opnieuw configureren om te archiveren voor PostgreSQL minder dan versie 1, en te repliceren voor PostgreSQL versie 10 en ouder.
wal_level = archiveLaten we elke 60 seconden een back-up maken van WAL-archieven met behulp van PostgreSQL zelf. Op prod heeft u een andere archive_timeout-waarde.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.PostgreSQL starten
systemctl start postgresql-9.6In een aparte console kijken we naar de PostgreSQL-logboeken op fouten: (wijzig postgresql-Wed.log naar de huidige).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logLaten we naar psql gaan.
su - postgres
psqlMaak een database in psql
Maak een tabel in de database test1.
create database test1;Schakel over naar de databasetest.
postgres=# c test1;We maken de tabel indexing_table.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());Gegevens toevoegen.
We beginnen gegevens in te voeren. We wachten 10-20 minuten.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
doneZorg ervoor dat u een volledige back-up maakt.
su - postgres
/usr/local/bin/backup-push.shWe kijken naar de records in de tabel in de databasetest1
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+De tekenreeks is de huidige tijd.
Bekijk de lijst met volledige back-ups
/usr/local/bin/backup-list.shHerstel testen
Volledig herstel met het rollen van alle beschikbare WAL.
Postgresql stoppen.
Verwijder alles uit de map /var/lib/pgsql/9.6/data.
Voer het script /usr/local/bin/backup-fetch.sh uit als de postgres-gebruiker.
su - postgres
/usr/local/bin/backup-fetch.shBack-upextractie voltooid.
Voeg recovery.conf toe aan de map /var/lib/pgsql/9.6/data met de volgende inhoud.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'We starten PostgreSQL. PostgreSQL start het herstelproces vanaf de gearchiveerde WAL's en pas dan wordt de database geopend.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logHerstel voor een bepaalde tijd.
Als we de database tot een bepaalde minuut willen herstellen, voegen we de parameter recovery_target_time toe aan recovery.conf - we geven aan hoe laat de database moet worden hersteld.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'Kijk na het herstel naar de tabel 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+00We starten PostgreSQL. PostgreSQL start het herstelproces vanaf de gearchiveerde WAL's en pas dan wordt de database geopend.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logTesten
Een database van 1 GB genereren zoals hier beschreven
De bucketgrootte opvragen na het genereren van 1 GB aan gegevens.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd — бесплатный инструмент командной строки для работы с данными, расположенными в хранилище Amazon S3. Утилита написана на языке программирования python, и благодаря этому может использоваться в операционных системах и WindowsEn Linux.
S4cmd installeren
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 МБ в формате lz4 только WAL логов
Полный бекап с lz4 - 1GB данных
time backup_push.sh
real 0m18.582s
Размер S3 бакета после полного бекапа
581480085 s3://pg-backups/basebackups_005/
842374424 s3://pg-backups/wal_005
581 МБ занимает полный бекапLZMA
После генерации 1ГБ данных
338413694 s3://pg-backups/wal_005/
338 мб логов в формате lzma
Время генерации полного бекапа
time backup_push.sh
real 5m25.054s
Размер бакета в S3
270310495 s3://pg-backups/basebackups_005/
433485092 s3://pg-backups/wal_005/
270 мб занимает полный бекап в формате lzmaBrotli
После генерации 1ГБ данных
459229886 s3://pg-backups/wal_005/
459 мб логов в формате brotli
Время генерации полного бекапа
real 0m23.408s
Размер бакета в S3
312960942 s3://pg-backups/basebackups_005/
459309262 s3://pg-backups/wal_005/
312 мб занимает полный бекап в формате brotli
Vergelijking van de resultaten in de grafiek.

Zoals u kunt zien, is Brotli qua grootte vergelijkbaar met LZMA, maar de back-up wordt uitgevoerd in LZ4-tijd.
Chat van de Russischsprekende PostgreSQL-gemeenschap:
Geef Github een ster als je het gebruikt
Bron: www.habr.com
