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. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° написана Π½Π° языкС программирования python, ΠΈ благодаря этому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈ 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