ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ wal-g ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² ΡΡΠ°ΡΠΈΡΡΠ°:
ΠΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ S3 ΡΡΠ°Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ΄Π½ΠΎ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° S3 Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ ΡΡΠ΅Π· API, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π³ΡΠ²ΠΊΠ°Π²ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΡ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, Π΄ΠΎΠΊΠ°ΡΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΎΡ ΠΎΡΠΎΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π»ΠΈΡΠ°.
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ ΠΈ ΡΠ°ΡΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° S3. ΠΠ½Π΅Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°Π»ΡΠΊ ΡΠΊΠ»Π°Π΄ - Minio.
ΠΠ΄ΠΈΠ½ΠΈΡΠ΅Π½ PostgreSQL ΡΡΡΠ²ΡΡ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° wal-g, Π° Minio ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° S3.
ΠΠΈΠ½ΠΈΠΎ ΡΡΡΠ²ΡΡ
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° 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
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° Minio
DB ΡΡΡΠ²ΡΡ
Π‘Π³Π»ΠΎΠ±ΡΠ²Π°ΠΌ WAL-G Π² ΠΎΠ±ΠΎΡΠΎΡΠΈ (ΠΠ½ΡΠΎΠ½ ΠΠ°ΡΠ΅Π²).
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ°Ρ RPM-Π±Π°Π·ΠΈΡΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»Π½Π°ΡΠ°
ΠΠ°Π΅Π΄Π½ΠΎ Ρ Π΄Π²ΠΎΠΈΡΠ½ΠΈΡ ΡΠ°ΠΉΠ» wal-g, rpm ΡΡΠ΄ΡΡΠΆΠ° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΎΡ ΡΠ°ΠΉΠ»Π° /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
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ 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-gd/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 - Π±ΡΠΎΡΡ ΡΡΡΠΏΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π΄Π΅Π»ΡΠ° Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ ΡΠΏΡΡΠΌΠΎ Π±Π°Π·ΠΎΠ²ΠΎΡΠΎ Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅, ΠΈ ΠΏΠΎΡΠΎΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° Π΄Π΅Π»ΡΠ° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅. ΠΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΠΎΠΏΠΈΠ΅ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° Π΄Π΅Π»ΡΠ°, ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΡΠ΅ Π΄Π΅Π»ΡΠ° ΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ ΠΏΡΠ»Π΅Π½ Π°ΡΡ ΠΈΠ². Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΠΊΠΎΠ³Π°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
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, Π·Π° Π΄Π° Π°ΡΡ ΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π·Π° PostgreSQL ΠΏΠΎΠ΄ Π²Π΅ΡΡΠΈΡ 10 ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° Π·Π° 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;
ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΠ΅ΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
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
ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π΅ Π·Π°Π²ΡΡΡΠ΅Π½ΠΎ.
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ recovery.conf ΠΊΡΠΌ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° /var/lib/pgsql/9.6/data ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ PostgreSQL. PostgreSQL ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΎΡ Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½ΠΈΡ WAL ΠΈ Π΅Π΄Π²Π° ΡΠΎΠ³Π°Π²Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈ.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
ΠΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅.
ΠΠΊΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΌΠΈΠ½ΡΡΠ°, ΡΠΎΠ³Π°Π²Π° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° recovery_target_time ΠΊΡΠΌ recovery.conf - ΠΏΠΎΡΠΎΡΠ²Π°ΠΌΠ΅ Π² ΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
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 ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΎΡ Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½ΠΈΡ WAL ΠΈ Π΅Π΄Π²Π° ΡΠΎΠ³Π°Π²Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈ.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Π’Π΅ΡΡΠ²Π°Π½Π΅
ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ 1 GB, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΡΠΊ
ΠΠΈΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΠΌΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΊΠΎΡΠ°ΡΠ° ΡΠ»Π΅Π΄ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° 1 GB Π΄Π°Π½Π½ΠΈ.
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, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com