wal-g PostgreSQL เจฌเฉˆเจ•เจ…เฉฑเจช เจธเจฟเจธเจŸเจฎ เจจเจพเจฒ เจœเจพเจฃ-เจชเจ›เจพเจฃ

เจตเจพเจฒ-เจœเฉ€ เจฌเฉฑเจฆเจฒเจพเจ‚ เจตเจฟเฉฑเจš PostgreSQL เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเฉˆเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ…เจคเฉ‡ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€ เจธเจพเจงเจจ เจนเฉˆเฅค เจ‡เจธเจฆเฉ€ เจฎเฉเฉฑเจ– เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจ‡เจน เจชเฉเจฐเจธเจฟเฉฑเจง เจธเจพเจงเจจ เจฆเจพ เจตเจพเจฐเจธ เจนเฉˆ เจตเจพเจฒ-เจˆ, เจชเจฐ Go เจตเจฟเฉฑเจš เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ†เฅค เจชเจฐ WAL-G เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจจเจตเฉ€เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจนเฉˆ - delta copies. เจกเฉˆเจฒเจŸเจพ เจ•เจพเจชเฉ€เจ†เจ‚ เจตเจพเจฒ-เจœเฉ€ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ‡ เจธเจŸเฉ‹เจฐ เจชเฉฐเจจเฉ‡ เจœเฉ‹ เจชเจฟเจ›เจฒเฉ‡ เจฌเฉˆเจ•เจ…เฉฑเจช เจธเฉฐเจธเจ•เจฐเจฃ เจคเฉ‹เจ‚ เจฌเจฆเจฒ เจ—เจ เจนเจจเฅค WAL-G เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจ•เจจเฉ€เจ•เจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค WAL-G WAL-E เจจเจพเจฒเฉ‹เจ‚ เจฌเจนเฉเจค เจคเฉ‡เจœเจผ เจนเฉˆเฅค

wal-g เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจตเฉ‡เจฐเจตเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ: เจ…เจธเฉ€เจ‚ เจฌเฉˆเจ•เจ…เฉฑเจช เจจเฉ‚เฉฐ เจ“เจตเจฐเจ•เจฒเฉŒเจ• เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจฏเจพเจ‚เจกเฉ‡เจ•เจธ เจฒเฉˆเจ•เจšเจฐ

S3 เจธเจŸเฉ‹เจฐเฉ‡เจœ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจกเจพเจŸเจพ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจชเฉเจฐเจธเจฟเฉฑเจง เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆเฅค S3 เจฆเฉ‡ เจซเจพเจ‡เจฆเจฟเจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• API เจฆเฉเจ†เจฐเจพ เจเจ•เจธเฉˆเจธ เจ•เจฐเจจ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ เจนเฉˆ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฆเฉ‡ เจจเจพเจฒ เจฒเจšเจ•เจฆเจพเจฐ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจชเจฌเจฒเจฟเจ• เจฐเฉ€เจก เจเจ•เจธเฉˆเจธ เจธเจผเจพเจฎเจฒ เจนเฉˆ, เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจตเจฟเฉฑเจš เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจเจพ เจธเจฟเจฐเจซเจผ เจ…เจงเจฟเจ•เจพเจฐเจค เจตเจฟเจ…เจ•เจคเฉ€เจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจนเฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค

S3 เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจธเจŸเฉ‹เจฐเจพเจ‚ เจฆเฉ‡ เจ•เจˆ เจœเจจเจคเจ• เจ…เจคเฉ‡ เจจเจฟเฉฑเจœเฉ€ เจฆเฉ‹เจตเฉ‡เจ‚ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจ…เจฎเจฒ เจนเจจเฅค เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ เจ›เฉ‹เจŸเฉ‡ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจจเฉ‚เฉฐ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจฐเจธเจฟเฉฑเจง เจนเฉฑเจฒ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡ - เจฎเจฟเจจเฉ€เจ“.

เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ PostgreSQL เจธเจฐเจตเจฐ wal-g เจฆเฉ€ เจœเจพเจ‚เจš เจฒเจˆ เจ เฉ€เจ• เจนเฉˆ, เจ…เจคเฉ‡ Minio เจจเฉ‚เฉฐ 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

Minio เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

systemctl start minio

Minio เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ 'เจคเฉ‡ เจœเจพเจ“ http://ip-ะฐะดั€ะตั-ัะตั€ะฒะตั€ะฐ-minio:9000 เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฌเจพเจฒเจŸเฉ€ เจฌเจฃเจพเจ“ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, pg-เจฌเฉˆเจ•เจ…เฉฑเจช)เฅค

DB เจธเจฐเจตเจฐ

rpm เจตเจฟเฉฑเจš WAL-G เจจเฉ‚เฉฐ เจฎเฉ‡เจฐเฉ‡ (Anton Patsev) เจฆเฉเจ†เจฐเจพ เจ…เจธเฉˆเจ‚เจฌเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค GitHub, เจซเฉ‡เจกเฉ‹เจฐเจพ เจธเฉ€.เจ“.เจชเฉ€.เจ†เจฐ.

เจœเจฟเจธ เจ•เฉ‹เจฒ 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

เจตเจพเจฒเจ— เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹เฅค

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 เจฒเจˆ เจชเฉเจฐเจพเจฒเฉ‡เจ– เจ•เจฐเจจ เจฒเจˆ wal_level เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจคเฉ‡ PostgreSQL เจธเฉฐเจธเจ•เจฐเจฃ 10 เจ…เจคเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจฒเจˆ เจชเฉเจฐเจคเฉ€เจฐเฉ‚เจชเฅค

wal_level = archive

เจšเจฒเฉ‹ PostgreSQL เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจนเจฐ 60 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจตเจฟเฉฑเจš WAL เจชเฉเจฐเจพเจฒเฉ‡เจ–เจพเจ‚ เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจ•เจฐเฉ€เจเฅค เจ‰เจคเจชเจพเจฆ 'เจคเฉ‡, เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ 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

เจ…เจธเฉ€เจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจŸเฉˆเจธเจŸ1 เจตเจฟเฉฑเจš เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚

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

เจฌเฉˆเจ•เจ…เฉฑเจช เจ•เฉฑเจขเจฃเจพ เจชเฉ‚เจฐเจพ เจนเฉ‹เจ‡เจ†เฅค

เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ /var/lib/pgsql/9.6/data เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš recovery.conf เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹เฅค

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'

เจ…เจธเฉ€เจ‚ PostgreSQL เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค PostgreSQL เจ†เจฐเจ•เจพเจˆเจตเจก WALs เจคเฉ‹เจ‚ เจฐเจฟเจ•เจตเจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจคเจฆ เจนเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ–เฉเฉฑเจฒเฉเจนเฉ‡เจ—เจพเฅค

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'

เจฐเจฟเจ•เจตเจฐเฉ€ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจŸเฉ‡เจฌเจฒ เจ‡เฉฐเจกเฉˆเจ•เจธเจฟเฉฐเจ—_เจŸเฉ‡เจฌเจฒ เจฆเฉ‡เจ–เฉ‹

 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 เจ†เจฐเจ•เจพเจˆเจตเจก WALs เจคเฉ‹เจ‚ เจฐเจฟเจ•เจตเจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจคเจฆ เจนเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ–เฉเฉฑเจฒเฉเจนเฉ‡เจ—เจพเฅค

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

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจตเจฐเจคเจฆเฉ‡ เจนเฉ‹ เจคเจพเจ‚ เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจ—เจฟเจฅเจฌ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจคเจพเจฐเจพ เจฆเจฟเจ“ wal-g

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹