is 'n eenvoudige en effektiewe hulpmiddel om PostgreSQL na die wolk te rugsteun. Wat die hooffunksie daarvan betref, is dit die opvolger van die gewilde instrument , maar herskryf in Go. Maar WAL-G het een belangrike nuwe kenmerk: delta-kopieë. Delta kopieë bêre bladsye van lêers wat verander het sedert die vorige weergawe van die rugsteun. WAL-G implementeer heelwat tegnologieë vir parallellisering van rugsteun. WAL-G is baie vinniger as WAL-E.
Besonderhede van hoe wal-g werk, kan in die artikel gevind word:
Die S3-bergingsprotokol het gewild geword vir die stoor van data. Een van die voordele van S3 is die vermoë om toegang te verkry via API, wat jou toelaat om buigsame interaksie met die berging te organiseer, insluitend publieke leestoegang, terwyl die opdatering van inligting in die berging slegs deur gemagtigde persone plaasvind.
Daar is verskeie publieke en private bergingsimplementasies wat die S3-protokol gebruik. Vandag sal ons kyk na 'n gewilde oplossing vir die organisering van klein stoorfasiliteite - Minio.
'n Enkele PostgreSQL-bediener is geskik om wal-g te toets, en Minio word gebruik as 'n plaasvervanger vir S3.
Minio bediener
Installeer Minio
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minioRedigeer AccessKey en SecretKey in /etc/minio/minio.conf
vi /etc/minio/minio.confAs jy nie nginx voor Minio sal gebruik nie, moet jy verander
--address 127.0.0.1:9000--address 0.0.0.0:9000Begin Minio
systemctl start minioGaan na die Minio-webkoppelvlak en skep 'n emmer (byvoorbeeld, pg-rugsteun).
DB bediener
Ek monteer WAL-G in rpm (Anton Patsev). , .
Vir diegene wat nie 'n RPM-gebaseerde stelsel het nie, gebruik die amptelike een op installasie.
Saam met die wal-g binêre, bevat die rpm skrifte wat veranderlikes invoer vanaf die /etc/wal-gd/server-s3.conf lêer.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shInstalleer wal-g.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gKontroleer die weergawe van wal-g.
wal-g --version
wal-g version v0.2.14Redigeer /etc/wal-gd/server-s3.conf om by jou behoeftes te pas.
Konfigurasielêers en datalêers wat deur 'n databasiskluster gebruik word, word tradisioneel saam in die groepdatagids gestoor, wat algemeen na verwys word as 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 jy WAL-G opstel, spesifiseer jy WALG_DELTA_MAX_STEPS - die aantal stappe waardeur die delta-rugsteun maksimaal ver van die basis-rugsteun is, en spesifiseer die delta-kopiebeleid. Of jy maak 'n kopie van die laaste bestaande delta, of jy maak 'n delta van die oorspronklike volledige rugsteun. Dit is nodig vir die geval wanneer dieselfde databasiskomponent altyd in jou databasis verander, dieselfde data voortdurend verander.
Die installering van die databasis.
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 mcKom ons inisialiseer die databasis.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKAs jy op 1 bediener toets, moet jy die wal_level-parameter herkonfigureer om vir PostgreSQL weergawe minder as 10 te argiveer, en replika vir PostgreSQL weergawe 10 en ouer.
wal_level = archiveKom ons rugsteun WAL-argiewe elke 60 sekondes deur PostgreSQL self te gebruik. In die produksie sal jy 'n ander argief_tydverloop waarde hê.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.Kom ons begin PostgreSQL
systemctl start postgresql-9.6In 'n aparte konsole kyk ons na die PostgreSQL logs vir foute: (verander postgresql-Wed.log na die huidige een).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logKom ons gaan na psql.
su - postgres
psqlOns skep 'n databasis in psql.
Skep 'n tabel in die toets1 databasis.
create database test1;Skakel oor na die toetsdatabasis.
postgres=# c test1;Skep 'n tabel indeksering_tabel.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());Voeg data by.
Kom ons begin data-invoeging. Ons wag 10-20 minute.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
doneMaak seker dat jy 'n volledige rugsteun maak.
su - postgres
/usr/local/bin/backup-push.shOns kyk na die inskrywings in die tabel in die toets1-databasis
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+Die string is die huidige tyd.
Ons kyk na die lys van volledige rugsteun
/usr/local/bin/backup-list.shHersteltoetsing
Volle herstel met die rol van alle beskikbare WAL.
Stop Postgresql.
Ons vee alles uit die /var/lib/pgsql/9.6/data-lêergids uit.
Begin die skrip /usr/local/bin/backup-fetch.sh vanaf die postgres-gebruiker.
su - postgres
/usr/local/bin/backup-fetch.shRugsteunonttrekking voltooi.
Voeg recovery.conf by die /var/lib/pgsql/9.6/data-lêergids met die volgende inhoud.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'Begin PostgreSQL. PostgreSQL sal die herstelproses vanaf die geargiveerde WAL begin, en eers dan sal die databasis oopmaak.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logHerstel vir 'n sekere tyd.
As ons die databasis tot 'n sekere minuut wil herstel, dan voeg ons in recovery.conf die recovery_target_time parameter by - ons dui aan op watter tyd om die databasis te herstel.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'Na herstel, kyk na die indexing_table tabel
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+00Begin PostgreSQL. PostgreSQL sal die herstelproses vanaf die geargiveerde WAL begin, en eers dan sal die databasis oopmaak.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logtoets
Ons genereer 'n 1GB databasis soos hier beskryf
Ons versoek die emmergrootte nadat ons 1 GB data gegenereer het.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd — бесплатный инструмент командной строки для работы с данными, расположенными в хранилище Amazon S3. Утилита написана на языке программирования python, и благодаря этому может использоваться в операционных системах и WindowsEn Linux.
Installeer 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 МБ в формате 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
Vergelyking van resultate op 'n grafiek.

Soos ons kan sien, is Brotli in grootte vergelykbaar met LZMA, maar rugsteun word in LZ4-tyd uitgevoer.
Klets van die Russiessprekende PostgreSQL-gemeenskap:
Gee asseblief 'n ster op Github as jy dit gebruik
Bron: will.com
