A wal-g működésének részletei a cikkben találhatók:
Az S3 tárolási protokoll népszerűvé vált az adatok tárolására. Az S3 egyik előnye az API-n keresztüli hozzáférés lehetősége, amely lehetővé teszi a tárolóval való rugalmas interakció megszervezését, beleértve a nyilvános olvasási hozzáférést is, miközben a tárolóban lévő információk frissítését csak az arra jogosult személyek végezhetik.
Számos nyilvános és privát tárolási megvalósítás létezik, amely az S3 protokollt használja. Ma egy népszerű megoldást fogunk megvizsgálni a kis tárolók megszervezésére - Minio.
Egyetlen PostgreSQL-kiszolgáló alkalmas a wal-g tesztelésére, és a Miniot használják az S3 helyettesítésére.
Minio szerver
Mini telepítés
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio
Az AccessKey és SecretKey szerkesztése az /etc/minio/minio.conf fájlban
vi /etc/minio/minio.conf
Ha nem használja az nginxet a Minio előtt, akkor módosítania kell
--address 127.0.0.1:9000
--address 0.0.0.0:9000
A Minio elindítása
systemctl start minio
Lépjen a Mini webes felületére
DB szerver
A WAL-G-t rpm-ben én (Anton Patsev) szereltem össze.
Aki nem rendelkezik RPM alapú rendszerrel, használja a hivatalos
A wal-g bináris mellett az rpm olyan szkripteket is tartalmaz, amelyek változókat importálnak az /etc/wal-gd/server-s3.conf fájlból.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh
Telepítse a walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g
Wal-g verzió ellenőrzése.
wal-g --version
wal-g version v0.2.14
Szerkessze az /etc/wal-gd/server-s3.conf fájlt igényei szerint.
Az adatbázis-fürt által használt konfigurációs fájlok és adatfájlok hagyományosan együtt tárolódnak a fürt adatkönyvtárában, amelyet általában ún. 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 # Какой метод сжатия использовать.
A WAL-G konfigurálásakor meg kell adnia a WALG_DELTA_MAX_STEPS lépések számát – a delta biztonsági mentés maximális számát az alap biztonsági mentéshez képest, és megadhatja a delta másolási szabályzatot. Vagy készít egy másolatot az utolsó létező deltáról, vagy készít egy deltát az eredeti teljes biztonsági másolatból. Erre abban az esetben van szükség, ha az adatbázis ugyanazon komponense folyamatosan változik az adatbázisban, ugyanazok az adatok folyamatosan változnak.
Az adatbázis telepítése.
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
Inicializáljuk az adatbázist.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Ha 1 kiszolgálón tesztel, akkor újra kell konfigurálnia a wal_level paramétert, hogy archiválja a 10-esnél régebbi PostgreSQL-t, illetve a 10-es és régebbi PostgreSQL-verzió replikáját.
wal_level = archive
60 másodpercenként készítsünk biztonsági másolatot a WAL-archívumokról magának a PostgreSQL-nek a használatával. A gyártási folyamat során eltérő archive_timeout értéket fog kapni.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.
A PostgreSQL indítása
systemctl start postgresql-9.6
Egy külön konzolon megnézzük a PostgreSQL naplókat a hibákért: (a postgresql-Wed.log-ot módosítsa az aktuálisra).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Menjünk a psql-re.
su - postgres
psql
Hozzon létre egy adatbázist psql-ben
Hozzon létre egy táblát az adatbázisban teszt1.
create database test1;
Váltson át az adatbázistesztre.
postgres=# c test1;
Létrehozzuk az indexing_table táblát.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());
Adatok hozzáadása.
Elkezdjük az adatok beszúrását. 10-20 percet várunk.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done
Mindenképpen készítsen teljes biztonsági másolatot.
su - postgres
/usr/local/bin/backup-push.sh
Megnézzük a rekordokat a táblázatban a teszt1 adatbázisban
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+
A karakterlánc az aktuális idő.
Tekintse meg a teljes biztonsági másolatok listáját
/usr/local/bin/backup-list.sh
Helyreállítási tesztelés
Teljes helyreállítás az összes rendelkezésre álló WAL gördülésével.
Állítsa le a Postgresql-t.
Töröljön mindent a /var/lib/pgsql/9.6/data mappából.
Futtassa a /usr/local/bin/backup-fetch.sh parancsfájlt postgres felhasználóként.
su - postgres
/usr/local/bin/backup-fetch.sh
A biztonsági mentés kibontása befejeződött.
Adja hozzá a recovery.conf fájlt a /var/lib/pgsql/9.6/data mappához a következő tartalommal.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
Elindítjuk a PostgreSQL-t. A PostgreSQL elindítja a helyreállítási folyamatot az archivált WAL-okból, és csak ezután nyílik meg az adatbázis.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Helyreállítás egy bizonyos ideig.
Ha egy bizonyos percig vissza akarjuk állítani az adatbázist, akkor a recovery.conf fájlhoz adjuk hozzá a recovery_target_time paramétert - jelezzük, hogy mikor kell visszaállítani az adatbázist.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'
A helyreállítás után nézze meg az indexing_table táblát
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
Elindítjuk a PostgreSQL-t. A PostgreSQL elindítja a helyreállítási folyamatot az archivált WAL-okból, és csak ezután nyílik meg az adatbázis.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
tesztelés
1 GB-os adatbázis létrehozása az itt leírtak szerint
A vödör méretének lekérése 1 GB adat generálása után.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB
Az s4cmd egy ingyenes parancssori eszköz az Amazon S3 tárolójában található adatok kezeléséhez. A segédprogram python programozási nyelven íródott, és ennek köszönhetően Windows és Linux operációs rendszereken is használható.
Az s4cmd telepítése
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 МБ в формате 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 мб занимает полный бекап в формате lzma
brotli
После генерации 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
Az eredmények összehasonlítása a diagramon.
Mint látható, a Brotli méretében az LZMA-hoz hasonlítható, de a biztonsági mentés LZ4 időben történik.
Az oroszul beszélő PostgreSQL közösség chatje:
Kérjük, adjon csillagot a Githubnak, ha használja
Forrás: will.com