ni zana rahisi na bora ya kucheleza PostgreSQL kwenye mawingu. Kwa upande wa utendaji wake kuu, ni mrithi wa chombo maarufu , lakini imeandikwa upya katika Go. Lakini kuna kipengele kimoja muhimu kipya katika nakala za WAL-G - delta. nakala za delta kuhifadhi kurasa za faili ambazo zimebadilika tangu toleo la awali la chelezo. WAL-G hutumia teknolojia nyingi sana za kusawazisha chelezo. WAL-G ina kasi zaidi kuliko WAL-E.
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 minioHariri AccessKey na SecretKey katika /etc/minio/minio.conf
vi /etc/minio/minio.confIkiwa hautatumia nginx kabla ya Minio, basi unahitaji kubadilisha
--address 127.0.0.1:9000--address 0.0.0.0:9000Inazindua Minio
systemctl start minioNenda kwenye kiolesura cha wavuti cha Minio na unda ndoo (kwa mfano, pg-backups).
Seva ya DB
WAL-G katika rpm imekusanywa na mimi (Anton Patsev). , .
Ambao hawana mfumo wa msingi wa RPM, tumia rasmi kwa ufungaji.
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.shWeka walg.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gInaangalia toleo la wal-g.
wal-g --version
wal-g version v0.2.14Hariri /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 mcTunaanzisha hifadhidata.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKIkiwa 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 = archiveWacha 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.6Katika 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.logWacha tuende kwa psql.
su - postgres
psqlUnda 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;
doneHakikisha kufanya nakala kamili.
su - postgres
/usr/local/bin/backup-push.shTunaangalia 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.shMtihani 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.shUchimbaji 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.logKupona 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+00Tunaanza 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.logUpimaji
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 MBs4cmd β Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Amazon S3. Π£ΡΠΈΠ»ΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ python, ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ WindowsNa Linux.
Inaweka s4cmd
pip install s4cmdLZ4
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 ΠΌΠ± Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ Π±Π΅ΠΊΠ°ΠΏ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ lzmaBrotli
ΠΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ 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
