wal-g PostgreSQL เชฌเซ‡เช•เช…เชช เชธเชฟเชธเซเชŸเชฎเชจเซ‹ เชชเชฐเชฟเชšเชฏ

WAL-G เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒเชจเซ‡ เช•เซเชฒเชพเช‰เชกเซเชธเชฎเชพเช‚ เชฌเซ‡เช•เช…เชช เชฒเซ‡เชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชเช• เชธเชฐเชณ เช…เชจเซ‡ เช…เชธเชฐเช•เชพเชฐเช• เชธเชพเชงเชจ เช›เซ‡. เชคเซ‡เชจเซ€ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚, เชคเซ‡ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชธเชพเชงเชจเชจเซ‹ เชตเชพเชฐเชธเชฆเชพเชฐ เช›เซ‡ WAL-E, เชชเชฐเช‚เชคเซ Go เชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เชฒเช–เชพเชฏเซ‡เชฒ. เชชเชฐเช‚เชคเซ WAL-G เชฎเชพเช‚ เชเช• เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพ เช›เซ‡ - เชกเซ‡เชฒเซเชŸเชพ เช•เซ‹เชชเซ€เช. เชกเซ‡เชฒเซเชŸเชพ เชจเช•เชฒเซ‹ WAL-G เชชเชพเช›เชฒเชพ เชฌเซ‡เช•เช…เชช เชธเช‚เชธเซเช•เชฐเชฃเชฅเซ€ เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชซเชพเช‡เชฒเซ‹เชจเชพ เชชเซƒเชทเซเช เซ‹เชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‹. WAL-G เชฌเซ‡เช•เช…เชชเชจเซ‡ เชธเชฎเชพเช‚เชคเชฐ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเซ€ เชฌเชงเซ€ เชคเช•เชจเซ€เช•เซ‹เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ‡ เช›เซ‡. WAL-G WAL-E เช•เชฐเชคเชพเช‚ เชตเชงเซ เชเชกเชชเซ€ เช›เซ‡.

wal-g เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ€ เชตเชฟเช—เชคเซ‹ เชฒเซ‡เช–เชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡: เช…เชฎเซ‡ เชฌเซ‡เช•เช…เชชเชจเซ‡ เช“เชตเชฐเช•เซเชฒเซ‹เช• เช•เชฐเซ€เช เช›เซ€เช. เชฏเชพเชจเซเชกเซ‡เช•เซเชท เชตเซเชฏเชพเช–เซเชฏเชพเชจ

เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ S3 เชธเซเชŸเซ‹เชฐเซ‡เชœ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชฌเชจเซเชฏเซเช‚ เช›เซ‡. S3 เชจเซ‹ เชเช• เชซเชพเชฏเชฆเซ‹ เชเชชเซ€เช†เชˆ เชฆเซเชตเชพเชฐเชพ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชธเชพเชฐเซเชตเชœเชจเชฟเช• เชตเชพเช‚เชšเชจ เชเช•เซเชธเซ‡เชธ เชธเชนเชฟเชค เชธเซเชŸเซ‹เชฐเซ‡เชœ เชธเชพเชฅเซ‡ เชฒเชตเชšเซ€เช• เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชธเซเชŸเซ‹เชฐเซ‡เชœเชฎเชพเช‚ เชฎเชพเชนเชฟเชคเซ€ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชซเช•เซเชค เช…เชงเชฟเช•เซƒเชค เชตเซเชฏเช•เซเชคเชฟเช“ เชฆเซเชตเชพเชฐเชพ เชœ เชฅเชพเชฏ เช›เซ‡.

เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชธเซเชŸเซ‹เชฐเซ‡เชœ เช…เชฎเชฒเซ€เช•เชฐเชฃเซ‹ เช›เซ‡ เชœเซ‡ S3 เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช†เชœเซ‡ เช†เชชเชฃเซ‡ เชจเชพเชจเชพ เชธเซเชŸเซ‹เชฐเซ‡เชœเชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เช‰เช•เซ‡เชฒ เชœเซ‹เชˆเชถเซเช‚ - เชฎเชฟเชจเซ€เชฏเซ‹.

เชเช• เชœ 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

เชœเซ‹ เชคเชฎเซ‡ Minio เชชเชนเซ‡เชฒเชพเช‚ nginx เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชฌเชฆเชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Minio เชฒเซ‹เชจเซเชš เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

systemctl start minio

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

เชกเซ€เชฌเซ€ เชธเชฐเซเชตเชฐ

rpm เชฎเชพเช‚ WAL-G เชฎเชพเชฐเชพ (เชเชจเซเชŸเซ‹เชจ เชชเซ‡เชŸเชธเซ‡เชต) เชฆเซเชตเชพเชฐเชพ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. Github, เชซเซ‡เชกเซ‹เชฐเชพ COPR.

เชœเซ‡เชจเซ€ เชชเชพเชธเซ‡ 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_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;

เช…เชฎเซ‡ เชŸเซ‡เชฌเชฒ 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

เช…เชฎเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ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 เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚เชฅเซ€ เชฌเชงเซเช‚ เช•เชพเชขเซ€ เชจเชพเช–เซ‹.

postgres เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชคเชฐเซ€เช•เซ‡ /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.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 เชธเซเชŸเซ‹เชฐเซ‡เชœเชฎเชพเช‚ เชฐเชนเซ‡เชคเชพ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชเช• เชฎเชซเชค เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชŸเซ‚เชฒ เช›เซ‡. เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชชเชพเชฏเชฅเซ‹เชจ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชจเชพ เช•เชพเชฐเชฃเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— 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 ะœะ‘ ะทะฐะฝะธะผะฐะตั‚ ะฟะพะปะฝั‹ะน ะฑะตะบะฐะฟ

เชเชฒเชเซ‡เชเชฎเช

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹