Fampidirana ny rafitra backup wal-g PostgreSQL

WAL-G dia fitaovana tsotra sy mahomby hanohanana ny PostgreSQL amin'ny rahona. Raha ny amin'ny asany lehibe indrindra dia izy no mpandova ny fitaovana malaza WAL-E, fa naverina nosoratana tamin'ny Go. Saingy misy endri-javatra vaovao iray manan-danja ao amin'ny WAL-G - kopia delta. kopia delta WAL-G mitahiry pejy misy rakitra niova hatramin'ny dikan-teny backup teo aloha. Ny WAL-G dia manatanteraka teknolojia marobe mba hampitoviana ny backups. Ny WAL-G dia haingana kokoa noho ny WAL-E.

Ny antsipiriany momba ny fomba fiasan'ny wal-g dia hita ao amin'ny lahatsoratra: Manao overclock ny backup izahay. Yandex lahateny

Ny protocole fitehirizana S3 dia lasa malaza amin'ny fitahirizana angona. Ny iray amin'ireo tombony amin'ny S3 dia ny fahafahana miditra amin'ny alΓ lan'ny API, izay ahafahanao mandamina fifandraisana moramora amin'ny fitahirizana, ao anatin'izany ny fidirana amin'ny besinimaro, ary ny fanavaozana ny vaovao ao amin'ny fitahirizana dia tsy misy afa-tsy olona nahazo alalana.

Misy fampiharana fitahirizana ho an'ny daholobe sy tsy miankina izay mampiasa ny protocol S3. Androany isika dia hijery vahaolana malaza amin'ny fikarakarana fitahirizana kely - Minio.

Ny mpizara PostgreSQL tokana dia tsara amin'ny fitsapana wal-g, ary ny Minio dia ampiasaina ho solon'ny S3.

Minio Server

Minio fametrahana

yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio

Ahitsio AccessKey sy SecretKey ao amin'ny /etc/minio/minio.conf

vi /etc/minio/minio.conf

Raha tsy mampiasa nginx alohan'ny Minio ianao dia mila miova

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Famoahana Minio

systemctl start minio

Mandehana any amin'ny tranonkala Minio http://ip-адрСс-сСрвСра-minio:9000 ary mamorona siny (ohatra, pg-backups).

Mpizara DB

WAL-G in rpm no nanangona ahy (Anton Patsev). Github, Fedora COPR.

Izay tsy manana rafitra mifototra amin'ny RPM dia ampiasao ny ofisialy TOROLALANA amin'ny fametrahana.

Miaraka amin'ny binary wal-g, rpm dia misy sora-baventy izay manafatra varimbazaha avy amin'ny rakitra /etc/wal-gd/server-s3.conf.

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

Mametraka walg.

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

Fanamarinana ny version wal-g.

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

Amboary /etc/wal-gd/server-s3.conf araka izay ilainao.

Ny rakitra fikirakirana sy ny rakitra data ampiasain'ny cluster database dia voatahiry miaraka amin'ny fomba mahazatra ao amin'ny lahatahiry data cluster, izay matetika antsoina hoe 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 # Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ сТатия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Rehefa configuring WAL-G, dia mamaritra WALG_DELTA_MAX_STEPS - ny isan'ny dingana izay ny delta backup no ambony indrindra avy amin'ny fototra backup, ary mamaritra ny delta kopia politika. Na manao dika mitovy amin'ny delta efa misy farany ianao, na manao delta avy amin'ny backup feno tany am-boalohany. Ilaina izany raha toa ka miova foana ny singa mitovy amin'ny angon-drakitra ao amin'ny angon-drakitrao, ny angon-drakitra mitovy dia miova tsy tapaka.

Fametrahana ny angon-drakitra.

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

Manomboka ny angon-drakitra izahay.

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

Raha manao fitiliana amin'ny mpizara 1 ianao, dia mila amboarina ny paramètre wal_level mba ho tahiry ho an'ny PostgreSQL latsaky ny version 10, ary kopia ho an'ny PostgreSQL version 10 no ho miakatra.

wal_level = archive

Andao hanao backup ny arsiva WAL isaky ny 60 segondra amin'ny alΓ lan'ny PostgreSQL mihitsy. Amin'ny prod dia hanana sanda archive_timeout hafa ianao.

archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ΠšΠ°ΠΆΠ΄Ρ‹Π΅ 60 сСкунд Π±ΡƒΠ΄Π΅Ρ‚ выполнятся ΠΊΠΎΠΌΠ°Π½Π΄Π° archive_command.

Manomboka PostgreSQL

systemctl start postgresql-9.6

Ao amin'ny console misaraka, mijery ny PostgreSQL logs momba ny fahadisoana isika: (ova postgresql-Wed.log ho an'ny ankehitriny).

tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Andao ho any psql.

su - postgres
psql

Mamorona tahiry ao amin'ny psql

Mamorona tabilao ao amin'ny test database1.

create database test1;

Hiverina any amin'ny test database.

postgres=# c test1;

Mamorona ny latabatra indexing_table izahay.

test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());

Manampy angona.

Manomboka mampiditra angona izahay. Miandry 10-20 minitra izahay.

#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done

Ataovy azo antoka fa manao backup feno.

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

Isika dia mijery ny firaketana ao amin'ny latabatra ao amin'ny 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+

Ny tady dia ny fotoana ankehitriny.

Jereo ny lisitry ny backups feno

/usr/local/bin/backup-list.sh

Fitsapana fanarenana

Fahasitranana feno miaraka amin'ny fanodinana ny WAL rehetra misy.

Atsaharo ny Postgresql.

Fafao ny zava-drehetra ao amin'ny lahatahiry /var/lib/pgsql/9.6/data.

Alefaso ny script /usr/local/bin/backup-fetch.sh ho mpampiasa postgres.

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

Vita ny fitrandrahana backup.

Ampio recovery.conf amin'ny lahatahiry /var/lib/pgsql/9.6/data miaraka amin'ity atiny manaraka ity.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'

Manomboka PostgreSQL izahay. PostgreSQL dia hanomboka ny dingana fanarenana avy amin'ny WAL voatahiry, ary avy eo vao misokatra ny angon-drakitra.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Famerenana mandritra ny fotoana iray.

Raha te-hamerina ny angon-drakitra hatramin'ny minitra iray isika, dia ampidirintsika ao amin'ny recovery.conf ny mari-pamantarana recovery_target_time - manondro ny fotoana hamerenana ny tahiry.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'

Aorian'ny fanarenana dia jereo ny tabilao 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

Manomboka PostgreSQL izahay. PostgreSQL dia hanomboka ny dingana fanarenana avy amin'ny WAL voatahiry, ary avy eo vao misokatra ny angon-drakitra.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

fitiliana

Mamorona tahiry 1GB araka ny voalaza eto https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Mangataka ny haben'ny siny rehefa avy namorona angona 1GB.

postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB

s4cmd dia fitaovana andalana maimaim-poana hiasa amin'ny angon-drakitra monina ao amin'ny fitahirizana Amazon S3. Ny fitaovana dia nosoratana tamin'ny fiteny fandaharana python, ary noho izany dia azo ampiasaina amin'ny rafitra fiasa Windows sy Linux.

Fametrahana 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

Fampitahana ny valiny eo amin'ny tabilao.

Fampidirana ny rafitra backup wal-g PostgreSQL

Araka ny hitanao, Brotli dia mitovy amin'ny haben'ny LZMA, fa ny backup dia atao amin'ny fotoana LZ4.

Chat an'ny vondrom-piarahamonina PostgreSQL miteny Rosiana: https://t.me/pgsql

Mba omeo kintana ny Github raha mampiasa ianao wal-g

Source: www.habr.com

Add a comment