Inleiding tot die wal-g PostgreSQL-rugsteunstelsel

WAL-G is 'n eenvoudige en effektiewe hulpmiddel om PostgreSQL na die wolk te rugsteun. Wat die hooffunksie daarvan betref, is dit die opvolger van die gewilde instrument WAL-E, maar herskryf in Go. Maar WAL-G het een belangrike nuwe kenmerk: delta-kopieë. Delta kopieë WAL-G bêre bladsye van lêers wat verander het sedert die vorige weergawe van die rugsteun. WAL-G implementeer heelwat tegnologieë vir parallellisering van rugsteun. WAL-G is baie vinniger as WAL-E.

Besonderhede van hoe wal-g werk, kan in die artikel gevind word: Ons versnel die rugsteun. Yandex lesing

Die S3-bergingsprotokol het gewild geword vir die stoor van data. Een van die voordele van S3 is die vermoë om toegang te verkry via API, wat jou toelaat om buigsame interaksie met die berging te organiseer, insluitend publieke leestoegang, terwyl die opdatering van inligting in die berging slegs deur gemagtigde persone plaasvind.

Daar is verskeie publieke en private bergingsimplementasies wat die S3-protokol gebruik. Vandag sal ons kyk na 'n gewilde oplossing vir die organisering van klein stoorfasiliteite - Minio.

'n Enkele PostgreSQL-bediener is geskik om wal-g te toets, en Minio word gebruik as 'n plaasvervanger vir S3.

Minio bediener

Installeer Minio

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

Redigeer AccessKey en SecretKey in /etc/minio/minio.conf

vi /etc/minio/minio.conf

As jy nie nginx voor Minio sal gebruik nie, moet jy verander

--address 127.0.0.1:9000

--address 0.0.0.0:9000

Begin Minio

systemctl start minio

Gaan na die Minio-webkoppelvlak http://ip-адрес-сервера-minio:9000 en skep 'n emmer (byvoorbeeld, pg-rugsteun).

DB bediener

Ek monteer WAL-G in rpm (Anton Patsev). GitHub, Fedora COPR.

Vir diegene wat nie 'n RPM-gebaseerde stelsel het nie, gebruik die amptelike een instruksies op installasie.

Saam met die wal-g binêre, bevat die rpm skrifte wat veranderlikes invoer vanaf die /etc/wal-gd/server-s3.conf lêer.

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

Installeer wal-g.

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

Kontroleer die weergawe van wal-g.

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

Redigeer /etc/wal-gd/server-s3.conf om by jou behoeftes te pas.

Konfigurasielêers en datalêers wat deur 'n databasiskluster gebruik word, word tradisioneel saam in die groepdatagids gestoor, wat algemeen na verwys word as 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 # Какой метод сжатия использовать.

Wanneer jy WAL-G opstel, spesifiseer jy WALG_DELTA_MAX_STEPS - die aantal stappe waardeur die delta-rugsteun maksimaal ver van die basis-rugsteun is, en spesifiseer die delta-kopiebeleid. Of jy maak 'n kopie van die laaste bestaande delta, of jy maak 'n delta van die oorspronklike volledige rugsteun. Dit is nodig vir die geval wanneer dieselfde databasiskomponent altyd in jou databasis verander, dieselfde data voortdurend verander.

Die installering van die databasis.

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

Kom ons inisialiseer die databasis.

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

As jy op 1 bediener toets, moet jy die wal_level-parameter herkonfigureer om vir PostgreSQL weergawe minder as 10 te argiveer, en replika vir PostgreSQL weergawe 10 en ouer.

wal_level = archive

Kom ons rugsteun WAL-argiewe elke 60 sekondes deur PostgreSQL self te gebruik. In die produksie sal jy 'n ander argief_tydverloop waarde hê.

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

Kom ons begin PostgreSQL

systemctl start postgresql-9.6

In 'n aparte konsole kyk ons ​​na die PostgreSQL logs vir foute: (verander postgresql-Wed.log na die huidige een).

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

Kom ons gaan na psql.

su - postgres
psql

Ons skep 'n databasis in psql.

Skep 'n tabel in die toets1 databasis.

create database test1;

Skakel oor na die toetsdatabasis.

postgres=# c test1;

Skep 'n tabel indeksering_tabel.

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

Voeg data by.

Kom ons begin data-invoeging. Ons wag 10-20 minute.

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

Maak seker dat jy 'n volledige rugsteun maak.

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

Ons kyk na die inskrywings in die tabel in die toets1-databasis

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+

Die string is die huidige tyd.

Ons kyk na die lys van volledige rugsteun

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

Hersteltoetsing

Volle herstel met die rol van alle beskikbare WAL.

Stop Postgresql.

Ons vee alles uit die /var/lib/pgsql/9.6/data-lêergids uit.

Begin die skrip /usr/local/bin/backup-fetch.sh vanaf die postgres-gebruiker.

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

Rugsteunonttrekking voltooi.

Voeg recovery.conf by die /var/lib/pgsql/9.6/data-lêergids met die volgende inhoud.

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

Begin PostgreSQL. PostgreSQL sal die herstelproses vanaf die geargiveerde WAL begin, en eers dan sal die databasis oopmaak.

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

Herstel vir 'n sekere tyd.

As ons die databasis tot 'n sekere minuut wil herstel, dan voeg ons in recovery.conf die recovery_target_time parameter by - ons dui aan op watter tyd om die databasis te herstel.

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

Na herstel, kyk na die indexing_table tabel

 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

Begin PostgreSQL. PostgreSQL sal die herstelproses vanaf die geargiveerde WAL begin, en eers dan sal die databasis oopmaak.

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

toets

Ons genereer 'n 1GB databasis soos hier beskryf https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

Ons versoek die emmergrootte nadat ons 1 GB data gegenereer het.

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

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

Installeer 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

Vergelyking van resultate op 'n grafiek.

Inleiding tot die wal-g PostgreSQL-rugsteunstelsel

Soos ons kan sien, is Brotli in grootte vergelykbaar met LZMA, maar rugsteun word in LZ4-tyd uitgevoer.

Klets van die Russiessprekende PostgreSQL-gemeenskap: https://t.me/pgsql

Gee asseblief 'n ster op Github as jy dit gebruik wal-g

Bron: will.com

Koop betroubare hosting vir werwe met DDoS-beskerming, VPS VDS-bedieners 🔥 Koop betroubare webwerfhosting met DDoS-beskerming, VPS VDS-bedieners | ProHoster