wal-g PostgreSQL بیک اپ سسٹم کا تعارف

وال-جی 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:9000

Minio لانچ کر رہا ہے۔

systemctl start minio

Minio ویب انٹرفیس پر جائیں۔ http://ip-адрес-сервера-minio:9000 اور ایک بالٹی بنائیں (مثال کے طور پر پی جی بیک اپ)۔

ڈی بی سرور

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 سرور پر جانچ کر رہے ہیں، تو آپ کو ورژن 10 سے کم PostgreSQL کے لیے آرکائیو کرنے کے لیے wal_level پیرامیٹر کو دوبارہ ترتیب دینے کی ضرورت ہے، اور PostgreSQL ورژن 10 اور پرانے کے لیے نقل۔

wal_level = archive

آئیے خود PostgreSQL کا استعمال کرتے ہوئے ہر 60 سیکنڈ بعد WAL آرکائیوز کا بیک اپ لیں۔ پروڈکشن پر، آپ کے پاس ایک مختلف آرکائیو_ٹائم آؤٹ قدر ہوگی۔

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

آئیے پی ایس کیو ایل پر جائیں۔

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

بیک اپ نکالنا مکمل۔

recovery.conf کو درج ذیل مواد کے ساتھ /var/lib/pgsql/9.6/data فولڈر میں شامل کریں۔

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 ایمیزون S3 اسٹوریج میں رہنے والے ڈیٹا کے ساتھ کام کرنے کے لیے ایک مفت کمانڈ لائن ٹول ہے۔ یوٹیلیٹی کو python پروگرامنگ لینگویج میں لکھا گیا ہے اور اس کی وجہ سے اسے ونڈوز اور لینکس آپریٹنگ سسٹم دونوں میں استعمال کیا جا سکتا ہے۔

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

اگر آپ استعمال کرتے ہیں تو براہ کرم گیتھب کو ایک ستارہ دیں۔ wal-g

ماخذ: www.habr.com

نیا تبصرہ شامل کریں