wal-g PostgreSQL рдмреНрдпрд╛рдХрдЕрдк рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдкрд░рд┐рдЪрдп

рд╡рд╛рд▓-рдЬреА рдХреНрд▓рд╛рдЙрдбрд╣рд░реВрдорд╛ PostgreSQL рдмреНрдпрд╛рдХрдЕрдк рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рд░рд▓ рд░ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рдЙрдкрдХрд░рдг рд╣реЛред рдпрд╕рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рдпреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрдкрдХрд░рдг рдХреЛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдЫ рд╡рд╛рд▓-рдИ, рддрд░ Go рдорд╛ рдкреБрди: рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред рддрд░ WAL-G рдорд╛ рдПрдЙрдЯрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛ рдЫ - рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рд╣рд░реВред рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рд╣рд░реВ рд╡рд╛рд▓-рдЬреА рдЕрдШрд┐рд▓реНрд▓реЛ рдмреНрдпрд╛рдХрдЕрдк рд╕рдВрд╕реНрдХрд░рдг рдкрдЫрд┐ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдкреГрд╖реНрдард╣рд░реВ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред WAL-G рд▓реЗ рдмреНрдпрд╛рдХрдЕрдкрд╣рд░реВ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫред WAL-G WAL-E рднрдиреНрджрд╛ рдзреЗрд░реИ рдЫрд┐рдЯреЛ рдЫред

wal-g рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗ рд╡рд┐рд╡рд░рдг рдпрд╕ рд▓реЗрдЦрдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ: рд╣рд╛рдореА рдмреНрдпрд╛рдХрдЕрдкрд▓рд╛рдИ рдУрднрд░рдХреНрд▓реЛрдХ рдЧрд░реНрдЫреМрдВред рдпрд╛рдиреНрдбреЗрдХреНрд╕ рд╡реНрдпрд╛рдЦреНрдпрд╛рди

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

/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-backup)ред

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 рдорд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдбрд╛рдЯрд╛рдмреЗрд╕ 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 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реНред

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 рд░ рд▓рд┐рдирдХреНрд╕ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рджреБрд╡реИ рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

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 рдмреНрдпрд╛рдХрдЕрдк рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдкрд░рд┐рдЪрдп

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдмреНрд░реЛрдЯрд▓реА рдЖрдХрд╛рд░рдорд╛ LZMA рд╕рдБрдЧ рддреБрд▓рдирд╛рддреНрдордХ рдЫ, рддрд░ рдмреНрдпрд╛рдХрдЕрдк LZ4 рд╕рдордпрдорд╛ рдЧрд░рд┐рдиреНрдЫред

рд░реВрд╕реА рднрд╛рд╖рд╛ рдмреЛрд▓реНрдиреЗ PostgreSQL рд╕рдореБрджрд╛рдпрдХреЛ рдЪреНрдпрд╛рдЯ: https://t.me/pgsql

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдХреГрдкрдпрд╛ Github рд▓рд╛рдИ рддрд╛рд░рд╛ рджрд┐рдиреБрд╣реЛрд╕реН wal-g

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди