usa ka yano ug epektibo nga himan alang sa pag-back up sa PostgreSQL sa panganod. Sa mga termino sa panguna nga gamit niini, kini ang manununod sa sikat nga himan , apan gisulat pag-usab sa Go. Apan ang WAL-G adunay usa ka hinungdanon nga bag-ong bahin: mga kopya sa delta. Mga kopya sa delta tindahan sa mga panid sa mga file nga nausab sukad sa miaging bersyon sa backup. Ang WAL-G nagpatuman ug daghang mga teknolohiya para sa pagparis sa mga backup. Ang WAL-G mas paspas kay sa WAL-E.
Ang mga detalye kung giunsa ang paglihok sa wal-g makita sa artikulo:
Ang S3 storage protocol nahimong popular alang sa pagtipig sa datos. Usa sa mga bentaha sa S3 mao ang abilidad sa pag-access pinaagi sa API, nga nagtugot kanimo sa pag-organisar sa flexible nga interaksyon sa pagtipig, lakip ang pag-access sa pagbasa sa publiko, samtang ang pag-update sa kasayuran sa pagtipig mahitabo lamang sa mga awtorisado nga tawo.
Adunay ubay-ubay nga publiko ug pribado nga pagpatuman sa pagtipig nga naggamit sa S3 protocol. Karon atong tan-awon ang usa ka popular nga solusyon alang sa pag-organisar sa gagmay nga mga pasilidad sa pagtipig - Minio.
Ang usa ka server sa PostgreSQL angay alang sa pagsulay sa wal-g, ug ang Minio gigamit ingon usa ka puli sa S3.
Minio Server
Pag-instalar sa Minio
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minioPag-edit sa AccessKey ug SecretKey sa /etc/minio/minio.conf
vi /etc/minio/minio.confKung dili nimo gamiton ang nginx sa wala pa ang Minio, kinahanglan nimo nga usbon
--address 127.0.0.1:9000--address 0.0.0.0:9000Ilunsad ang Minio
systemctl start minioAdto sa Minio web interface ug paghimo og balde (pananglitan, pg-backups).
DB server
Gi-assemble nako ang WAL-G sa rpm (Anton Patsev). , .
Para sa mga walay RPM-based system, gamita ang opisyal sa pag-instalar.
Uban sa wal-g binary, ang rpm adunay mga script nga nag-import sa mga variable gikan sa /etc/wal-gd/server-s3.conf file.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shI-install ang wal-g.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gPagsusi sa bersyon sa wal-g.
wal-g --version
wal-g version v0.2.14I-edit ang /etc/wal-gd/server-s3.conf aron mohaum sa imong mga panginahanglan.
Ang mga file sa pag-configure ug mga file sa datos nga gigamit sa usa ka cluster sa database tradisyonal nga gitipigan nga magkauban sa direktoryo sa datos sa cluster, nga sagad gitawag nga 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 # ΠΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Sa pag-set up sa WAL-G, imong ipiho ang WALG_DELTA_MAX_STEPS - ang gidaghanon sa mga lakang diin ang delta backup labing layo gikan sa base backup, ug ipiho ang delta copy policy. Maghimo ka ug kopya gikan sa katapusang naglungtad nga delta, o maghimo ka usa ka delta gikan sa orihinal nga full backup. Gikinahanglan kini alang sa kaso kung ang parehas nga sangkap sa database kanunay nga nagbag-o sa imong database, ang parehas nga datos kanunay nga nagbag-o.
Pag-instalar sa database.
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 mcAtong sugdan ang database.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKKung nagsulay ka sa 1 nga server, kinahanglan nimo nga i-configure pag-usab ang parameter sa wal_level aron i-archive ang bersyon sa PostgreSQL nga walaβy 10, ug replica alang sa bersyon nga PostgreSQL 10 ug labi pa.
wal_level = archiveAtong i-backup ang mga archive sa WAL matag 60 segundo gamit ang PostgreSQL mismo. Sa produksiyon aduna kay lain nga kantidad sa archive_timeout.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ΠΠ°ΠΆΠ΄ΡΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° archive_command.Atong sugdan ang PostgreSQL
systemctl start postgresql-9.6Sa bulag nga console, atong tan-awon ang PostgreSQL logs alang sa mga sayop: (ilisan ang postgresql-Wed.log ngadto sa kasamtangan).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logAdto ta sa psql.
su - postgres
psqlNaghimo kami usa ka database sa psql.
Paghimo og lamesa sa test1 database.
create database test1;Pagbalhin sa database sa pagsulay.
postgres=# c test1;Paghimo usa ka lamesa nga indexing_table.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());Pagdugang data.
Sugdan nato ang pagsal-ot sa datos. Naghulat kami 10-20 minuto.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
doneSiguruha nga maghimo usa ka hingpit nga backup.
su - postgres
/usr/local/bin/backup-push.shAtong tan-awon ang mga entry sa lamesa sa test1 database
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+Ang string mao ang karon nga oras.
Gitan-aw namon ang lista sa tibuuk nga mga backup
/usr/local/bin/backup-list.shPagsulay sa pagbawi
Bug-os nga pagkaayo uban sa rolling sa tanan nga anaa WAL.
Paghunong sa Postgresql.
Atong tangtangon ang tanan gikan sa /var/lib/pgsql/9.6/data folder.
Pagdalagan ang script /usr/local/bin/backup-fetch.sh gikan sa postgres user.
su - postgres
/usr/local/bin/backup-fetch.shNakompleto ang backup nga pagkuha.
Idugang ang recovery.conf sa /var/lib/pgsql/9.6/data folder nga adunay mosunod nga mga sulod.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'Ilunsad ang PostgreSQL. Ang PostgreSQL maglunsad sa proseso sa pagbawi gikan sa naka-archive nga WAL, ug unya ang database maablihan.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logPagbawi sa usa ka piho nga panahon.
Kung gusto namong ibalik ang database sa usa ka minuto, unya sa recovery.conf among idugang ang recovery_target_time parameter - among gipakita kung unsang orasa ibalik ang database.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'Human sa pagkaayo, tan-awa ang indexing_table nga lamesa
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+00Ilunsad ang PostgreSQL. Ang PostgreSQL maglunsad sa proseso sa pagbawi gikan sa naka-archive nga WAL, ug unya ang database maablihan.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logPagsulay
Naghimo kami og 1GB nga database sama sa gihulagway dinhi
Gihangyo namo ang gidak-on sa balde human makamugna og 1GB nga datos.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd β Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Amazon S3. Π£ΡΠΈΠ»ΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ python, ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ Windowsug Linux.
I-install ang 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
Pagkumpara sa mga resulta sa usa ka graph.

Sama sa atong makita, ang Brotli ikatandi sa gidak-on sa LZMA, apan ang backup gihimo sa LZ4 nga oras.
Chat sa komunidad nga PostgreSQL nga nagsultig Ruso:
Palihug paghatag ug bituon sa Github kung mogamit ka
Source: www.habr.com
