булуттар үчүн PostgreSQL камдык сактоо үчүн жөнөкөй жана натыйжалуу куралы болуп саналат. Негизги функционалдуулугу боюнча, ал популярдуу куралдын мураскору болуп саналат , бирок Go менен кайра жазылган. Бирок WAL-Gде бир маанилүү жаңы өзгөчөлүк бар - дельта көчүрмөлөрү. дельта көчүрмөлөрү мурунку камдык версиясынан бери өзгөргөн файлдардын барактарын сактаңыз. WAL-G камдык көчүрмөлөрдү параллелизациялоо үчүн көптөгөн технологияларды ишке ашырат. WAL-G WAL-Eге караганда бир топ ылдам.
wal-g кантип иштээри жөнүндө маалымат макалада тапса болот:
S3 сактоо протоколу маалыматтарды сактоо үчүн популярдуу болуп калды. S3 артыкчылыктарынын бири - бул API аркылуу кирүү мүмкүнчүлүгү, ал сактоочу менен ийкемдүү өз ара аракеттенүүнү, анын ичинде жалпыга ачык окуу мүмкүнчүлүгүн уюштурууга мүмкүндүк берет, ал эми сактагычтагы маалыматты жаңыртуу ыйгарым укуктуу адамдар тарабынан гана ишке ашат.
S3 протоколун колдонгон бир нече коомдук жана жеке сактоо программалары бар. Бүгүн биз кичинекей сактоону уюштуруу үчүн популярдуу чечимди карап чыгабыз - Minio.
Жалгыз PostgreSQL сервери wal-g тестирлөө үчүн жакшы, ал эми Minio S3 үчүн алмаштыруу катары колдонулат.
Minio сервер
Minio орнотуу
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio/etc/minio/minio.conf ичинде AccessKey жана SecretKeyди түзөтүңүз
vi /etc/minio/minio.confЭгер сиз Minio чейин nginx колдонбосоңуз, анда сиз өзгөртүүгө туура келет
--address 127.0.0.1:9000--address 0.0.0.0:9000Minio ишке киргизилүүдө
systemctl start minioMinio веб интерфейсине өтүңүз жана чака түзүңүз (мисалы, pg-камдык көчүрмөлөр).
DB сервери
WAL-G мин rpm менен чогултулган (Антон Пацев). , .
Ким RPM негизделген системасы жок, расмий колдонуу орнотуу менен.
wal-g бинардык менен бирге rpm /etc/wal-gd/server-s3.conf файлынан өзгөрмөлөрдү импорттоочу скрипттерди камтыйт.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shWalg орнотуу.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gwal-g версия текшерилүүдө.
wal-g --version
wal-g version v0.2.14/etc/wal-gd/server-s3.conf керектөөлөрүңүзгө түзөтүңүз.
Берилиштер базасы кластери тарабынан колдонулган конфигурация файлдары жана маалымат файлдары адатта кластердин маалымат каталогунда чогуу сакталат, адатта деп аталат. 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 # Какой метод сжатия использовать.
WAL-G конфигурациялоодо, сиз WALG_DELTA_MAX_STEPS - базалык камдык көчүрмөдөн дельтанын камдык көчүрмөсү максималдуу болгон кадамдардын санын белгилейсиз жана дельтаны көчүрүү саясатын белгилейсиз. Же сиз акыркы дельтадан көчүрмө жасайсыз, же түпнуска толук камдык көчүрмөдөн дельтаны жасайсыз. Бул маалымат базасынын бир эле компоненти сиздин маалымат базаңызда дайыма өзгөрүп турганда, ошол эле маалыматтар тынымсыз өзгөрүп турган учурда зарыл.
Маалыматтар базасын орнотуу.
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Биз маалымат базасын инициализациялайбыз.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKЭгер сиз 1 серверде сынап жаткан болсоңуз, анда PostgreSQL 10 версиясынан азыраак жана PostgreSQL 10 жана андан улуу версиясы үчүн репликаны архивдөө үчүн wal_level параметрин кайра конфигурациялашыңыз керек.
wal_level = archiveКелгиле, PostgreSQLдин өзүн колдонуп, WAL архивдерин ар бир 60 секундада камдык көчүрмөсүн жасайлы. Продукцияда сизде башка archive_timeout мааниси болот.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.PostgreSQL башталат
systemctl start postgresql-9.6Өзүнчө консолдо биз каталар үчүн PostgreSQL журналдарын карайбыз: (postgresql-Wed.logди учурдагыга өзгөртүү).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logКелгиле, psqlге баралы.
su - postgres
psqlpsqlде маалымат базасын түзүңүз
Берилиштер базасы тестинде таблица түзүңүз1.
create database test1;Маалыматтар базасын сыноого өтүү.
postgres=# c test1;Биз indexing_table таблицасын түзөбүз.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());Дайындарды кошуу.
Биз маалыматтарды киргизе баштайбыз. Биз 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Толук камдык көчүрмөнү жасоону унутпаңыз.
su - postgres
/usr/local/bin/backup-push.shТест1 базасында таблицадагы жазууларды карайбыз
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+Сап - учурдагы убакыт.
Толук камдык көчүрмөлөрдүн тизмесин караңыз
/usr/local/bin/backup-list.shКалыбына келтирүү тести
Бардык жеткиликтүү WAL жылдыруу менен толук калыбына келтирүү.
Postgresql токтотуу.
/var/lib/pgsql/9.6/data папкасынан баарын жок кылыңыз.
/usr/local/bin/backup-fetch.sh скриптин postgres колдонуучусу катары иштетиңиз.
su - postgres
/usr/local/bin/backup-fetch.shКамдык көчүрмөнү алуу аяктады.
Recovery.conf файлын /var/lib/pgsql/9.6/data папкасына төмөнкү мазмун менен кошуңуз.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'Биз PostgreSQLди баштайбыз. PostgreSQL архивделген WALлардан калыбына келтирүү процессин баштайт жана андан кийин гана маалымат базасы ачылат.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logБелгилүү бир убакытка калыбына келтирүү.
Эгерде биз маалымат базасын белгилүү бир мүнөткө чейин калыбына келтиргибиз келсе, анда recovery.conf дегенге recovery_target_time параметрин кошобуз – биз маалымат базасын кайсы убакта калыбына келтириш керек экенин көрсөтөбүз.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'Калыбына келтиргенден кийин, 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Биз PostgreSQLди баштайбыз. PostgreSQL архивделген WALлардан калыбына келтирүү процессин баштайт жана андан кийин гана маалымат базасы ачылат.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logтестирлөө
Бул жерде сүрөттөлгөндөй 1 ГБ маалымат базасын түзүү
1 ГБ дайындарды чыгаргандан кийин челектин өлчөмүн суроо.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd Amazon S3 сактагычында жайгашкан маалыматтар менен иштөө үчүн акысыз буйрук сабы куралы. Утилита python программалоо тилинде жазылган жана ушундан улам аны Windows жана Linux операциялык системаларында колдонсо болот.
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
Диаграммадагы жыйынтыктарды салыштыруу.

Көрүнүп тургандай, Brotli өлчөмү LZMA менен салыштырууга болот, бирок камдык LZ4 убакытта жүзөгө ашырылат.
Орус тилдүү PostgreSQL коомчулугунун чаты:
Сураныч, эгер сиз колдонсоңуз, Githubга жылдыз бериңиз
Source: www.habr.com
