Kynning á wal-g PostgreSQL öryggisafritunarkerfinu

WAL-G er einfalt og áhrifaríkt tól til að taka afrit af PostgreSQL í skýin. Hvað varðar helstu virkni þess er það erfingi vinsæla tækisins WAL-E, en endurskrifað í Go. En það er einn mikilvægur nýr eiginleiki í WAL-G - delta afritum. delta afrit WAL-G geyma síður af skrám sem hafa breyst frá fyrri afritunarútgáfu. WAL-G útfærir töluvert af tækni til að samhliða afritum. WAL-G er miklu hraðari en WAL-E.

Upplýsingar um hvernig wal-g virkar má finna í greininni: Við yfirklukkum öryggisafritið. Yandex fyrirlestur

S3 geymslusamskiptareglur hafa orðið vinsælar til að geyma gögn. Einn af kostum S3 er möguleikinn á aðgangi í gegnum API, sem gerir þér kleift að skipuleggja sveigjanlega samskipti við geymsluna, þar með talið almennan lesaðgang, á meðan uppfærsla upplýsinga í geymslunni á sér stað aðeins af viðurkenndum aðilum.

Það eru nokkrar opinberar og einkageymsluútfærslur sem nota S3 samskiptareglur. Í dag munum við skoða vinsæla lausn til að skipuleggja litla geymslu - Minio.

Einn PostgreSQL þjónn er fínn til að prófa wal-g og Minio er notaður í staðinn fyrir S3.

Minio Server

Minio uppsetning

yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio

Breyttu AccessKey og SecretKey í /etc/minio/minio.conf

vi /etc/minio/minio.conf

Ef þú munt ekki nota nginx fyrir Minio, þá þarftu að breyta

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Ræsir Minio

systemctl start minio

Farðu í Minio vefviðmótið http://ip-адрес-сервера-minio:9000 og búðu til fötu (til dæmis pg-afrit).

DB þjónn

WAL-G í snúningum á mínútu er sett saman af mér (Anton Patsev). GitHub, Fedora endurlífgun.

Hver er ekki með RPM-undirstaða kerfi, notaðu opinbera kennsla með uppsetningu.

Ásamt wal-g tvöfaldanum inniheldur rpm forskriftir sem flytja inn breytur úr /etc/wal-gd/server-s3.conf skránni.

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

Settu upp Walg.

yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g

Athugar wal-g útgáfu.

wal-g --version
wal-g version v0.2.14

Breyttu /etc/wal-gd/server-s3.conf að þínum þörfum.

Stillingarskrár og gagnaskrár sem notaðar eru af gagnagrunnsklasa eru venjulega geymdar saman í klasagagnaskránni, sem venjulega er vísað til sem 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 # Какой метод сжатия использовать.

Þegar þú stillir WAL-G, tilgreinirðu WALG_DELTA_MAX_STEPS - fjölda skrefa sem delta öryggisafritið er hámark frá grunnafritinu og tilgreinir delta afritunarstefnuna. Annaðhvort gerir þú afrit af síðasta núverandi delta, eða þú gerir delta úr upprunalegu fullu öryggisafritinu. Þetta er nauðsynlegt ef sami hluti gagnagrunnsins er alltaf að breytast í gagnagrunninum þínum, sömu gögnin eru stöðugt að breytast.

Uppsetning gagnagrunnsins.

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

Við frumstillum gagnagrunninn.

/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK

Ef þú ert að prófa á 1 netþjóni, þá þarftu að endurstilla wal_level færibreytuna til að geyma fyrir PostgreSQL minni en útgáfu 10, og eftirmynd fyrir PostgreSQL útgáfu 10 og eldri.

wal_level = archive

Við skulum taka öryggisafrit af WAL skjalasafni á 60 sekúndna fresti með PostgreSQL sjálfu. Á prod muntu hafa annað archive_timeout gildi.

archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.

Ræsir PostgreSQL

systemctl start postgresql-9.6

Í sérstakri stjórnborði, skoðum við PostgreSQL logs fyrir villur: (breyttu postgresql-Wed.log í núverandi).

tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Við skulum fara í psql.

su - postgres
psql

Búðu til gagnagrunn í psql

Búðu til töflu í gagnagrunnsprófinu1.

create database test1;

Skiptu yfir í gagnagrunnsprófið.

postgres=# c test1;

Við búum til töfluna indexing_table.

test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());

Bætir við gögnum.

Við byrjum að setja inn gögn. Við bíðum í 10-20 mínútur.

#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done

Vertu viss um að taka fullt öryggisafrit.

su - postgres
/usr/local/bin/backup-push.sh

Við skoðum færslurnar í töflunni í gagnagrunnsprófinu1

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+

Strengur er núverandi tími.

Sjá lista yfir fulla öryggisafrit

/usr/local/bin/backup-list.sh

Endurheimtarpróf

Fullur bati með því að rúlla öllum tiltækum WAL.

Hættu Postgresql.

Eyddu öllu úr /var/lib/pgsql/9.6/data möppunni.

Keyrðu /usr/local/bin/backup-fetch.sh forskriftina sem postgres notandi.

su - postgres
/usr/local/bin/backup-fetch.sh

Afritunarútdrætti lokið.

Bættu recovery.conf við /var/lib/pgsql/9.6/data möppuna með eftirfarandi efni.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'

Við byrjum PostgreSQL. PostgreSQL mun hefja endurheimtarferlið frá geymdu WALs, og aðeins þá mun gagnagrunnurinn opnast.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Bati í ákveðinn tíma.

Ef við viljum endurheimta gagnagrunninn í allt að ákveðna mínútu, þá bætum við færibreytunni recovery_target_time við recovery.conf - við tilgreinum hvenær á að endurheimta gagnagrunninn.

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'

Eftir endurheimt skaltu skoða töfluna 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

Við byrjum PostgreSQL. PostgreSQL mun hefja endurheimtarferlið frá geymdu WALs, og aðeins þá mun gagnagrunnurinn opnast.

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

Prófun

Búa til 1GB gagnagrunn eins og lýst er hér https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Biðja um fötustærð eftir að hafa búið til 1GB af gögnum.

postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB

s4cmd — бесплатный инструмент командной строки для работы с данными, расположенными в хранилище Amazon S3. Утилита написана на языке программирования python, и благодаря этому может использоваться в операционных системах и WindowsOg Linux.

Er að setja upp 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

Samanburður á niðurstöðum á töflunni.

Kynning á wal-g PostgreSQL öryggisafritunarkerfinu

Eins og þú sérð er Brotli sambærilegur að stærð og LZMA, en öryggisafritið fer fram á LZ4 tíma.

Spjall rússneskumælandi PostgreSQL samfélagsins: https://t.me/pgsql

Vinsamlegast gefðu Github stjörnu ef þú notar wal-g

Heimild: www.habr.com

Kauptu áreiðanlega hýsingu fyrir síður með DDoS vernd, VPS VDS netþjónum 🔥 Kauptu áreiðanlega vefhýsingu með DDoS vörn, VPS VDS netþjónum | ProHoster