ื”ืงื“ืžื” ืฆื• ื“ื™ wal-g PostgreSQL ื‘ืึทืงืึทืคึผ ืกื™ืกื˜ืขื

WAL-G ืื™ื– ืึท ืคึผืฉื•ื˜ ืื•ืŸ ืขืคืขืงื˜ื™ื•ื• ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ื‘ืึทืงื™ื ื’ ืึทืจื•ื™ืฃ PostgreSQL ืฆื• ื“ื™ ื•ื•ืึธืœืงืŸ. ืื™ืŸ ื˜ืขืจืžื™ื ืขืŸ ืคื•ืŸ ื–ื™ื™ึทืŸ ื”ื•ื™ืคึผื˜ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™, ืขืก ืื™ื– ื“ืขืจ ืกืึทืงืกืขืกืขืจ ืฆื• ื“ื™ ืคืึธืœืงืก ื’ืขืฆื™ื™ึทื’ ื•ื•ืืœ-ืข, ืึธื‘ืขืจ ืจื™ืจื™ื™ื˜ ืื™ืŸ Go. ืึธื‘ืขืจ WAL-G ื”ืื˜ ืื™ื™ืŸ ื•ื•ื™ื›ื˜ื™ืง ื ื™ื™ึทืข ืฉื˜ืจื™ืš: ื“ืขืœื˜ืึท ืงืืคื™ืขืก. ื“ืขืœื˜ืึท ืงืืคื™ืขืก WAL-G ืงืจืึธื ื‘ืœืขื˜ืขืจ ืคื•ืŸ ื˜ืขืงืขืก ื•ื•ืึธืก ื”ืึธื‘ืŸ ื’ืขื‘ื™ื˜ืŸ ื–ื™ื ื˜ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ื‘ืึทืงืึทืคึผ. WAL-G ื™ืžืคึผืœืึทืžืึทื ืฅ ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื˜ืขืงื ืึทืœืึทื“ื–ืฉื™ื– ืคึฟืึทืจ ืคึผืึทืจืึทืœืขืœื™ื–ื™ื ื’ ื‘ืึทืงืึทืคึผืก. WAL-G ืื™ื– ืคื™ืœ ืคืึทืกื˜ืขืจ ื•ื•ื™ WAL-E.

ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ื•ื•ื™ wal-g ืึทืจื‘ืขื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ: ืžื™ืจ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ ื‘ืึทืงืึทืคึผ. ื™ืึทื ื“ืขืงืก ืœืขืงืฆื™ืข

ื“ื™ S3 ืกื˜ืึธืจื™ื“ื–ืฉ ืคึผืจืึธื˜ืึธืงืึธืœ ืื™ื– ื’ืขื•ื•ืืจืŸ ืคืึธืœืงืก ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ ื“ืึทื˜ืŸ. ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ S3 ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืึทืงืกืขืก ื“ื•ืจืš ืึทืคึผื™, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ืคืœืขืงืกืึทื‘ืึทืœ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืขืคื ื˜ืœืขืš ืœื™ื™ืขื ืขืŸ ืึทืงืกืขืก, ื‘ืฉืขืช ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ืŸ ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ ืึทืงืขืจื– ื‘ืœื•ื™ื– ื“ื•ืจืš ืึธื˜ืขืจื™ื™ื–ื“ ืžืขื ื˜ืฉืŸ.

ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืขืคื ื˜ืœืขืš ืื•ืŸ ืคึผืจื™ื•ื•ืึทื˜ ืกื˜ืึธืจื™ื“ื–ืฉ ื™ืžืคึผืœืึทืžืึทื ืฅ ื•ื•ืึธืก ื ื•ืฆืŸ ื“ื™ S3 ืคึผืจืึธื˜ืึธืงืึธืœ. ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ืึท ืคืึธืœืงืก ืœื™ื™ื–ื•ื ื’ ืคึฟืึทืจ ืึธืจื’ืึทื ื™ื™ื–ื™ื ื’ ืงืœื™ื™ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืคืึทืกื™ืœืึทื˜ื™ื– - ืžื™ื ื™ืึธ.

ื ืื™ื™ืŸ PostgreSQL ืกืขืจื•ื•ืขืจ ืื™ื– ืคึผืึทืกื™ืง ืคึฟืึทืจ ื˜ืขืกื˜ื™ื ื’ wal-g, ืื•ืŸ Minio ืื™ื– ื’ืขื ื™ืฆื˜ ื•ื•ื™ ืึท ืคืึทืจื‘ื™ื™ึทื˜ ืคึฟืึทืจ S3.

ืžื™ื ื™ืึธ ืกืขืจื•ื•ื™ืจืขืจ

ื™ื ืกื˜ืึทืœื™ืจืŸ ืžื™ื ื™ืึธ

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 ืื™ื™ื“ืขืจ ืžื™ื ื™ืึธ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ื•ื™ืฉืŸ

--address 127.0.0.1:9000

--address 0.0.0.0:9000

ืงืึทื˜ืขืจ ืžื™ื ื™ืึธ

systemctl start minio

ื’ื™ื™ืŸ ืฆื• ื“ื™ ืžื™ื ื™ืึธ ื•ื•ืขื‘ ืฆื•ื‘ื™ื ื“ http://ip-ะฐะดั€ะตั-ัะตั€ะฒะตั€ะฐ-minio:9000 ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ืขืžืขืจ (ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, pg-backups).

ื“ื‘ ืกืขืจื•ื•ืขืจ

ืื™ืš ืึทืกืขืžื‘ืึทืœ WAL-G ืื™ืŸ ืจืคึผื (ืึทื ื˜ืึธืŸ ืคึผืึทื˜ืกืขื•ื•). ื’ื™ื˜ื”ื•ื‘, ืคืขื“ืึธืจืึท COPR.

ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืึท RPM-ื‘ืื–ื™ืจื˜ ืกื™ืกื˜ืขื, ื ื•ืฆืŸ ื“ื™ ื‘ืึทืึทืžื˜ืขืจ ืœื™ืžืขื“ ืื•ื™ืฃ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’.

ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ื™ wal-g ื‘ื™ื™ื ืขืจื™, ื“ื™ ืจืคึผื ื›ึผื•ืœืœ ืกืงืจื™ืคึผืก ื•ื•ืึธืก ืึทืจื™ื™ึทื ืคื™ืจ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืคื•ืŸ ื“ื™ /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.

ืฉืึทืคึฟืŸ ืึท ื˜ื™ืฉ ืื™ืŸ ื“ื™ ื˜ืขืกื˜1 ื“ืึทื˜ืึทื‘ื™ื™ืก.

create database test1;

ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ื“ื™ ืคึผืจืึธื‘ืข ื“ืึทื˜ืึทื‘ื™ื™ืก.

postgres=# c test1;

ืฉืึทืคึฟืŸ ืึท ื˜ื™ืฉ ื™ื ื“ืขืงืกื™ื ื’_ื˜ืึทื‘ืœืข.

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 ืคึฟื•ืŸ ื“ื™ ืคึผืึธืกื˜ื’ืจืขืก ื‘ืึทื ื™ืฆืขืจ.

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.conf ืžื™ืจ ืœื™ื™ื’ืŸ ื“ื™ ืจืขืงืึธื•ื•ืขืจื™_ื˜ืึทืจื’ืขื˜_ื˜ื™ืžืข ืคึผืึทืจืึทืžืขื˜ืขืจ - ืžื™ืจ ืึธื ื•ื•ื™ื™ึทื–ืŸ ืื™ืŸ ื•ื•ืึธืก ืฆื™ื™ื˜ ืฆื• ื•ืžืงืขืจืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก.

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

ื ืึธืš ืึธืคึผื–ื•ืš, ืงื•ืง ืื™ืŸ ื“ื™ ื™ื ื“ืขืงืกื™ื ื’_ื˜ืึทื‘ืœืข ื˜ื™ืฉ

 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

ื˜ืขืกื˜ื™ื ื’

ืžื™ืจ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืึท 1GB ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ืึธ https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

ืžื™ืจ ื‘ืขื˜ืŸ ื“ื™ ืขืžืขืจ ื’ืจื™ื™ืก ื ืึธืš ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ 1 ื’ื‘ ืคื•ืŸ ื“ืึทื˜ืŸ.

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

s4cmd โ€” ะฑะตัะฟะปะฐั‚ะฝั‹ะน ะธะฝัั‚ั€ัƒะผะตะฝั‚ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ ะดะปั ั€ะฐะฑะพั‚ั‹ ั ะดะฐะฝะฝั‹ะผะธ, ั€ะฐัะฟะพะปะพะถะตะฝะฝั‹ะผะธ ะฒ ั…ั€ะฐะฝะธะปะธั‰ะต Amazon S3. ะฃั‚ะธะปะธั‚ะฐ ะฝะฐะฟะธัะฐะฝะฐ ะฝะฐ ัะทั‹ะบะต ะฟั€ะพะณั€ะฐะผะผะธั€ะพะฒะฐะฝะธั python, ะธ ะฑะปะฐะณะพะดะฐั€ั ัั‚ะพะผัƒ ะผะพะถะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒัั ะฒ ะพะฟะตั€ะฐั†ะธะพะฝะฝั‹ั… ัะธัั‚ะตะผะฐั… ะธ Windowsืื•ืŸ Linux.

ื™ื ืกื˜ืึทืœื™ืจืŸ s4cmd

pip install s4cmd

ืœื–ืงืกื ื•ืžืงืก

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 ะœะ‘ ะทะฐะฝะธะผะฐะตั‚ ะฟะพะปะฝั‹ะน ะฑะตะบะฐะฟ

ืœื–ืžืึท

ะŸะพัะปะต ะณะตะฝะตั€ะฐั†ะธะธ 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

ื‘ืจืึธื˜ืœื™

ะŸะพัะปะต ะณะตะฝะตั€ะฐั†ะธะธ 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

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster