Utangulizi wa mfumo wa chelezo wa wal-g PostgreSQL

WAL-G ni zana rahisi na bora ya kucheleza PostgreSQL kwenye mawingu. Kwa upande wa utendaji wake kuu, ni mrithi wa chombo maarufu WAL-E, lakini imeandikwa upya katika Go. Lakini kuna kipengele kimoja muhimu kipya katika nakala za WAL-G - delta. nakala za delta WAL-G 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: Tunabadilisha nakala rudufu. Hotuba ya Yandex

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 http://ip-адрСс-сСрвСра-minio:9000 na unda ndoo (kwa mfano, pg-backups).

Seva ya DB

WAL-G katika rpm imekusanywa na mimi (Anton Patsev). Github, Fedora COPR.

Ambao hawana mfumo wa msingi wa RPM, tumia rasmi maelekezo 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.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 https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

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.

Utangulizi wa mfumo wa chelezo wa wal-g PostgreSQL

Kama unavyoona, Brotli inalinganishwa kwa saizi na LZMA, lakini nakala rudufu hufanywa kwa wakati wa LZ4.

Gumzo la jumuiya ya PostgreSQL inayozungumza Kirusi: https://t.me/pgsql

Tafadhali toa nyota kwa Github ikiwa unatumia wal-g

Chanzo: mapenzi.com

Kuongeza maoni