Maelezo ya jinsi wal-g inavyofanya kazi yanaweza kupatikana katika makala:
Itifaki ya hifadhi ya S3 imekuwa maarufu kwa kuhifadhi data. Moja ya faida za S3 ni uwezo wa kufikia kupitia API, ambayo inakuwezesha kuandaa mwingiliano rahisi na hifadhi, ikiwa ni pamoja na upatikanaji wa kusoma kwa umma, wakati uppdatering habari katika hifadhi hutokea tu kwa watu walioidhinishwa.
Kuna utekelezaji kadhaa wa uhifadhi wa umma na wa kibinafsi unaotumia itifaki ya S3. Leo tutaangalia suluhisho maarufu kwa kuandaa hifadhi ndogo - Minio.
Seva moja ya PostgreSQL ni sawa kwa kujaribu wal-g, na Minio inatumika kama mbadala wa S3.
Seva ya Minio
Ufungaji wa minio
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio
Hariri AccessKey na SecretKey katika /etc/minio/minio.conf
vi /etc/minio/minio.conf
Ikiwa hautatumia nginx kabla ya Minio, basi unahitaji kubadilisha
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Inazindua Minio
systemctl start minio
Nenda kwenye kiolesura cha wavuti cha Minio
Seva ya DB
WAL-G katika rpm imekusanywa na mimi (Anton Patsev).
Ambao hawana mfumo wa msingi wa RPM, tumia rasmi
Pamoja na wal-g binary, rpm ina hati zinazoingiza vigeu kutoka kwa faili ya /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
Weka walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g
Inaangalia toleo la wal-g.
wal-g --version
wal-g version v0.2.14
Hariri /etc/wal-gd/server-s3.conf kwa mahitaji yako.
Faili za usanidi na faili za data zinazotumiwa na kikundi cha hifadhidata kawaida huhifadhiwa pamoja katika saraka ya data ya nguzo, inayojulikana kama 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 # ΠΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Wakati wa kusanidi WAL-G, unabainisha WALG_DELTA_MAX_STEPS - idadi ya hatua ambazo hifadhi rudufu ya delta ni ya juu zaidi kutoka kwa hifadhi ya msingi, na ubainishe sera ya nakala ya delta. Unaweza kutengeneza nakala kutoka kwa delta iliyopo ya mwisho, au utengeneze delta kutoka kwa chelezo kamili asili. Hii ni muhimu katika kesi wakati sehemu sawa ya hifadhidata inabadilika kila wakati kwenye hifadhidata yako, data sawa inabadilika kila wakati.
Kufunga hifadhidata.
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
Tunaanzisha hifadhidata.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Ikiwa unajaribu kwenye seva 1, basi unahitaji kusanidi upya kigezo cha wal_level ili kuhifadhi kwenye kumbukumbu kwa PostgreSQL chini ya toleo la 10, na nakala ya toleo la 10 la PostgreSQL na zaidi.
wal_level = archive
Wacha tuhifadhi kumbukumbu za WAL kila sekunde 60 kwa kutumia PostgreSQL yenyewe. Kwenye prod, utakuwa na thamani tofauti ya archive_timeout.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ΠΠ°ΠΆΠ΄ΡΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° archive_command.
Kuanzisha PostgreSQL
systemctl start postgresql-9.6
Katika console tofauti, tunaangalia kumbukumbu za PostgreSQL kwa makosa: (badilisha postgresql-Wed.log hadi ya sasa).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Wacha tuende kwa psql.
su - postgres
psql
Unda hifadhidata katika psql
Unda jedwali katika jaribio la hifadhidata1.
create database test1;
Badili hadi kwenye jaribio la hifadhidata.
postgres=# c test1;
Tunaunda jedwali la indexing_table.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());
Kuongeza data.
Tunaanza kuingiza data. Tunasubiri kwa dakika 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
Hakikisha kufanya nakala kamili.
su - postgres
/usr/local/bin/backup-push.sh
Tunaangalia rekodi kwenye jedwali katika jaribio la hifadhidata1
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+
Mfuatano ni wakati wa sasa.
Tazama orodha ya nakala kamili
/usr/local/bin/backup-list.sh
Mtihani wa kurejesha
Ahueni kamili kwa kusongesha WAL yote inayopatikana.
Acha Postgresql.
Futa kila kitu kutoka kwa /var/lib/pgsql/9.6/data folda.
Endesha hati /usr/local/bin/backup-fetch.sh kama mtumiaji wa postgres.
su - postgres
/usr/local/bin/backup-fetch.sh
Uchimbaji wa nakala rudufu umekamilika.
Ongeza recovery.conf kwenye folda ya /var/lib/pgsql/9.6/data yenye maudhui yafuatayo.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
Tunaanza PostgreSQL. PostgreSQL itaanza mchakato wa kurejesha kutoka kwa WAL zilizohifadhiwa, na kisha tu hifadhidata itafunguliwa.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Kupona kwa muda fulani.
Ikiwa tunataka kurejesha database hadi dakika fulani, basi tunaongeza parameter recovery_target_time kwa recovery.conf - tunaonyesha wakati gani wa kurejesha database.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'
Baada ya kupona, angalia jedwali la 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
Tunaanza PostgreSQL. PostgreSQL itaanza mchakato wa kurejesha kutoka kwa WAL zilizohifadhiwa, na kisha tu hifadhidata itafunguliwa.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Upimaji
Inazalisha hifadhidata ya 1GB kama ilivyoelezwa hapa
Kuomba ukubwa wa ndoo baada ya kuzalisha 1GB ya data.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB
s4cmd ni zana ya bure ya mstari wa amri ya kufanya kazi na data inayoishi kwenye hifadhi ya Amazon S3. Huduma imeandikwa katika lugha ya programu ya python, na kutokana na hii inaweza kutumika katika mifumo ya uendeshaji ya Windows na Linux.
Inaweka 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
Ulinganisho wa matokeo kwenye chati.
Kama unavyoona, Brotli inalinganishwa kwa saizi na LZMA, lakini nakala rudufu hufanywa kwa wakati wa LZ4.
Gumzo la jumuiya ya PostgreSQL inayozungumza Kirusi:
Tafadhali toa nyota kwa Github ikiwa unatumia
Chanzo: mapenzi.com