Nhanganyaya kune wal-g PostgreSQL backup system

WAL-G chishandiso chiri nyore uye chinoshanda chekutsigira PostgreSQL kumakore. Panyaya yekushanda kwayo kukuru, ndiyo mugari wenhaka yechishandiso chakakurumbira WAL-E, asi yakanyorwazve muna Go. Asi pane chinhu chitsva chakakosha muWAL-G - delta makopi. delta makopi WAL-G 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: Isu tinovhara iyo backup. Yandex hurukuro

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 http://ip-адрСс-сСрвСра-minio:9000 uye gadzira bhaketi (somuenzaniso, pg-backups).

DB server

WAL-G mu rpm yakaunganidzwa neni (Anton Patsev). Github, Fedora COPR.

Ndiani asina RPM-based system, shandisa mukuru mirayiridzo 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.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 https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

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.

Nhanganyaya kune wal-g PostgreSQL backup system

Sezvauri kuona, Brotli inofananidzwa muhukuru neLZMA, asi backup inoitwa munguva yeLZ4.

Chat yenharaunda inotaura chiRussian PostgreSQL: https://t.me/pgsql

Ndokumbira upe nyeredzi kuGithub kana ukashandisa wal-g

Source: www.habr.com

Voeg