Tsatanetsatane wa momwe wal-g amagwirira ntchito angapezeke m'nkhaniyi:
Protocol yosungira ya S3 yakhala yotchuka posungira deta. Chimodzi mwazabwino za S3 ndi kuthekera kofikira kudzera pa API, yomwe imakupatsani mwayi wokonzekera kuyanjana kosinthika ndi zosungirako, kuphatikiza mwayi wowerengera anthu, pomwe kukonzanso zidziwitso posungira kumachitika ndi anthu ovomerezeka okha.
Pali njira zingapo zosungira anthu ndi zapadera zomwe zimagwiritsa ntchito protocol ya S3. Lero tiwona yankho lodziwika bwino lokonzekera zosungirako zazing'ono - Minio.
Seva imodzi ya PostgreSQL ndiyabwino kuyesa wal-g, ndipo Minio imagwiritsidwa ntchito m'malo mwa S3.
Minio Server
Kuyika kwa Minio
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio
Sinthani AccessKey ndi SecretKey mu /etc/minio/minio.conf
vi /etc/minio/minio.conf
Ngati simugwiritsa ntchito nginx pamaso pa Minio, muyenera kusintha
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Kukhazikitsa Minio
systemctl start minio
Pitani ku mawonekedwe a intaneti a Minio
DB seva
WAL-G mu rpm amasonkhanitsidwa ndi ine (Anton Patsev).
Amene alibe dongosolo la RPM, gwiritsani ntchito mkuluyo
Pamodzi ndi wal-g binary, rpm ili ndi zolemba zomwe zimalowetsa zosintha kuchokera ku /etc/wal-gd/server-s3.conf file.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh
Ikani walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g
Kuyang'ana mtundu wa wal-g.
wal-g --version
wal-g version v0.2.14
Sinthani /etc/wal-gd/server-s3.conf pazosowa zanu.
Mafayilo osinthira ndi mafayilo a data omwe amagwiritsidwa ntchito ndi gulu la database nthawi zambiri amasungidwa limodzi mu cluster data directory, yomwe imatchedwa 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 # ΠΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Mukakonza WAL-G, mumatchula WALG_DELTA_MAX_STEPS - kuchuluka kwa masitepe omwe zosunga zobwezeretsera za delta ndizochulukirapo kuchokera pazosunga zoyambira, ndikufotokozerani mfundo za kukopera kwa delta. Mwina mupanga kopi kuchokera kumalo omaliza omwe analipo, kapena mupanga delta kuchokera pazosunga zonse zoyambirira. Izi ndizofunikira ngati gawo lomwelo la database likusintha nthawi zonse mu database yanu, zomwezo zikusintha nthawi zonse.
Kuyika database.
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
Timakhazikitsa database.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Ngati mukuyesa pa seva 1, ndiye kuti muyenera kusinthanso gawo la wal_level kuti musungitse PostgreSQL yocheperako kuposa mtundu 10, ndikufanizira mtundu wa 10 wa PostgreSQL ndi kupitilira apo.
wal_level = archive
Tiyeni tisunge zolemba zakale za WAL masekondi 60 aliwonse pogwiritsa ntchito PostgreSQL yokha. Pa prod, mudzakhala ndi archive_timeout mtengo wosiyana.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ΠΠ°ΠΆΠ΄ΡΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° archive_command.
Kuyambira PostgreSQL
systemctl start postgresql-9.6
Mu cholembera chosiyana, timayang'ana zolemba za PostgreSQL zolakwa: (sinthani postgresql-Wed.log kukhala yamakono).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Tiyeni tipite ku psql.
su - postgres
psql
Pangani database mu psql
Pangani tebulo mu database test1.
create database test1;
Sinthani ku test database.
postgres=# c test1;
Timapanga tebulo indexing_table.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());
Kuwonjezera deta.
Timayamba kuyika deta. Timadikirira kwa mphindi 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
Onetsetsani kuti mwasunga zonse.
su - postgres
/usr/local/bin/backup-push.sh
Timayang'ana zolemba patebulo mu test database1
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+
Chingwe ndi nthawi yokha.
Onani mndandanda wa zosunga zobwezeretsera zonse
/usr/local/bin/backup-list.sh
Kuyesa kuchira
Kuchira kwathunthu ndikugudubuza zonse zomwe zilipo WAL.
Imani Postgresql.
Chotsani chilichonse ku /var/lib/pgsql/9.6/data foda.
Thamangani /usr/local/bin/backup-fetch.sh script ngati wogwiritsa ntchito postgres.
su - postgres
/usr/local/bin/backup-fetch.sh
Kusunga zosunga zobwezeretsera kwatha.
Onjezani recovery.conf ku /var/lib/pgsql/9.6/data foda yokhala ndi zotsatirazi.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
Timayamba PostgreSQL. PostgreSQL iyambitsa njira yobwezeretsa kuchokera ku WALs zosungidwa, ndipo pokhapokha pomwe database idzatsegulidwa.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Kuchira kwa nthawi inayake.
Ngati tikufuna kubwezeretsanso database mpaka miniti inayake, ndiye timawonjezera recovery_target_time parameter ku recovery.conf - timasonyeza nthawi yoti tibwezeretse deta.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'
Mukachira, yang'anani pa tebulo 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
Timayamba PostgreSQL. PostgreSQL iyambitsa njira yobwezeretsa kuchokera ku WALs zosungidwa, ndipo pokhapokha pomwe database idzatsegulidwa.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Kuyesa
Kupanga nkhokwe ya 1GB monga tafotokozera apa
Kufunsira kukula kwa ndowa mutatha kupanga 1GB ya data.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB
s4cmd ndi chida chaulere chamzere chaulere chogwira ntchito ndi data yomwe ikukhala ku Amazon S3 yosungirako. Zomwe zimagwiritsidwa ntchito zimalembedwa m'chinenero cha pulogalamu ya python, ndipo chifukwa cha izi zitha kugwiritsidwa ntchito mu machitidwe onse a Windows ndi Linux.
Kuyika 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
Kuyerekeza zotsatira pa tchati.
Monga mukuwonera, Brotli akufanana ndi kukula kwa LZMA, koma zosunga zobwezeretsera zimachitika mu nthawi ya LZ4.
Macheza a anthu olankhula Chirasha a PostgreSQL:
Chonde perekani nyenyezi ku Github ngati mugwiritsa ntchito
Source: www.habr.com