Pagpaila sa wal-g PostgreSQL backup system

WAL-G 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 WAL-E, 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 WAL-G 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: Among gipadali ang pag-backup. Yandex lecture

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 minio

Pag-edit sa AccessKey ug SecretKey sa /etc/minio/minio.conf

vi /etc/minio/minio.conf

Kung 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:9000

Ilunsad ang Minio

systemctl start minio

Adto sa Minio web interface http://ip-адрСс-сСрвСра-minio:9000 ug paghimo og balde (pananglitan, pg-backups).

DB server

Gi-assemble nako ang WAL-G sa rpm (Anton Patsev). Github, Fedora COPR.

Para sa mga walay RPM-based system, gamita ang opisyal mga instruksyon 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.sh

I-install ang wal-g.

yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g

Pagsusi sa bersyon sa wal-g.

wal-g --version
wal-g version v0.2.14

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

Atong sugdan ang database.

/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK

Kung 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 = archive

Atong 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.6

Sa 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.log

Adto ta sa psql.

su - postgres
psql

Naghimo 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;
done

Siguruha nga maghimo usa ka hingpit nga backup.

su - postgres
/usr/local/bin/backup-push.sh

Atong 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.sh

Pagsulay 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.sh

Nakompleto 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.log

Pagbawi 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+00

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

Pagsulay

Naghimo kami og 1GB nga database sama sa gihulagway dinhi https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

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 MB

s4cmd β€” бСсплатный инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, располоТСнными Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Amazon S3. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° написана Π½Π° языкС программирования python, ΠΈ благодаря этому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈ Windowsug Linux.

I-install ang 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

Pagkumpara sa mga resulta sa usa ka graph.

Pagpaila sa wal-g PostgreSQL backup system

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: https://t.me/pgsql

Palihug paghatag ug bituon sa Github kung mogamit ka wal-g

Source: www.habr.com

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS πŸ”₯ Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster