Знакомство с wal-g систСмой бСкапирования PostgreSQL

WAL-G β€” простой ΠΈ эффСктивный инструмСнт для Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования PostgreSQL Π² ΠΎΠ±Π»Π°ΠΊΠ°. По своСй основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ являСтся наслСдником популярного инструмСнта WAL-E, Π½ΠΎ пСрСписанным Π½Π° Go. Но Π² WAL-G Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ваТная новая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” Π΄Π΅Π»ΡŒΡ‚Π°-ΠΊΠΎΠΏΠΈΠΈ. Π”Π΅Π»ΡŒΡ‚Π°-ΠΊΠΎΠΏΠΈΠΈ WAL-G хранят страницы Ρ„Π°ΠΉΠ»ΠΎΠ², измСнившиСся с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ. Π’ WAL-G Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ довольно ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΏΠΎ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡŽ бэкапов. WAL-G Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС Ρ‡Π΅ΠΌ, WAL-E.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ wal-g ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅: РазгоняСм бэкап. ЛСкция ЯндСкса

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» хранСния S3 стал популярным для хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Одно ΠΈΠ· прСимущСств S3 β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа Ρ‡Π΅Ρ€Π΅Π· API, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎΠ΅ взаимодСйствиС с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π»ΠΈΡ†Π°ΠΌΠΈ.

БущСствуСт нСсколько ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ частных Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ S3. БСгодня ΠΌΡ‹ рассмотрим популярноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ°Π»Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ β€” Minio.

Для тСстирования wal-g ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ сСрвСр PostgreSQL, Π° Π² качСствС Π·Π°ΠΌΠ΅Π½Ρ‹ S3 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Minio.

Π‘Π΅Ρ€Π²Π΅Ρ€ Minio

Установка Minio

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

ΠŸΡ€Π°Π²ΠΈΠΌ AccessKey ΠΈ SecretKey Π² /etc/minio/minio.conf

vi /etc/minio/minio.conf

Если Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nginx ΠΏΠ΅Ρ€Π΅Π΄ Minio, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ

--address 127.0.0.1:9000

--address 0.0.0.0:9000

ЗапускаСм Minio

systemctl start minio

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² web-интСрфСйс Minio http://ip-адрСс-сСрвСра-minio:9000 ΠΈ создаСм Π±Π°ΠΊΠ΅Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pg-backups).

Π‘Π΅Ρ€Π²Π΅Ρ€ Π‘Π”

WAL-G Π² rpm ΡΠΎΠ±ΠΈΡ€Π°ΡŽ я (Антон ΠŸΠ°Ρ†Π΅Π²). Github, Fedora COPR.

Π£ ΠΊΠΎΠ³ΠΎ Π½Π΅ RPM-based систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ установкС.

ВмСстС с Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠΌ wal-g Π² rpm ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° /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.sh

УстанавливаСм wal-g.

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

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ wal-g.

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

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ /etc/wal-g.d/server-s3.conf ΠΏΠΎ свои Π½ΡƒΠΆΠ΄Ρ‹.

Π€Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ кластСром Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ хранятся вмСстС Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π΄Π°Π½Π½Ρ‹Ρ… кластСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ 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 # Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ сТатия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈ настройкС WAL-G Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ WALG_DELTA_MAX_STEPS β€” количСство шагов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ максимально отстоит ΠΎΡ‚ base-бэкапа Π΄Π΅Π»ΡŒΡ‚Π°-бэкап, ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π΄Π΅Π»ΡŒΡ‚Π°-ΠΊΠΎΠΏΠΈΠΈ. Π›ΠΈΠ±ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ копию с послСднСй ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π΅Π»ΡŒΡ‚Ρ‹, Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Π΄Π΅Π»ΡŒΡ‚Ρƒ ΠΎΡ‚ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ бэкапа. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π° Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… всСгда мСняСтся ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π‘Π”, ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ постоянно ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

УстанавливаСм Π‘Π”.

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π±Π΄.

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

Если Π²Ρ‹ тСстируСтС Π½Π° 1 сСрвСрС, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wal_level Π½Π° archive для PostgreSQL мСньшС 10 вСрсии, ΠΈ replica для PostgreSQL 10 вСрсии ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅.

wal_level = archive

Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π±Π΅ΠΊΠ°ΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ WAL Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 60 сСкунд с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ самого PostgreSQL. На ΠΏΡ€ΠΎΠ΄Π΅ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ archive_timeout.

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

Π‘Ρ‚Π°Ρ€Ρ‚ΡƒΠ΅ΠΌ PostgreSQL

systemctl start postgresql-9.6

Π’ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ консоли смотрим Π»ΠΎΠ³ΠΈ PostgreSQL Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ошибок: (postgresql-Wed.log мСняСтС Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ).

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

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² psql.

su - postgres
psql

Π’ psql создаСм Π‘Π”.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² Π±Π΄ test1.

create database test1;

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° Π±Π΄ test.

postgres=# c test1;

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ indexing_table.

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

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

ЗапускаСм вставку Π΄Π°Π½Π½Ρ‹Ρ…. Π–Π΄Π΅ΠΌ 10-20 ΠΌΠΈΠ½ΡƒΡ‚.

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

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π±Π΅ΠΊΠ°ΠΏ.

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

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π² Π±Π΄ 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+

Π‘Ρ‚Ρ€ΠΎΠΊΠ° это Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ список ΠΏΠΎΠ»Π½Ρ‹Ρ… Π±Π΅ΠΊΠ°ΠΏΠΎΠ²

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

ВСстированиС восстановлСния

ПолноС восстановлСниС с Π½Π°ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ всСх доступных WAL.

ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Postgresql.

УдаляСм всС из папки /var/lib/pgsql/9.6/data.

ЗапускаСм скрипт /usr/local/bin/backup-fetch.sh ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ postgres.

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

Backup extraction complete.

ДобавляСм recovery.conf Π² ΠΏΠ°ΠΏΠΊΡƒ /var/lib/pgsql/9.6/data со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым.

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

ЗапускаСм PostgreSQL. PostgreSQL запустит процСсса recovery ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Ρ… WAL, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π±Π°Π·Π° откроСтся.

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

ВосстановлСниС Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя.

Если Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, Ρ‚ΠΎ Π² recovery.conf добавляСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ recovery_target_time β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅ врСмя Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ.

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

ПослС восстановлСния смотрим Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ 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

ЗапускаСм PostgreSQL. PostgreSQL запустит процСсса recovery ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Ρ… WAL, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π±Π°Π·Π° откроСтся.

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

ВСстированиС

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ 1GB Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ описано Ρ‚ΡƒΡ‚ https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°ΠΊΠ΅Ρ‚Π° послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ 1GB Π΄Π°Π½Π½Ρ‹Ρ….

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

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

УстанавливаСм 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

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅.

Знакомство с wal-g систСмой бСкапирования PostgreSQL

Как Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Brotli сопоставим ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ с LZMA, Π½ΠΎ Π±Π΅ΠΊΠ°ΠΏ выполняСтся Π·Π° врСмя LZ4.

Π§Π°Ρ‚ русскоязычного сообщСства PostgreSQL: https://t.me/pgsql

ΠŸΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅, поТалуйста, Π·Π²Π΅Π·Π΄Ρƒ Π½Π° Github, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ wal-g

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com