เปเบ™เบฐเบ™เปเบฒเบฅเบฐเบšเบปเบšเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡ wal-g PostgreSQL

WAL-G เป€เบ›เบฑเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เปเบฅเบฐโ€‹เบ›เบฐโ€‹เบชเบดเบ”โ€‹เบ—เบดโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฎเบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ PostgreSQL เบเบฑเบšโ€‹เบŸเบฑเบ‡โ€‹เป„เบ”เป‰โ€‹. เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบกเบฑเบ™, เบกเบฑเบ™เปเบกเปˆเบ™เบœเบนเป‰เบชเบทเบšเบ—เบญเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ™เบดเบเบปเบก WAL-E, เปเบ•เปˆเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™ Go. เปเบ•เปˆ WAL-G เบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเบกเปˆเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบซเบ™เบถเปˆเบ‡: เบชเปเบฒเป€เบ™เบปเบฒ delta. เบชเบณเป€เบ™เบปเบฒ Delta WAL-G เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบซเบ™เป‰เบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™. WAL-G เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเป€เบ—เบเป‚เบ™เป‚เบฅเบเบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบฐเบซเบ™เบฒเบ™. WAL-G เปเบกเปˆเบ™เป„เบงเบเบงเปˆเบฒ WAL-E เบซเบผเบฒเบ.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ wal-g เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก: เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เบเบฒเบ™เบšเบฑเบ™เบเบฒเบ Yandex

เป‚เบ›เป‚เบ•เบ„เบญเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ S3 เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™. เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ‚เปเป‰เบ”เบตเบ‚เบญเบ‡ S3 เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบœเปˆเบฒเบ™ API, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เปเบกเปˆเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เป‚เบ”เบเบœเบนเป‰เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเปƒเบŠเป‰เป‚เบ›เป‚เบ•เบ„เบญเบ™ S3. เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ™เบดเบเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ - Minio.

เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ PostgreSQL เบ”เบฝเบงเปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš wal-g, เปเบฅเบฐ Minio เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบชเปเบฒเบฅเบฑเบš S3.

เป€เบŠเบตเบšเป€เบงเบต 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

เป„เบ›เบ—เบตเปˆเบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเป€เบงเบฑเบš Minio http://ip-ะฐะดั€ะตั-ัะตั€ะฒะตั€ะฐ-minio:9000 เปเบฅเบฐเบชเป‰เบฒเบ‡ bucket (เบ•เบปเบงเบขเปˆเบฒเบ‡, pg-backups).

DB server

เบ‚เป‰เบญเบเบ›เบฐเบเบญเบš WAL-G เปƒเบ™ rpm (Anton Patsev). GitHub, Fedora COPR.

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเบกเบตเบฅเบฐเบšเบปเบš RPM, เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡.

เบ„เบฝเบ‡เบ„เบนเปˆเบเบฑเบš wal-g binary, 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 - เบˆเปเบฒเบ™เบงเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ delta เปเบกเปˆเบ™เบขเบนเปˆเป„เบเบ—เบตเปˆเบชเบธเบ”เบˆเบฒเบเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™, เปเบฅเบฐเบฅเบฐเบšเบธเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบชเปเบฒเป€เบ™เบปเบฒ delta. เบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเป€เบฎเบฑเบ”เบชเปเบฒเป€เบ™เบปเบฒเบˆเบฒเบ delta เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบซเบผเบทเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ” delta เบˆเบฒเบเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบšเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเป€เบซเบกเบตเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

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, เปเบฅเบฐ replica เบชเปเบฒเบฅเบฑเบš PostgreSQL เบฎเบธเปˆเบ™ 10 เปเบฅเบฐเป€เบเบปเปˆเบฒเบเบงเปˆเบฒ.

wal_level = archive

เปƒเบซเป‰ backup 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

เปƒเบ™ console เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบ—เบถเบ 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.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 เบˆเบฐเป€เบ›เบตเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบŸเบทเป‰เบ™เบ•เบปเบงเบˆเบฒเบ 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

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster