Ny antsipiriany momba ny fomba fiasan'ny wal-g dia hita ao amin'ny lahatsoratra:
Ny protocole fitehirizana S3 dia lasa malaza amin'ny fitahirizana angona. Ny iray amin'ireo tombony amin'ny S3 dia ny fahafahana miditra amin'ny alΓ lan'ny API, izay ahafahanao mandamina fifandraisana moramora amin'ny fitahirizana, ao anatin'izany ny fidirana amin'ny besinimaro, ary ny fanavaozana ny vaovao ao amin'ny fitahirizana dia tsy misy afa-tsy olona nahazo alalana.
Misy fampiharana fitahirizana ho an'ny daholobe sy tsy miankina izay mampiasa ny protocol S3. Androany isika dia hijery vahaolana malaza amin'ny fikarakarana fitahirizana kely - Minio.
Ny mpizara PostgreSQL tokana dia tsara amin'ny fitsapana wal-g, ary ny Minio dia ampiasaina ho solon'ny S3.
Minio Server
Minio fametrahana
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio
Ahitsio AccessKey sy SecretKey ao amin'ny /etc/minio/minio.conf
vi /etc/minio/minio.conf
Raha tsy mampiasa nginx alohan'ny Minio ianao dia mila miova
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Famoahana Minio
systemctl start minio
Mandehana any amin'ny tranonkala Minio
Mpizara DB
WAL-G in rpm no nanangona ahy (Anton Patsev).
Izay tsy manana rafitra mifototra amin'ny RPM dia ampiasao ny ofisialy
Miaraka amin'ny binary wal-g, rpm dia misy sora-baventy izay manafatra varimbazaha avy amin'ny rakitra /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
Mametraka walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g
Fanamarinana ny version wal-g.
wal-g --version
wal-g version v0.2.14
Amboary /etc/wal-gd/server-s3.conf araka izay ilainao.
Ny rakitra fikirakirana sy ny rakitra data ampiasain'ny cluster database dia voatahiry miaraka amin'ny fomba mahazatra ao amin'ny lahatahiry data cluster, izay matetika antsoina hoe 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 # ΠΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Rehefa configuring WAL-G, dia mamaritra WALG_DELTA_MAX_STEPS - ny isan'ny dingana izay ny delta backup no ambony indrindra avy amin'ny fototra backup, ary mamaritra ny delta kopia politika. Na manao dika mitovy amin'ny delta efa misy farany ianao, na manao delta avy amin'ny backup feno tany am-boalohany. Ilaina izany raha toa ka miova foana ny singa mitovy amin'ny angon-drakitra ao amin'ny angon-drakitrao, ny angon-drakitra mitovy dia miova tsy tapaka.
Fametrahana ny angon-drakitra.
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
Manomboka ny angon-drakitra izahay.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Raha manao fitiliana amin'ny mpizara 1 ianao, dia mila amboarina ny paramètre wal_level mba ho tahiry ho an'ny PostgreSQL latsaky ny version 10, ary kopia ho an'ny PostgreSQL version 10 no ho miakatra.
wal_level = archive
Andao hanao backup ny arsiva WAL isaky ny 60 segondra amin'ny alΓ lan'ny PostgreSQL mihitsy. Amin'ny prod dia hanana sanda archive_timeout hafa ianao.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ΠΠ°ΠΆΠ΄ΡΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° archive_command.
Manomboka PostgreSQL
systemctl start postgresql-9.6
Ao amin'ny console misaraka, mijery ny PostgreSQL logs momba ny fahadisoana isika: (ova postgresql-Wed.log ho an'ny ankehitriny).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Andao ho any psql.
su - postgres
psql
Mamorona tahiry ao amin'ny psql
Mamorona tabilao ao amin'ny test database1.
create database test1;
Hiverina any amin'ny test database.
postgres=# c test1;
Mamorona ny latabatra indexing_table izahay.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());
Manampy angona.
Manomboka mampiditra angona izahay. Miandry 10-20 minitra izahay.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done
Ataovy azo antoka fa manao backup feno.
su - postgres
/usr/local/bin/backup-push.sh
Isika dia mijery ny firaketana ao amin'ny latabatra ao amin'ny database 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+
Ny tady dia ny fotoana ankehitriny.
Jereo ny lisitry ny backups feno
/usr/local/bin/backup-list.sh
Fitsapana fanarenana
Fahasitranana feno miaraka amin'ny fanodinana ny WAL rehetra misy.
Atsaharo ny Postgresql.
Fafao ny zava-drehetra ao amin'ny lahatahiry /var/lib/pgsql/9.6/data.
Alefaso ny script /usr/local/bin/backup-fetch.sh ho mpampiasa postgres.
su - postgres
/usr/local/bin/backup-fetch.sh
Vita ny fitrandrahana backup.
Ampio recovery.conf amin'ny lahatahiry /var/lib/pgsql/9.6/data miaraka amin'ity atiny manaraka ity.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
Manomboka PostgreSQL izahay. PostgreSQL dia hanomboka ny dingana fanarenana avy amin'ny WAL voatahiry, ary avy eo vao misokatra ny angon-drakitra.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Famerenana mandritra ny fotoana iray.
Raha te-hamerina ny angon-drakitra hatramin'ny minitra iray isika, dia ampidirintsika ao amin'ny recovery.conf ny mari-pamantarana recovery_target_time - manondro ny fotoana hamerenana ny tahiry.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'
Aorian'ny fanarenana dia jereo ny tabilao 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
Manomboka PostgreSQL izahay. PostgreSQL dia hanomboka ny dingana fanarenana avy amin'ny WAL voatahiry, ary avy eo vao misokatra ny angon-drakitra.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
fitiliana
Mamorona tahiry 1GB araka ny voalaza eto
Mangataka ny haben'ny siny rehefa avy namorona angona 1GB.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB
s4cmd dia fitaovana andalana maimaim-poana hiasa amin'ny angon-drakitra monina ao amin'ny fitahirizana Amazon S3. Ny fitaovana dia nosoratana tamin'ny fiteny fandaharana python, ary noho izany dia azo ampiasaina amin'ny rafitra fiasa Windows sy Linux.
Fametrahana 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
Fampitahana ny valiny eo amin'ny tabilao.
Araka ny hitanao, Brotli dia mitovy amin'ny haben'ny LZMA, fa ny backup dia atao amin'ny fotoana LZ4.
Chat an'ny vondrom-piarahamonina PostgreSQL miteny Rosiana:
Mba omeo kintana ny Github raha mampiasa ianao
Source: www.habr.com