chishandiso chiri nyore uye chinoshanda chekutsigira PostgreSQL kumakore. Panyaya yekushanda kwayo kukuru, ndiyo mugari wenhaka yechishandiso chakakurumbira , asi yakanyorwazve muna Go. Asi pane chinhu chitsva chakakosha muWAL-G - delta makopi. delta makopi chengetedza mapeji emafaira achinja kubva kune yakare backup vhezheni. WAL-G inoshandisa akawanda matekinoroji ekufananidza ma backups. WAL-G inokurumidza kupfuura WAL-E.
Tsanangudzo yekuti wal-g inoshanda sei inogona kuwanikwa muchinyorwa:
Iyo S3 yekuchengetedza protocol yave yakakurumbira yekuchengetedza data. Imwe yemabhenefiti eS3 kugona kuwana kuburikidza neAPI, iyo inokutendera iwe kuronga kuchinjika kupindirana nekuchengetedza, kusanganisira neruzhinji kuverenga kuverenga, nepo kuvandudza ruzivo mudura kunoitika chete nevanhu vane mvumo.
Kune akati wandei eruzhinji uye akavanzika ekuchengetedza ekushandisa anoshandisa iyo S3 protocol. Nhasi tichatarisa mhinduro yakakurumbira yekuronga diki yekuchengetedza - Minio.
Imwe chete PostgreSQL sevha yakanaka yekuyedza wal-g, uye Minio inoshandiswa sekutsiva S3.
Minio Server
Minio installation
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minioRongedza AccessKey uye ChakavanzikaKey mukati /etc/minio/minio.conf
vi /etc/minio/minio.confKana iwe usingazoshandisa nginx pamberi peMinio, saka unofanirwa kuchinja
--address 127.0.0.1:9000--address 0.0.0.0:9000Kutanga Minio
systemctl start minioEnda kune Minio web interface uye gadzira bhaketi (somuenzaniso, pg-backups).
DB server
WAL-G mu rpm yakaunganidzwa neni (Anton Patsev). , .
Ndiani asina RPM-based system, shandisa mukuru nekuiswa.
Pamwe chete newal-g binary, rpm ine zvinyorwa zvinounza zvakasiyana kubva pa /etc/wal-gd/server-s3.conf faira.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shIsa walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gKutarisa wal-g shanduro.
wal-g --version
wal-g version v0.2.14Rongedza /etc/wal-gd/server-s3.conf kune zvaunoda.
Iwo ekugadzirisa mafaera uye mafaera edatha anoshandiswa nedatabase cluster anogara achichengetwa pamwechete mu cluster data dhairekitori, rinowanzo kunzi 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 # ΠΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Kana uchigadzirisa WAL-G, unotsanangura WALG_DELTA_MAX_STEPS - nhamba yematanho ayo iyo delta backup yakawandisa kubva kune base backup, uye tsanangura iyo delta copy policy. Pamwe iwe unoita kopi kubva kune yekupedzisira iripo delta, kana iwe gadzira delta kubva kune yekutanga backup yakazara. Izvi zvinodikanwa kana iyo imwechete chikamu chedhatabhesi ichigara ichichinja mune yako dhatabhesi, iyo yakafanana data inogara ichichinja.
Kuisa 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 mcIsu tinotanga dhatabhesi.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKKana iwe uri kuyedza pane 1 sevha, saka iwe unofanirwa kugadzirisa zvakare wal_level paramende kuti uchengetedze yePostgreSQL isingasviki vhezheni gumi, uye replica yePostgreSQL vhezheni yegumi uye yekare.
wal_level = archiveNgatichengetedzei WAL zvinyorwa zvega zvega makumi matanhatu tichishandisa PostgreSQL pachayo. Pa prod, iwe uchave neyakasiyana archive_timeout kukosha.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ΠΠ°ΠΆΠ΄ΡΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° archive_command.Kutanga PostgreSQL
systemctl start postgresql-9.6Mune imwe koni, isu tinotarisa kuPostgreSQL matanda kune zvikanganiso: (chinja postgresql-Wed.log kune yazvino).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logNgatiende ku psql.
su - postgres
psqlGadzira dhatabhesi mu psql
Gadzira tafura mu database test1.
create database test1;Chinja kubvunzo yedatabase.
postgres=# c test1;Isu tinogadzira tafura indexing_table.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());Kuwedzera data.
Tinotanga kuisa data. Isu takamirira 10-20 maminitsi.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
doneIva nechokwadi chekuita gadziriro yakazara.
su - postgres
/usr/local/bin/backup-push.shIsu tinotarisa marekodhi ari patafura mune database test1
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+Tambo ndiyo nguva yazvino.
Ona rondedzero yakazara yakazara backups
/usr/local/bin/backup-list.shRecovery test
Kudzoreredza kwakazara nekutenderedza zvese zviripo WAL.
Misa Postgresql.
Bvisa zvese kubva pa /var/lib/pgsql/9.6/data folda.
Mhanya iyo /usr/local/bin/backup-fetch.sh script semushandisi wepostgres.
su - postgres
/usr/local/bin/backup-fetch.shBackup kubviswa kwapera.
Wedzera recovery.conf kune /var/lib/pgsql/9.6/data folda ine zvinotevera zvirimo.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'Tinotanga PostgreSQL. PostgreSQL ichatanga maitiro ekudzoreredza kubva kune akachengetwa WALs, uye chete ipapo iyo dhatabhesi ichavhurwa.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logKupora kwenguva yakati.
Kana tichida kudzorera dhesi kusvika kune imwe miniti, zvino tinowedzera recovery_target_time parameter ku recovery.conf - tinoratidza nguva ipi yekudzorera dhesi.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'Mushure mekupora, tarisa tafura 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+00Tinotanga PostgreSQL. PostgreSQL ichatanga maitiro ekudzoreredza kubva kune akachengetwa WALs, uye chete ipapo iyo dhatabhesi ichavhurwa.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logKuedza
Kugadzira 1GB dhatabhesi sekutsanangurwa kuno
Kukumbira saizi yebhaketi mushure mekugadzira 1GB yedata.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd β Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Amazon S3. Π£ΡΠΈΠ»ΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ python, ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ Windowsuye Linux.
Kuisa 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
Kuenzanisa kwemigumisiro pane chati.

Sezvauri kuona, Brotli inofananidzwa muhukuru neLZMA, asi backup inoitwa munguva yeLZ4.
Chat yenharaunda inotaura chiRussian PostgreSQL:
Ndokumbira upe nyeredzi kuGithub kana ukashandisa
Source: www.habr.com
