Ro-ràdh don t-siostam cùl-taic wal-g PostgreSQL

WAL-G na inneal sìmplidh agus èifeachdach airson taic a thoirt do PostgreSQL don sgòth. A thaobh a phrìomh ghnìomhachd, tha e na neach-leantainn don inneal mòr-chòrdte WAL-E, ach air ath-sgrìobhadh ann an Go. Ach tha aon fheart ùr cudromach aig WAL-G: leth-bhreacan delta. Delta lethbhreac a dhèanamh dheth WAL-G stòraich duilleagan de fhaidhlichean a tha air atharrachadh bhon tionndadh mu dheireadh den lethbhreac glèidhidh. Bidh WAL-G a’ cur an gnìomh tòrr theicneòlasan airson a bhith a’ co-thaobhadh cùl-taic. Tha WAL-G fada nas luaithe na WAL-E.

Gheibhear mion-fhiosrachadh air mar a tha wal-g ag obair san artaigil: Bidh sinn a 'luathachadh an cùl-taic. Yandex òraid

Tha am pròtacal stòraidh S3 air fàs mòr-chòrdte airson stòradh dàta. Is e aon de na buannachdan aig S3 an comas faighinn a-steach tro API, a leigeas leat eadar-obrachadh sùbailte a chuir air dòigh leis an stòradh, a’ toirt a-steach ruigsinneachd leughaidh poblach, fhad ‘s a tha ùrachadh fiosrachadh anns an stòradh a’ tachairt le daoine ùghdarraichte a-mhàin.

Tha grunn ghnìomhan stòraidh poblach is prìobhaideach ann a bhios a’ cleachdadh protocol S3. An-diugh seallaidh sinn ri fuasgladh mòr-chòrdte airson goireasan stòraidh beaga a chuir air dòigh - Minio.

Tha aon fhrithealaiche PostgreSQL freagarrach airson deuchainn a dhèanamh air wal-g, agus tha Minio air a chleachdadh an àite S3.

Am frithealaiche mini

Mini a stàladh

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

Deasachadh AccessKey agus SecretKey ann an /etc/minio/minio.conf

vi /etc/minio/minio.conf

Mura cleachd thu nginx ro Minio, feumaidh tu atharrachadh

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Cuir air bhog Mini

systemctl start minio

Rach gu eadar-aghaidh lìn Minio http://ip-адрес-сервера-minio:9000 agus cruthaich bucaid (mar eisimpleir, pg-backups).

DB frithealaiche

Bidh mi a’ cruinneachadh WAL-G ann an rpm (Anton Patsev). GitHub, Fedora COPR.

Dhaibhsan aig nach eil siostam stèidhichte air RPM, cleachd am fear oifigeil stiùiridhean air an stàladh.

Còmhla ris an wal-g binary, tha sgriobtaichean anns an rpm a bheir a-steach caochladairean bhon fhaidhle /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

Stàlaich wal-g.

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

A’ sgrùdadh an dreach de wal-g.

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

Deasaich /etc/wal-gd/server-s3.conf gus freagairt air na feumalachdan agad.

Bidh faidhlichean rèiteachaidh agus faidhlichean dàta a bhios buidheann stòr-dàta a’ cleachdadh gu traidiseanta air an stòradh còmhla anns an eòlaire dàta brabhsair, ris an canar gu tric 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 # Какой метод сжатия использовать.

Nuair a bhios tu a’ stèidheachadh WAL-G, bidh thu a’ sònrachadh WALG_DELTA_MAX_STEPS - an àireamh de cheumannan leis am bi cùl-taic delta cho fada air falbh bhon chùl-taic bunaiteach, agus sònraich am poileasaidh leth-bhreac delta. An dàrna cuid nì thu leth-bhreac bhon delta mu dheireadh a th’ ann, no nì thu delta bhon làn chùl-taic tùsail. Tha seo riatanach airson cùis nuair a tha an aon phàirt stòr-dàta an-còmhnaidh ag atharrachadh anns an stòr-dàta agad, tha an aon dàta an-còmhnaidh ag atharrachadh.

Stàladh an stòr-dàta.

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

Tòisichidh sinn an stòr-dàta.

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

Ma tha thu a’ dèanamh deuchainn air frithealaiche 1, feumaidh tu am paramadair wal_level ath-dhealbhadh gus tasglann a dhèanamh airson dreach PostgreSQL nas lugha na 10, agus mac-samhail airson dreach PostgreSQL 10 agus nas sine.

wal_level = archive

Bheir sinn cùl-taic de thasglannan WAL gach 60 diog a’ cleachdadh PostgreSQL fhèin. Ann an riochdachadh bidh luach eadar-dhealaichte agad archive_timeout.

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

Feuch an tòisich sinn PostgreSQL

systemctl start postgresql-9.6

Ann an consol air leth, bidh sinn a’ coimhead air na logaichean PostgreSQL airson mearachdan: (atharraich postgresql-Wed.log chun fhear a th’ ann an-dràsta).

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

Rachamaid gu psql.

su - postgres
psql

Bidh sinn a’ cruthachadh stòr-dàta ann am psql.

Cruthaich clàr ann an stòr-dàta deuchainn 1.

create database test1;

Tionndaidh gu stòr-dàta deuchainn.

postgres=# c test1;

Cruthaich clàr indexing_table.

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

A' cur dàta ris.

Feuch an tòisich sinn air cuir a-steach dàta. Bidh sinn a 'feitheamh 10-20 mionaid.

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

Dèan cinnteach gun dèan thu cùl-taic slàn.

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

Bheir sinn sùil air na h-inntrigidhean sa chlàr ann an stòr-dàta test1

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+

Is e an t-sreath an ùine làithreach.

Bheir sinn sùil air liosta nan cùl-taic slàn

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

Deuchainn ath-bheothachaidh

Làn ath-bheothachadh le gluasad thairis air a h-uile WAL a tha ri fhaighinn.

A’ cur stad air Postgresql.

Sguabaidh sinn às a h-uile càil bhon phasgan /var/lib/pgsql/9.6/data.

Ruith an sgriobt /usr/local/bin/backup-fetch.sh bhon chleachdaiche postgres.

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

Às-tharraing cùl-taic crìochnaichte.

Cuir recovery.conf ris a’ phasgan /var/lib/pgsql/9.6/data leis an t-susbaint a leanas.

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

Cuir PostgreSQL air bhog. Cuiridh PostgreSQL air bhog am pròiseas ath-bheothachaidh bhon WAL tasglainn, agus is ann dìreach an uairsin a dh’ fhosglas an stòr-dàta.

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

Ath-bheothachadh airson ùine shònraichte.

Ma tha sinn airson an stòr-dàta a thoirt air ais gu mionaid sònraichte, an uairsin cuiridh sinn am paramadair recovery_target_time gu recovery.conf - bidh sinn a’ comharrachadh dè an uair airson an stòr-dàta a thoirt air ais.

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

Às deidh faighinn air ais, thoir sùil air a’ chlàr 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

Cuir PostgreSQL air bhog. Cuiridh PostgreSQL air bhog am pròiseas ath-bheothachaidh bhon WAL tasglainn, agus is ann dìreach an uairsin a dh’ fhosglas an stòr-dàta.

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

Deuchainn

Bidh sinn a’ gineadh stòr-dàta 1GB mar a tha air a mhìneachadh an seo https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Bidh sinn ag iarraidh meud a’ bhucaid às deidh dhuinn 1GB de dhàta a ghineadh.

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

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

Stàlaich 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

Dèan coimeas eadar toraidhean air graf.

Ro-ràdh don t-siostam cùl-taic wal-g PostgreSQL

Mar a chì sinn, tha Brotli coimeasach ann am meud ri LZMA, ach thèid cùl-taic a dhèanamh ann an ùine LZ4.

Còmhradh na coimhearsnachd PostgreSQL le Ruiseanach: https://t.me/pgsql

Feuch an toir thu rionnag air Github ma chleachdas tu wal-g

Source: www.habr.com

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster