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 , 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 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:
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 minioDeasachadh AccessKey agus SecretKey ann an /etc/minio/minio.conf
vi /etc/minio/minio.confMura cleachd thu nginx ro Minio, feumaidh tu atharrachadh
--address 127.0.0.1:9000--address 0.0.0.0:9000Cuir air bhog Mini
systemctl start minioRach gu eadar-aghaidh lìn Minio agus cruthaich bucaid (mar eisimpleir, pg-backups).
DB frithealaiche
Bidh mi a’ cruinneachadh WAL-G ann an rpm (Anton Patsev). , .
Dhaibhsan aig nach eil siostam stèidhichte air RPM, cleachd am fear oifigeil 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.shStàlaich wal-g.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gA’ sgrùdadh an dreach de wal-g.
wal-g --version
wal-g version v0.2.14Deasaich /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 mcTòisichidh sinn an stòr-dàta.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKMa 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 = archiveBheir 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.6Ann 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.logRachamaid gu psql.
su - postgres
psqlBidh 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;
doneDèan cinnteach gun dèan thu cùl-taic slàn.
su - postgres
/usr/local/bin/backup-push.shBheir 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.shDeuchainn 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.logAth-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+00Cuir 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.logDeuchainn
Bidh sinn a’ gineadh stòr-dàta 1GB mar a tha air a mhìneachadh an seo
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 MBs4cmd — бесплатный инструмент командной строки для работы с данными, расположенными в хранилище Amazon S3. Утилита написана на языке программирования python, и благодаря этому может использоваться в операционных системах и Windowsagus Linux.
Stàlaich 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
Dèan coimeas eadar toraidhean air graf.

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:
Feuch an toir thu rionnag air Github ma chleachdas tu
Source: www.habr.com
