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 ویب انٹرفیس پر جائیں۔
ڈی بی سرور
rpm میں WAL-G کو میرے (Anton Patsev) نے اسمبل کیا ہے۔
جس کے پاس 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 ڈیٹا بیس تیار کرنا جیسا کہ یہاں بیان کیا گیا ہے۔
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
چارٹ پر نتائج کا موازنہ۔
جیسا کہ آپ دیکھ سکتے ہیں، Brotli سائز میں LZMA سے موازنہ ہے، لیکن بیک اپ LZ4 وقت میں انجام دیا جاتا ہے۔
روسی بولنے والے PostgreSQL کمیونٹی کی چیٹ:
اگر آپ استعمال کرتے ہیں تو براہ کرم گیتھب کو ایک ستارہ دیں۔
ماخذ: www.habr.com