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 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 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
