Wal-g PostgreSQL babeskopia sistemaren aurkezpena

WAL-G tresna sinple eta eraginkorra da PostgreSQL hodeietan babeskopiak egiteko. Bere funtzionalitate nagusiari dagokionez, tresna ezagunaren oinordekoa da WAL-E, baina Go-n berridatzia. Baina WAL-G-en ezaugarri berri garrantzitsu bat dago: delta kopiak. delta kopiak WAL-G gorde aurreko babeskopiaren bertsiotik aldatu diren fitxategien orriak. WAL-G-k teknologia asko inplementatzen ditu babeskopiak paralelizatzeko. WAL-G WAL-E baino askoz azkarragoa da.

Wal-g-en funtzionamenduari buruzko xehetasunak artikuluan aurki daitezke: Babeskopia overclock egiten dugu. Yandex hitzaldia

S3 biltegiratze protokoloa ezaguna bihurtu da datuak gordetzeko. S3-ren abantailetako bat API bidez sartzeko gaitasuna da, eta horrek biltegiarekin interakzio malgua antolatzeko aukera ematen du, irakurketa publikorako sarbidea barne, biltegiratze informazioa eguneratzea baimendutako pertsonek bakarrik egiten duten bitartean.

Hainbat biltegiratze publiko eta pribatu inplementazio daude S3 protokoloa erabiltzen dutenak. Gaur biltegiratze txikia antolatzeko irtenbide ezagun bat aztertuko dugu: Minio.

PostgreSQL zerbitzari bakarra ondo dago wal-g probatzeko, eta Minio S3-ren ordezko gisa erabiltzen da.

Minio zerbitzaria

Minio instalazioa

yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio

Editatu AccessKey eta SecretKey /etc/minio/minio.conf-en

vi /etc/minio/minio.conf

Minio baino lehen nginx erabiliko ez baduzu, aldatu behar duzu

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Minio abiarazten

systemctl start minio

Joan Minio web interfazera http://ip-адрес-сервера-minio:9000 eta ontzi bat sortu (adibidez, pg-backups).

DB zerbitzaria

WAL-G rpm-n nik muntatu dut (Anton Patsev). Github, Fedora COPR.

RPMn oinarritutako sistemarik ez duenak, erabili ofiziala argibideak instalazioaren bidez.

Wal-g binarioarekin batera, rpm-k /etc/wal-gd/server-s3.conf fitxategitik aldagaiak inportatzen dituzten script-ak ditu.

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

Instalatu Walg.

yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g

Wal-g bertsioa egiaztatzen.

wal-g --version
wal-g version v0.2.14

Editatu /etc/wal-gd/server-s3.conf zure beharretara.

Datu-base-kluster batek erabiltzen dituen konfigurazio-fitxategiak eta datu-fitxategiak tradizionalki elkarrekin gordetzen dira klusterreko datu-direktorioan, normalean deitzen dena. 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 konfiguratzean, WALG_DELTA_MAX_STEPS zehazten duzu - delta babeskopia oinarrizko babeskopiatik gehienezko urrats-kopurua eta delta kopia politika zehaztu. Edo lehendik dagoen azken deltatik kopia bat egiten duzu, edo jatorrizko babeskopia osotik delta bat egiten duzu. Hau beharrezkoa da datu-basearen osagai bera zure datu-basean beti aldatzen ari denean, datu berdinak etengabe aldatzen ari direnean.

Datu-basea instalatzea.

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

Datu-basea hasieratzen dugu.

/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK

Zerbitzari batean probatzen ari bazara, wal_level parametroa birkonfiguratu behar duzu PostgreSQL 1. bertsioa baino gutxiagorako artxibatzeko, eta PostgreSQL 10. bertsioa eta zaharragoa den erreplika.

wal_level = archive

Egin ditzagun WAL artxiboen babeskopiak 60 segundoz behin PostgreSQL bera erabiliz. Prod-en, archive_timeout balio desberdina izango duzu.

archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.

PostgreSQL abiarazten

systemctl start postgresql-9.6

Aparteko kontsola batean, PostgreSQL erregistroak ikusten ditugu akatsen bila: (aldatu postgresql-Wed.log oraingora).

tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Goazen psql-era.

su - postgres
psql

Sortu datu-base bat psql-en

Sortu taula bat datu-basearen test1.

create database test1;

Aldatu datu-basearen probara.

postgres=# c test1;

Taula indexing_table sortzen dugu.

test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());

Datuak gehitzea.

Datuak sartzen hasten gara. 10-20 minuturen zain gaude.

#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done

Ziurtatu babeskopia osoa egiten duzula.

su - postgres
/usr/local/bin/backup-push.sh

Datu-basearen test1 taulako erregistroak ikusten ditugu

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+

Katea uneko ordua da.

Ikusi babeskopia osoen zerrenda

/usr/local/bin/backup-list.sh

Berreskuratzeko probak

Berreskuratze osoa eskuragarri dauden WAL guztiak jaurtiz.

Gelditu Postgresql.

Ezabatu dena /var/lib/pgsql/9.6/data karpetatik.

Exekutatu /usr/local/bin/backup-fetch.sh scripta postgres erabiltzaile gisa.

su - postgres
/usr/local/bin/backup-fetch.sh

Babeskopia ateratzea amaitu da.

Gehitu recovery.conf /var/lib/pgsql/9.6/data karpetara hurrengo edukiarekin.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'

PostgreSQL abiarazten dugu. PostgreSQL-k berreskuratze-prozesua hasiko du artxibatutako WALetatik, eta orduan bakarrik irekiko da datu-basea.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Denbora jakin baterako berreskuratzea.

Datu-basea minutu jakin baterako leheneratu nahi badugu, orduan recovery_target_time parametroa gehitzen dugu recovery.conf-era - datu-basea zein ordutan leheneratu behar den adierazten dugu.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'

Berreskuratu ondoren, begiratu taula 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+00

PostgreSQL abiarazten dugu. PostgreSQL-k berreskuratze-prozesua hasiko du artxibatutako WALetatik, eta orduan bakarrik irekiko da datu-basea.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Testing

1GB datu-base bat sortzea hemen deskribatzen den moduan https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Kuboaren tamaina eskatzea 1 GB datu sortu ondoren.

postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB

s4cmd Amazon S3 biltegian gordetako datuekin lan egiteko komando-lerroko tresna doakoa da. Utilitatea Python-en idatzita dago, sistema eragileetan erabiltzeko egokia bihurtuz eta WindowsEta Linux.

s4cmd instalatzen

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

Grafikoko emaitzen konparaketa.

Wal-g PostgreSQL babeskopia sistemaren aurkezpena

Ikus dezakezun bezala, Brotli LZMA-rekin parekoa da, baina babeskopia LZ4 denboran egiten da.

Errusieraz hitz egiten duen PostgreSQL komunitatearen berriketa: https://t.me/pgsql

Mesedez, eman izar bat Github-i erabiltzen baduzu wal-g

Iturria: www.habr.com

Erosi hosting fidagarria DDoS babesa duten guneetarako, VPS VDS zerbitzariak 🔥 Erosi webguneentzako ostatu fidagarria DDoS babesarekin, VPS VDS zerbitzariak | ProHoster