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 minio
Rongedza AccessKey uye ChakavanzikaKey mukati /etc/minio/minio.conf
vi /etc/minio/minio.conf
Kana iwe usingazoshandisa nginx pamberi peMinio, saka unofanirwa kuchinja
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Kutanga Minio
systemctl start minio
Enda kune Minio web interface
DB server
WAL-G mu rpm yakaunganidzwa neni (Anton Patsev).
Ndiani asina RPM-based system, shandisa mukuru
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.sh
Isa walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g
Kutarisa wal-g shanduro.
wal-g --version
wal-g version v0.2.14
Rongedza /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 mc
Isu tinotanga dhatabhesi.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Kana 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 = archive
Ngatichengetedzei 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.6
Mune 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.log
Ngatiende ku psql.
su - postgres
psql
Gadzira 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;
done
Iva nechokwadi chekuita gadziriro yakazara.
su - postgres
/usr/local/bin/backup-push.sh
Isu 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.sh
Recovery 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.sh
Backup 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.log
Kupora 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+00
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.log
Kuedza
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 MB
s4cmd ndeye yemahara yekuraira mutsara chishandiso chekushanda nedata inogara muAmazon S3 kuchengetedza. Iyo yekushandisa yakanyorwa mumutauro wepython programming, uye nekuda kweizvi inogona kushandiswa muWindows neLinux masisitimu anoshanda.
Kuisa s4cmd
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
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