tresna sinple eta eraginkorra da PostgreSQL hodeietan babeskopiak egiteko. Bere funtzionalitate nagusiari dagokionez, tresna ezagunaren oinordekoa da , baina Go-n berridatzia. Baina WAL-G-en ezaugarri berri garrantzitsu bat dago: delta kopiak. delta kopiak 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:
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 minioEditatu AccessKey eta SecretKey /etc/minio/minio.conf-en
vi /etc/minio/minio.confMinio baino lehen nginx erabiliko ez baduzu, aldatu behar duzu
--address 127.0.0.1:9000--address 0.0.0.0:9000Minio abiarazten
systemctl start minioJoan Minio web interfazera eta ontzi bat sortu (adibidez, pg-backups).
DB zerbitzaria
WAL-G rpm-n nik muntatu dut (Anton Patsev). , .
RPMn oinarritutako sistemarik ez duenak, erabili ofiziala 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.shInstalatu Walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gWal-g bertsioa egiaztatzen.
wal-g --version
wal-g version v0.2.14Editatu /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 mcDatu-basea hasieratzen dugu.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKZerbitzari 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 = archiveEgin 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.6Aparteko 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.logGoazen psql-era.
su - postgres
psqlSortu 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;
doneZiurtatu babeskopia osoa egiten duzula.
su - postgres
/usr/local/bin/backup-push.shDatu-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.shBerreskuratzeko 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.shBabeskopia 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.logDenbora 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+00PostgreSQL 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.logTesting
1GB datu-base bat sortzea hemen deskribatzen den moduan
Kuboaren tamaina eskatzea 1 GB datu sortu ondoren.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd β Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Amazon S3. Π£ΡΠΈΠ»ΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ python, ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ WindowsEta Linux.
s4cmd instalatzen
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
Grafikoko emaitzen konparaketa.

Ikus dezakezun bezala, Brotli LZMA-rekin parekoa da, baina babeskopia LZ4 denboran egiten da.
Errusieraz hitz egiten duen PostgreSQL komunitatearen berriketa:
Mesedez, eman izar bat Github-i erabiltzen baduzu
Iturria: www.habr.com
