ā vienkÄrÅ”s un efektÄ«vs rÄ«ks PostgreSQL dublÄÅ”anai mÄkoÅos. Å emot vÄrÄ savu galveno funkcionalitÄti, tas ir populÄrÄ rÄ«ka mantinieks , taÄu pÄrprogrammÄts Go valodÄ. TaÄu WAL-G ir viena svarÄ«ga jauna iezÄ«me ā deltas dublÄjumi. Deltas dublÄjumi glabÄ failu lapas, kas ir mainÄ«juÅ”Äs kopÅ” iepriekÅ”ÄjÄ dublÄjuma versijas. WAL-G Ä«steno diezgan daudz tehnoloÄ£iju dublÄjumu paralelizÄÅ”anai. WAL-G darbojas daudz ÄtrÄk nekÄ WAL-E.
SÄ«kÄka informÄcija par wal-g darbÄ«bu ir pieejama rakstÄ:
S3 uzglabÄÅ”anas protokols ir kļuvis populÄrs datu glabÄÅ”anai. Viens no S3 priekÅ”rocÄ«bÄm ir piekļuves iespÄjas caur API, kas ļauj organizÄt elastÄ«gu mijiedarbÄ«bu ar uzglabÄÅ”anu, tostarp publisko piekļuvi lasīŔanai, kamÄr informÄcijas atjauninÄÅ”ana uzglabÄÅ”anÄ notiek tikai autorizÄtÄm personÄm.
PastÄv vairÄkas atvÄrtas un privÄtas uzglabÄÅ”anas Ä«stenojumi, kas darbojas pÄc S3 protokola. Å odien mÄs aplÅ«kosim populÄru risinÄjumu nelielu uzglabÄÅ”anas sistÄmu izveidei ā Minio.
Wal-g testÄÅ”anai bÅ«s pietiekams viens PostgreSQL serveris, un kÄ S3 aizvietotÄjs tiks izmantots Minio.
Minio servers
Minio instalÄÅ”ana
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minioPÄrveidojam AccessKey un SecretKey failÄ /etc/minio/minio.conf
vi /etc/minio/minio.confJa neizmantojat nginx pirms Minio, jÄizmaina
--address 127.0.0.1:9000--address 0.0.0.0:9000Palaižam Minio
systemctl start minioIeejam Minio tÄ«mekļa saskarnÄ un izveidojam grozu (piemÄram, pg-backups).
Datu bÄzes serveris
WAL-G rpm formÄtÄ es apkopoju es (Antons Pacevs). , .
Ja jums nav RPM bÄzes sistÄmas, izmantojiet oficiÄlo instalÄÅ”anas dokumentÄciju.
KopÄ ar wal-g binÄro failu rpm ir iekļauti skripti, kas importÄ mainÄ«gos no faila /etc/wal-g.d/server-s3.conf.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shUzstÄdam wal-g.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gPÄrbaudÄm wal-g versiju.
wal-g --version
wal-g version v0.2.14RediÄ£Äjam /etc/wal-g.d/server-s3.conf pÄc savu vajadzÄ«bu.
KonfigurÄcijas faili un datu faili, ko izmanto datu bÄzes klasteris, tradicionÄli tiek glabÄti kopÄ klastera datu katalogÄ, ko parasti sauc 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 # ŠŠ°ŠŗŠ¾Š¹ Š¼ŠµŃŠ¾Š“ ŃŠ¶Š°ŃŠøŃ ŠøŃŠæŠ¾Š»ŃŠ·Š¾Š²Š°ŃŃ.
KonfigurÄjot WAL-G, jÅ«s norÄdÄt WALG_DELTA_MAX_STEPS ā maksimalo posmu skaitu, par kuru dÄļ dÄlta rezerves kopija ir attÄlinÄta no bÄzes rezerves kopijas, un norÄdÄt dÄlta kopiju politiku. JÅ«s varat veikt kopiju no pÄdÄjÄs esoÅ”Äs dÄlta, vai veikt dÄlta no sÄkotnÄjÄ pilnÄ rezerves kopijas. Tas ir nepiecieÅ”ams gadÄ«jumam, kad jÅ«su datubÄzÄ pastÄvÄ«gi mainÄs viena un tÄ pati datubÄzes sastÄvdaļa, un tie paÅ”i dati nemitÄ«gi tiek mainÄ«ti.
UzstÄdam datubÄzi.
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 mcInicializÄjam datubÄzi.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKJa testÄjat uz viena servera, jums jÄmaina parametra wal_level uz archive PostgreSQL, kas ir mazÄks par 10 versiju, un uz replica, ja PostgreSQL ir 10 versija vai vecÄka.
wal_level = archiveIzveidosim WAL arhÄ«vu dÄlta rezerves kopijas ik pÄc 60 sekundÄm, izmantojot paÅ”u PostgreSQL. JÅ«su produkcijÄ bÅ«s cita vÄrtÄ«ba archive_timeout.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Komanda archive_command tiks izpildÄ«ta ik pÄc 60 sekundÄm.SÄkam PostgreSQL
systemctl start postgresql-9.6AtseviÅ”Ä·Ä konsolÄ skatÄm PostgreSQL žurnÄlus par kļūdÄm: (postgresql-Wed.log mainiet uz aktuÄlo).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logIeejam psql.
su - postgres
psqlpsql izveidojam datubÄzi.
Izveidojam tabulu datubÄzÄ test1.
create database test1;PÄrslÄdzamies uz datubÄzi test.
postgres=# c test1;Izveidojam tabulu indexing_table.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());Datu pievienoŔana.
SÄkam datu ielÄdes procesu. Gaida 10-20 minÅ«tes.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
doneObligÄti veiciet pilnÄ«gu rezerves kopiju.
su - postgres
/usr/local/bin/backup-push.shSkatÄm ierakstus tabulÄ datubÄzÄ 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+Rindkopa ir paÅ”reizÄjais laiks.
SkatÄm pilno rezerves kopiju sarakstu
/usr/local/bin/backup-list.shAtjaunoÅ”anas testÄÅ”ana
Pilnīga atjaunoŔana, izmantojot visus pieejamos WAL.
Apturam PostgreSQL.
IzmÄrdÄjam visu no mapes /var/lib/pgsql/9.6/data.
Palaižam skriptu /usr/local/bin/backup-fetch.sh no lietotÄja postgres.
su - postgres
/usr/local/bin/backup-fetch.shRezerves kopijas izguve ir pabeigta.
Pievienojam recovery.conf mapi /var/lib/pgsql/9.6/data ar sekojoŔo saturu.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'Palaižam PostgreSQL. PostgreSQL uzsÄks atjaunoÅ”anas procesu no arhÄ«va WAL, un tikai pÄc tam datubÄze tiks atvÄrta.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logAtjaunoŔana uz noteiktu laiku.
Ja vÄlamies atjaunot datubÄzi lÄ«dz noteiktai minÅ«tei, tad recovery.conf pievienojam parametru recovery_target_time ā norÄdÄm, uz kuru laiku atjaunot datubÄzi.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'PÄc atjaunoÅ”anas apskatÄm tabulu 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+00Palaižam PostgreSQL. PostgreSQL uzsÄks atjaunoÅ”anas procesu no arhÄ«va WAL, un tikai pÄc tam datubÄze tiks atvÄrta.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logTestÄÅ”ana
Ä¢enerÄjam 1GB datubÄzi, kÄ aprakstÄ«ts Å”eit.
PieprasÄm baÄka izmÄru pÄc 1GB datu Ä£enerÄÅ”anas.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd ā bezmaksas komandu rÄ«ks darbam ar datiem, kas atrodas Amazon S3 krÄtuvÄ. LietderÄ«ba ir uzrakstÄ«ta Python programmÄÅ”anas valodÄ, un tÄdÄļ var tikt izmantota gan Windows, gan Linux operÄtÄjsistÄmÄs.
UzstÄdam s4cmd.
pip install s4cmdLZ4
s4cmd --endpoint-url=http://ip-adrese-servera-minio:9000 --access-key=xxxx --secret-key=yyyy du -r s3://pg-backups
840540822 s3://pg-backups/wal_005/
840 MB lz4 formÄtÄ tikai WAL žurnÄliem
Pilns dublÄjums ar lz4 - 1GB datu
time backup_push.sh
real 0m18.582s
S3 baÄka izmÄrs pÄc pilna dublÄjuma
581480085 s3://pg-backups/basebackups_005/
842374424 s3://pg-backups/wal_005
581 MB aizÅem pilns dublÄjums.LZMA
PÄc 1GB datu Ä£enerÄÅ”anas
338413694 s3://pg-backups/wal_005/
338 MB žurnÄlu lzma formÄtÄ
Pilna dublÄjuma Ä£enerÄÅ”anas laiks
time backup_push.sh
real 5m25.054s
S3 baÄka izmÄrs
270310495 s3://pg-backups/basebackups_005/
433485092 s3://pg-backups/wal_005/
270 MB aizÅem pilns dublÄjums lzma formÄtÄ.Brotli
PÄc 1GB datu Ä£enerÄÅ”anas
459229886 s3://pg-backups/wal_005/
459 MB žurnÄlu brotli formÄtÄ
Pilna dublÄjuma Ä£enerÄÅ”anas laiks
real 0m23.408s
S3 baÄka izmÄrs
312960942 s3://pg-backups/basebackups_005/
459309262 s3://pg-backups/wal_005/
312 MB aizÅem pilns dublÄjums brotli formÄtÄ.
SalÄ«dzinÄjums rezultÄtiem diagrammÄ.

KÄ redzam, Brotli izmÄrs ir salÄ«dzinÄms ar LZMA, bet dublÄjums tiek veikts laika ietvaros LZ4.
Krievu valodas PostgreSQL kopienas Äats:
Lūdzu, novietojiet zvaigzni Github, ja izmantojat.
Avots: habr.com
