āĻāĻ¯āĻŧāĻžāĻ˛-āĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻžāĻ° āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§:
S3 āĻ¸ā§āĻā§āĻ°ā§āĻ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻĄā§āĻāĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĻā§āĨ¤ S3 āĻāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ API āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž, āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻā§āĻāĻ¯āĻŧāĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¨āĻŽāĻ¨ā§āĻ¯āĻŧ āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ, āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ°āĻŋāĻĄ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻ¸āĻš, āĻ¸ā§āĻā§āĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻĻā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻā§āĨ¤
S3 āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻ¨ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻžāĻāĻā§āĻ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ āĻāĻŽāĻ°āĻž āĻā§āĻ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻĻā§āĻāĻŦ - āĻŽāĻŋāĻ¨āĻŋāĻāĨ¤
āĻāĻāĻāĻŋ āĻāĻāĻ PostgreSQL āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° wal-g āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻŋāĻ āĻāĻā§, āĻāĻŦāĻ Minio S3 āĻāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻŽāĻŋāĻ¨āĻŋāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°
āĻŽāĻŋāĻ¨āĻŋāĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨
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
Minio āĻāĻ¯āĻŧā§āĻŦ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻ¯āĻžāĻ¨
āĻĄāĻŋāĻŦāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°
rpm-āĻ WAL-G āĻāĻŽāĻžāĻ° (Anton Patsev) āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻ¯āĻžāĻ° 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 --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 āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻŽ āĻāĻŦāĻ āĻĒā§āĻ¸ā§āĻāĻā§āĻ°ā§āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 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 āĻ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻā§āĻ¸ā§āĻ 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
āĻāĻŽāĻ°āĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻā§āĻ¸ā§āĻā§§-āĻ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻ°ā§āĻāĻ°ā§āĻĄāĻā§āĻ˛ā§ āĻĻā§āĻāĻŋ
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 āĻ¸āĻāĻ°āĻā§āĻˇāĻŖāĻžāĻāĻžāĻ°āĻā§āĻā§āĻ¤ āĻāĻ¯āĻŧāĻžāĻ˛ āĻĨā§āĻā§ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§, āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻāĻ¨āĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻā§āĻ˛āĻŦā§āĨ¤
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 āĻ¸āĻāĻ°āĻā§āĻˇāĻŖāĻžāĻāĻžāĻ°āĻā§āĻā§āĻ¤ āĻāĻ¯āĻŧāĻžāĻ˛ āĻĨā§āĻā§ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§, āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻāĻ¨āĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻā§āĻ˛āĻŦā§āĨ¤
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻŽā§āĻ˛āĻ
āĻāĻāĻžāĻ¨ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻāĻŋ 1GB āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻā§āĻā§
1GB āĻĄā§āĻāĻž āĻā§āĻ¨āĻžāĻ°ā§āĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻŦāĻžāĻ˛āĻ¤āĻŋāĻ° āĻāĻāĻžāĻ°ā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB
s4cmd āĻšāĻ˛ Amazon 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
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
āĻāĻžāĻ°ā§āĻā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĨ¤
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨, āĻŦā§āĻ°āĻāĻ˛āĻŋ āĻāĻāĻžāĻ°ā§ LZMA āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨ā§āĻ¯āĻŧ, āĻ¤āĻŦā§ āĻŦā§āĻ¯āĻžāĻāĻāĻĒāĻāĻŋ LZ4 āĻ¸āĻŽāĻ¯āĻŧā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻ°āĻžāĻļāĻŋāĻ¯āĻŧāĻžāĻ¨-āĻāĻžāĻˇā§ PostgreSQL āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧā§āĻ° āĻā§āĻ¯āĻžāĻ:
āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ˛ā§ Github āĻāĻāĻāĻŋ āĻ¤āĻžāĻ°āĻāĻž āĻĻāĻŋāĻ¨ āĻĻāĻ¯āĻŧāĻž āĻāĻ°ā§
āĻāĻ¤ā§āĻ¸: www.habr.com