แแแขแแแแแ, แแฃ แ แแแแ แแฃแจแแแแก wal-g, แจแแแแซแแแแ แแฎแแแแ แกแขแแขแแแจแ:
S3 แจแแแแฎแแแก แแ แแขแแแแแ แแแแฃแแแ แฃแแ แแแฎแแ แแแแแชแแแแ แจแแกแแแแฎแแ. S3-แแก แแ แ-แแ แแ แฃแแแ แแขแแกแแแ แแ แแก API-แแ แฌแแแแแแก แจแแกแแซแแแแแแแ, แ แแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแฌแงแแ แแแฅแแแแ แฃแ แแแแ แแฅแแแแแแ แกแแชแแแแแ, แแแ แจแแ แแก แกแแฏแแ แ แฌแแแแแฎแแแก แฌแแแแแแก แฉแแแแแแ, แฎแแแ แกแแชแแแจแ แแแคแแ แแแชแแแก แแแแแฎแแแแ แฎแแแแ แแฎแแแแ แแแขแแ แแแแแฃแแ แแแ แแแแก แแแแ .
แแ แกแแแแแก แ แแแแแแแแ แกแแฏแแ แ แแ แแแ แซแ แแแฎแกแแแ แแแแก แแแแฎแแ แชแแแแแแ, แ แแแแแแแช แแงแแแแแแ S3 แแ แแขแแแแแก. แแฆแแก แฉแแแ แแแแแแฎแแแแแ แแแแฃแแแ แฃแ แแแแแฌแงแแแขแแก แแชแแ แ แกแแชแแแแก แแ แแแแแแแแแกแแแแก - Minio.
แแ แแ PostgreSQL แกแแ แแแ แ แแแ แแแ wal-g-แแก แจแแกแแแแฌแแแแแแ, แฎแแแ Minio แแแแแแงแแแแแ S3-แแก แจแแแชแแแแแแ.
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
แแฃ แแฅแแแ แแ แแงแแแแแ nginx-แก Minio-แแแ, แแแจแแ แฃแแแ แจแแชแแแแแ
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Minio-แก แแแจแแแแ
systemctl start minio
แแแแแแแ Minio แแแ แแแขแแ แคแแแกแแ
DB แกแแ แแแ แ
WAL-G แแ แฃแแจแ แแฌแงแแแแแแ แฉแแแ (แแแขแแ แคแแชแแแ).
แแแกแแช แแ แแฅแแก 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
แแแแแแกแขแแแแ แแ walg.
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 แกแแ แแแ แแ, แแแจแแ แฎแแแแฎแแ แฃแแแ แแแแแแแคแแแฃแ แแ แแ wal_level แแแ แแแแขแ แ, แ แแแ แแแแ แฅแแแแ PostgreSQL 10-แแ แแแแแแแ แแแ แกแแแกแแแแก แแ แแกแแ PostgreSQL 10 แแ แฃแคแ แ แซแแแแ แแแ แกแแแกแแแแก.
wal_level = archive
แแแแแ แจแแแฅแแแแ แกแแ แแแแ แแ WAL แแ แฅแแแแแ แงแแแแ 60 แฌแแแจแ, แแแแแ PostgreSQL-แแก แแแแแงแแแแแแ. แแ แแแแ แแแฅแแแแแ แแแแกแฎแแแแแแฃแแ 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
แกแแ แแแแ แแ แแแแแแแแ แแแกแ แฃแแแ.
แแแแแแขแแ recovery.conf แกแแฅแแฆแแแแแจแ /var/lib/pgsql/9.6/data แจแแแแแแ แจแแแแแ แกแแ.
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
แขแแกแขแแ แแแ
1 GB แแแแแชแแแแ แแแแแก แแแแแ แแ แแแ, แ แแแแ แช แแก แแฆแฌแแ แแแแ แแฅ
แแแแแฃแแแก แแแแแก แแแแฎแแแแ 1 แแ แแแแแชแแแแ แแแแแ แแ แแแแก แจแแแแแ.
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 ะะ ะทะฐะฝะธะผะฐะตั ะฟะพะปะฝัะน ะฑะตะบะฐะฟ
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
แจแแแแแแแแก แจแแแแ แแแ แแแแแ แแแแแ.
แ แแแแ แช แฎแแแแแ, แแ แแขแแ แแแแแ แจแแแแ แแแฃแแแ LZMA-แกแแแ, แแแแ แแ แกแแ แแแแ แแ แแกแแ แจแแกแ แฃแแแแฃแแแ LZ4 แแ แแจแ.
แ แฃแกแฃแแแแแแแแ PostgreSQL แกแแแแแแแแแแแก แฉแแขแ:
แแแฎแแแ, แแแแชแแ แแแ แกแแแแแแ Github-แก, แแฃ แแงแแแแแ
แฌแงแแ แ: www.habr.com