بادل ڏانهن PostgreSQL کي بيڪ اپ ڪرڻ لاءِ هڪ سادي ۽ موثر اوزار آهي. ان جي مکيه ڪارڪردگي جي لحاظ کان، اهو مشهور اوزار جو وارث آهي ، پر Go ۾ ٻيهر لکيو ويو. پر WAL-G ۾ ھڪڙو اھم نئين خصوصيت آھي - delta copies. ڊيلٽا ڪاپيون فائلن جا محفوظ صفحا جيڪي اڳئين بيڪ اپ ورزن کان تبديل ٿي ويا آھن. WAL-G متوازي بيڪ اپ لاءِ ڪافي ٽيڪنالاجيون لاڳو ڪري ٿو. WAL-G WAL-E کان گھڻو تيز آھي.
wal-g ڪيئن ڪم ڪري ٿو ان جا تفصيل مضمون ۾ ملي سگھن ٿا:
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:9000Minio لانچ ڪرڻ
systemctl start minioمينيو ويب انٽرفيس ڏانھن وڃو ۽ هڪ بالٽ ٺاهيو (مثال طور، pg-backup).
ڊي بي سرور
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-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 سرور تي جاچ ڪري رهيا آهيو، ته پوءِ توهان کي 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
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 اسڪرپٽ پوسٽ گريس استعمال ڪندڙ جي طور تي.
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 ڊيٽابيس ٺاهي رهيو آهي جيئن هتي بيان ڪيو ويو آهي
1GB ڊيٽا پيدا ڪرڻ کان پوءِ بالٽ جي سائيز جي درخواست ڪندي.
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 мб занимает полный бекап в формате 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 ڪميونٽي جي چيٽ:
مھرباني ڪري ھڪڙو اسٽار ڏيو Github کي جيڪڏھن توھان استعمال ڪريو
جو ذريعو: www.habr.com
