wal-g PostgreSQL بيڪ اپ سسٽم جو تعارف

وال-جي بادل ڏانهن PostgreSQL کي بيڪ اپ ڪرڻ لاءِ هڪ سادي ۽ موثر اوزار آهي. ان جي مکيه ڪارڪردگي جي لحاظ کان، اهو مشهور اوزار جو وارث آهي وال-اي، پر Go ۾ ٻيهر لکيو ويو. پر WAL-G ۾ ھڪڙو اھم نئين خصوصيت آھي - delta copies. ڊيلٽا ڪاپيون وال-جي فائلن جا محفوظ صفحا جيڪي اڳئين بيڪ اپ ورزن کان تبديل ٿي ويا آھن. WAL-G متوازي بيڪ اپ لاءِ ڪافي ٽيڪنالاجيون لاڳو ڪري ٿو. WAL-G WAL-E کان گھڻو تيز آھي.

wal-g ڪيئن ڪم ڪري ٿو ان جا تفصيل مضمون ۾ ملي سگھن ٿا: اسان بيڪ اپ کي مٿي ڪيو. Yandex ليڪچر

S3 اسٽوريج پروٽوڪول ڊيٽا کي محفوظ ڪرڻ لاء مشهور ٿي چڪو آهي. S3 جي فائدن مان هڪ آهي API ذريعي رسائي جي صلاحيت، جيڪا توهان کي اسٽوريج سان لچڪدار رابطي کي منظم ڪرڻ جي اجازت ڏئي ٿي، بشمول عوامي پڙهڻ جي رسائي، جڏهن ته اسٽوريج ۾ معلومات کي اپڊيٽ ڪرڻ صرف بااختيار ماڻهن طرفان ٿئي ٿي.

اتي ڪيترائي عوامي ۽ خانگي اسٽوريج لاڳو ڪندڙ آھن جيڪي S3 پروٽوڪول استعمال ڪن ٿا. اڄ اسان هڪ مشهور حل تي نظر ڪنداسين ننڍي اسٽوريج کي منظم ڪرڻ لاء - Minio.

ھڪڙو PostgreSQL سرور wal-g جي جاچ لاءِ ٺيڪ آھي، ۽ Minio استعمال ڪيو ويندو آھي متبادل طور S3 لاءِ.

مينيو سرور

مينيو تنصيب

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:9000

Minio لانچ ڪرڻ

systemctl start minio

مينيو ويب انٽرفيس ڏانھن وڃو http://ip-адрес-сервера-minio:9000 ۽ هڪ بالٽ ٺاهيو (مثال طور، pg-backup).

ڊي بي سرور

rpm ۾ WAL-G مون کي گڏ ڪيو ويو آهي (Anton Patsev). GitHub, فيڊورا COPR.

جنهن وٽ 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.sh

والگ انسٽال ڪريو.

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

wal-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 سرور تي جاچ ڪري رهيا آهيو، ته پوءِ توهان کي wal_level پيٽرولر کي ٻيهر ترتيب ڏيڻ جي ضرورت آهي آرڪائيو ڪرڻ لاءِ PostgreSQL ورزن 10 کان گهٽ، ۽ Replica PostgreSQL ورزن 10 ۽ ان کان وڌيڪ لاءِ.

wal_level = archive

اچو ته WAL آرڪائيوز جو بيڪ اپ ڪريون هر 60 سيڪنڊن ۾ پاڻ PostgreSQL استعمال ڪندي. پروڊڪٽ تي، توهان وٽ هڪ مختلف 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
psql

psql ۾ ڊيٽابيس ٺاهيو

ڊيٽابيس ٽيسٽ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 اسڪرپٽ پوسٽ گريس استعمال ڪندڙ جي طور تي.

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

بيڪ اپ ڪڍڻ مڪمل.

ھيٺ ڏنل مواد سان /var/lib/pgsql/9.6/data فولڊر ۾ recovery.conf شامل ڪريو.

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

اسان شروع ڪريون ٿا PostgreSQL. PostgreSQL آرڪائيو ٿيل WALs مان وصولي جي عمل کي شروع ڪندو، ۽ صرف پوء ڊيٽابيس کليل هوندو.

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 آرڪائيو ٿيل WALs مان وصولي جي عمل کي شروع ڪندو، ۽ صرف پوء ڊيٽابيس کليل هوندو.

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

جاچ

1GB ڊيٽابيس ٺاهي رهيو آهي جيئن هتي بيان ڪيو ويو آهي https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

1GB ڊيٽا پيدا ڪرڻ کان پوءِ بالٽ جي سائيز جي درخواست ڪندي.

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

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

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

برٽلي

После генерации 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

چارٽ تي نتيجن جو مقابلو.

wal-g PostgreSQL بيڪ اپ سسٽم جو تعارف

جئين توهان ڏسي سگهو ٿا، Brotli سائيز ۾ LZMA جي برابر آهي، پر بيڪ اپ LZ4 وقت ۾ ڪيو ويندو آهي.

روسي ڳالهائيندڙ PostgreSQL ڪميونٽي جي چيٽ: https://t.me/pgsql

مھرباني ڪري ھڪڙو اسٽار ڏيو Github کي جيڪڏھن توھان استعمال ڪريو وال-جي

جو ذريعو: www.habr.com

DDoS تحفظ سان سائيٽن لاءِ قابل اعتماد هوسٽنگ خريد ڪريو، VPS VDS سرور 🔥 DDoS تحفظ سان قابل اعتماد ويب سائيٽ هوسٽنگ خريد ڪريو، VPS VDS سرورز | ProHoster