Π΅ ΠΏΡΠΎΡΡ ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° PostgreSQL Π² ΠΎΠ±Π»Π°ΡΠΈΡΠ΅. ΠΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠΎΠΉ Π΅ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ , Π½ΠΎ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Go. ΠΠΎ ΠΈΠΌΠ° Π΅Π΄Π½Π° Π²Π°ΠΆΠ½Π° Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ Π² WAL-G - Π΄Π΅Π»ΡΠ° ΠΊΠΎΠΏΠΈΡ. Π΄Π΅Π»ΡΠ° ΠΊΠΎΠΏΠΈΡ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Π°ΡΡ ΠΈΠ²Π°. WAL-G ΠΏΡΠΈΠ»Π°Π³Π° Π΄ΠΎΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π·Π΅ΡΠ²Π½ΠΈ ΠΊΠΎΠΏΠΈΡ. WAL-G Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡΡΠ· ΠΎΡ WAL-E.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ 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 ΠΈ ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ pg-backups).
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 MBs4cmd β Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Amazon S3. Π£ΡΠΈΠ»ΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ python, ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ WindowsΠ Linux.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ s4cmd
pip install s4cmdLZ4
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 ΠΌΠ± Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ Π±Π΅ΠΊΠ°ΠΏ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ lzmaBrotli
ΠΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ 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
