ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ 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
Π‘Π΅ΡΠ²Π΅Ρ ΠΠ
WAL-G Π² rpm ΡΠΎΠ±ΠΈΡΠ°Ρ Ρ (ΠΠ½ΡΠΎΠ½ ΠΠ°ΡΠ΅Π²).
Π£ ΠΊΠΎΠ³ΠΎ Π½Π΅ 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 Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΡΡ
ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°ΠΊΠ΅ΡΠ° ΠΏΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ 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
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅.
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Brotli ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Ρ LZMA, Π½ΠΎ Π±Π΅ΠΊΠ°ΠΏ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π° Π²ΡΠ΅ΠΌΡ LZ4.
Π§Π°Ρ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° PostgreSQL:
ΠΠΎΡΡΠ°Π²ΡΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π·Π²Π΅Π·Π΄Ρ Π½Π° Github, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com