wal-g PostgreSQL เดฌเดพเด•เตเด•เดชเตเดชเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด†เดฎเตเด–เด‚

WAL-G PostgreSQL-เดจเต† เด•เตเดฒเต—เดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฌเดพเด•เตเด•เดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฒเดณเดฟเดคเดตเตเด‚ เดซเดฒเดชเตเดฐเดฆเดตเตเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต. เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดคเต เดœเดจเดชเตเดฐเดฟเดฏ เด‰เดชเด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด…เดตเด•เดพเดถเดฟเดฏเดพเดฃเต เดตเดพเตฝ-เด‡, เดŽเดจเตเดจเดพเตฝ เด—เต‹เดฏเดฟเตฝ เดฎเดพเดฑเตเดฑเดฟเดฏเต†เดดเตเดคเดฟ. เดŽเดจเตเดจเดพเตฝ WAL-G - เดกเต†เตฝเดฑเตเดฑ เดชเด•เตผเดชเตเดชเตเด•เดณเดฟเตฝ เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดชเตเดคเดฟเดฏ เดธเดตเดฟเดถเต‡เดทเดคเดฏเตเดฃเตเดŸเต. เดกเต†เตฝเดฑเตเดฑ เดชเด•เตผเดชเตเดชเตเด•เตพ WAL-G เดฎเตเดฎเตเดชเดคเตเดคเต† เดฌเดพเด•เตเด•เดชเตเดชเต เดชเดคเดฟเดชเตเดชเดฟเดจเต เดถเต‡เดทเด‚ เดฎเดพเดฑเดฟเดฏ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดธเตเดฑเตเดฑเต‹เตผ เดชเต‡เดœเตเด•เตพ. เดฌเดพเด•เตเด•เดชเตเดชเตเด•เตพ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต WAL-G เดงเดพเดฐเดพเดณเด‚ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. WAL-G เดŽเดจเตเดจเดคเต WAL-E-เดจเต‡เด•เตเด•เดพเตพ เดตเดณเดฐเต† เดตเต‡เด—เดคเดฏเตเดณเตเดณเดคเดพเดฃเต.

เดตเดพเตฝ-เดœเดฟ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเด‚: เดžเด™เตเด™เตพ เดฌเดพเด•เตเด•เดชเตเดชเต เด“เดตเตผเดฒเต‹เด•เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเต. Yandex เดชเตเดฐเดญเดพเดทเดฃเด‚

เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต S3 เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏเดฟ. API เดตเดดเดฟ เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเดพเดฃเต S3-เดจเตเดฑเต† เด’เดฐเต เด—เตเดฃเด‚, เด‡เดคเต เดชเตŠเดคเต เดตเดพเดฏเดจเดพ เด†เด•เตโ€Œเดธเดธเต เด‰เตพเดชเตเดชเต†เดŸเต† เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเตเดฎเดพเดฏเดฟ เดตเดดเด•เตเด•เดฎเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด‚ เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเดฟเดฒเต† เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด…เด‚เด—เต€เด•เตƒเดค เดตเตเดฏเด•เตเดคเดฟเด•เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเต‡ เดธเด‚เดญเดตเดฟเด•เตเด•เต‚.

เดŽเดธเต 3 เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เดธเด‚เดญเดฐเดฃ โ€‹โ€‹โ€‹โ€‹เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เตพ เด‰เดฃเตเดŸเต. เดšเต†เดฑเดฟเดฏ เดธเด‚เดญเดฐเดฃเด‚ เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดœเดจเดชเตเดฐเดฟเดฏ เดชเดฐเดฟเดนเดพเดฐเด‚ เด‡เดจเตเดจเต เดจเดฎเตเดฎเตพ เดจเต‹เด•เตเด•เตเด‚ - เดฎเดฟเดจเดฟเดฏเต‹.

wal-g เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเตŠเดฑเตเดฑ PostgreSQL เดธเต†เตผเดตเตผ เดจเดฒเตเดฒเดคเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† S3-เดจเต เดชเด•เดฐเดฎเดพเดฏเดฟ Minio เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เดฎเดฟเดจเดฟเดฏเต‹ เดธเต†เตผเดตเตผ

เดฎเดฟเดจเดฟเดฏเต‹ เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเตป

yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio

/etc/minio/minio.conf-เตฝ AccessKey, SecretKey เดŽเดจเตเดจเดฟเดต เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•

vi /etc/minio/minio.conf

Minio-เดฏเตโ€Œเด•เตเด•เต เดฎเตเดฎเตเดชเต เดจเดฟเด™เตเด™เตพ nginx เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต

--address 127.0.0.1:9000

--address 0.0.0.0:9000

เดฎเดฟเดจเดฟเดฏเต‹ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต

systemctl start minio

เดฎเดฟเดจเดฟเดฏเต‹ เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด• http://ip-ะฐะดั€ะตั-ัะตั€ะฒะตั€ะฐ-minio:9000 เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดฌเด•เตเด•เดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, pg-backups).

DB เดธเต†เตผเดตเตผ

เด†เตผโ€Œเดชเดฟโ€ŒเดŽเดฎเตเดฎเดฟเดฒเต† WAL-G เดžเดพเตป (เด†เดจเตเดฑเตบ เดชเดพเดฑเตเดฑเตโ€Œเดธเต†เดตเต) เด…เดธเด‚เดฌเดฟเตพ เดšเต†เดฏเตโ€Œเดคเดคเดพเดฃเต. เดธเดพเดฎเต‚เดนเดฟเด•เด‚, เดซเต†เดกเต‹เดฑ COPR.

เด†เตผโ€Œเดชเดฟโ€ŒเดŽเด‚ เด…เดงเดฟเดทเตโ€Œเด เดฟเดค เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด‡เดฒเตเดฒเดพเดคเตเดคเดตเตผ, เด’เดซเต€เดทเตเดฏเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เด‡เตปเดธเตเดฑเตเดฑเดฒเต‡เดทเตป เดตเดดเดฟ.

wal-g เดฌเตˆเดจเดฑเดฟเด•เตเด•เตŠเดชเตเดชเด‚, /etc/wal-gd/server-s3.conf เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ rpm-เตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

เดตเดพเตฝเด—เต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•.

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 เดธเต†เตผเดตเดฑเดฟเดฒเดพเดฃเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต†เด™เตเด•เดฟเตฝ, เดชเดคเดฟเดชเตเดชเต 10-เดจเต‡เด•เตเด•เดพเตพ เด•เตเดฑเดตเตเดณเตเดณ PostgreSQL-เดจเตเด‚ PostgreSQL เดชเดคเดฟเดชเตเดชเต 10-เด‰เด‚ เด…เดคเดฟเดฒเตเด‚ เดชเดดเดฏเดคเดฟเดจเตเดฎเตเดณเตเดณ เดชเด•เตผเดชเตเดชเตเด‚ เด†เตผเด•เตเด•เตˆเดตเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ wal_level เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดชเตเดจเดƒเด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

wal_level = archive

PostgreSQL เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด“เดฐเต‹ 60 เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ WAL เด†เตผเด•เตเด•เตˆเดตเตเด•เตพ เดฌเดพเด•เตเด•เดชเตเดชเต เดšเต†เดฏเตเดฏเดพเด‚. เด‰เตฝเดชเตเดชเดจเตเดจเดคเตเดคเดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดฐเต เด†เตผเด•เตเด•เตˆเดตเต_เดŸเตˆเด‚เด”เดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

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-เตฝ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด‰เดฃเตเดŸเดพเด•เตเด•เตเด•

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŸเต†เดธเตเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เด‰เดฃเตเดŸเดพเด•เตเด•เตเด•.

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

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŸเต†เดธเตเดฑเตเดฑเดฟเดฒเต† เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต† เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดžเด™เตเด™เตพ เดจเต‹เด•เตเด•เตเดจเตเดจเต

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

เดฌเดพเด•เตเด•เดชเตเดชเต เดŽเด•เตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเด•เตเดทเตป เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ.

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด‰เดณเตเดณเดŸเด•เตเด•เดฎเตเดณเตเดณ /var/lib/pgsql/9.6/data เดซเต‹เตพเดกเดฑเดฟเดฒเต‡เด•เตเด•เต recovery.conf เดšเต‡เตผเด•เตเด•เตเด•.

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'

เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเดฟเดจเตเดถเต‡เดทเด‚, เดชเดŸเตเดŸเดฟเด• เด‡เตปเดกเด•เตโ€Œเดธเดฟเด‚เด—เต_เดŸเต‡เดฌเดฟเตพ เดจเต‹เด•เตเด•เตเด•

 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 เดŽเดจเตเดจเดคเต เด†เดฎเดธเต‹เตบ S3 เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเดฟเตฝ เดคเดพเดฎเดธเดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดฏเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดธเต—เดœเดจเตเดฏ เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต. เดชเตˆเดคเตเดคเตบ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเดฟเดฒเดพเดฃเต เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด…เดคเดฟเดจเดพเตฝ เด‡เดคเต เดตเดฟเตปเดกเต‹เดธเต, เดฒเดฟเดจเด•เตเดธเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

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

เดฌเตเดฐเต‹เดŸเตเดŸเตเดฒเดฟ

ะŸะพัะปะต ะณะตะฝะตั€ะฐั†ะธะธ 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 เดฌเดพเด•เตเด•เดชเตเดชเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด†เดฎเตเด–เด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดฌเตเดฐเต‹เดŸเตเดŸเตเดฒเดฟเดฏเต† LZMA-เดฏเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจเดคเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดฌเดพเด•เตเด•เดชเตเดชเต LZ4 เดธเดฎเดฏเดคเตเดคเดพเดฃเต เดจเดŸเดคเตเดคเตเดจเตเดจเดคเต.

เดฑเดทเตเดฏเตป เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจ PostgreSQL เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟเดฏเตเดŸเต† เดšเดพเดฑเตเดฑเต: https://t.me/pgsql

เดจเดฟเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ Github-เดจเต เด’เดฐเต เดจเด•เตเดทเดคเตเดฐเด‚ เดจเตฝเด•เตเด• เดตเดพเตฝ-เดœเดฟ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•