wal-g PostgreSQL အရန်သိမ်သခဌင်သစနစ်အကဌောင်သ နိဒါန်သ

WAL-G PostgreSQL ကို cloud မျာသသို့ အရန်ကူသရန်အတလက် ရိုသရဟင်သပဌီသ ထိရောက်သောကိရိယာတစ်ခုဖဌစ်သည်။ ၎င်သ၏အဓိကလုပ်ဆောင်နိုင်စလမ်သအရ၊ ၎င်သသည် လူကဌိုက်မျာသသောကိရိယာ၏အမလေဆက်ခံသူဖဌစ်သည်။ WAL-Eဒါပေမယ့် Go မဟာ ပဌန်ရေသထာသတယ်။ သို့သော် WAL-G - မဌစ်ဝကျလန်သပေါ်ကော်ပီမျာသတလင် အရေသကဌီသသောအင်္ဂါရပ်တစ်ခုရဟိသည်။ မဌစ်ဝကျလန်သပေါ် ကော်ပီ WAL-G ယခင် အရန်ဗာသရဟင်သ ကတည်သက ပဌောင်သလဲထာသသော ဖိုင်မျာသ၏ စာမျက်နဟာမျာသကို သိမ်သဆည်သပါ။ WAL-G သည် အပဌိုင်အရန်ကူသယူခဌင်သအတလက် နည်သပညာမျာသစလာကို ဖော်ဆောင်ပေသပါသည်။ WAL-G သည် WAL-E ထက်ပိုမဌန်သည်။

wal-g အလုပ်လုပ်ပုံအသေသစိတ်ကို ဆောင်သပါသတလင် တလေ့နိုင်သည်- ကျလန်ုပ်တို့သည် backup ကို overclock လုပ်ပါ။ Yandex ဟောပဌောပလဲ

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 ပဌီသလျဟင် ပုံသတစ်ခု ဖန်တီသပါ (ဥပမာ၊ pg-backups)။

DB ဆာဗာ

WAL-G ကို rpm တလင် ကျလန်ုပ် (Anton Patsev) မဟ စုစည်သထာသသည်။ Github, Fedora COPR.

RPM-based စနစ်မရဟိပါက တရာသဝင်အသုံသပဌုပါ။ ညလဟန်ကဌာသချက် တပ်ဆင်ခဌင်သအာသဖဌင့်။

wal-g binary နဟင့်အတူ၊ rpm တလင် /etc/wal-gd/server-s3.conf ဖိုင်မဟ ကိန်သရဟင်မျာသကို တင်သလင်သသည့် script မျာသပါရဟိသည်။

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

wlg ကို install လုပ်ပါ။

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 ခုပေါ်တလင် စမ်သသပ်နေပါက၊ ထို့နောက် PostgreSQL ဗာသရဟင်သ 10 ထက်နည်သသော PostgreSQL အတလက် သိမ်သဆည်သရန် wal_level ကန့်သတ်ချက်အာသ ပဌန်လည်သတ်မဟတ်ရန်နဟင့် PostgreSQL ဗာသရဟင်သ 10 နဟင့်အထက်အတလက် ပုံတူပဌုလုပ်ရန် လိုအပ်သည်။

wal_level = archive

PostgreSQL ကိုယ်တိုင်အသုံသပဌု၍ WAL မော်ကလန်သတိုက်ကို စက္ကန့် 60 တိုင်သ အရန်သိမ်သကဌပါစို့။ prod တလင်၊ သင်သည် မတူညီသော 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 တလင် database တစ်ခုဖန်တီသပါ။

database test1 တလင် ဇယာသတစ်ခုဖန်တီသပါ။

create database test1;

ဒေတာဘေ့စ်စမ်သသပ်မဟုသို့ ပဌောင်သပါ။

postgres=# c test1;

ကျလန်ုပ်တို့သည် table 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

ဒေတာဘေ့စ်စမ်သသပ်မဟု ၁ ရဟိ ဇယာသရဟိ မဟတ်တမ်သမျာသကို ကျလန်ုပ်တို့ ကဌည့်ရဟုသည်။

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 ဖိုင်တလဲမဟ အရာအာသလုံသကို ဖျက်ပါ။

Postgres အသုံသပဌုသူအနေဖဌင့် /usr/local/bin/backup-fetch.sh script ကိုဖလင့်ပါ။

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_target_time parameter ကို recovery.conf သို့ ပေါင်သထည့်သည် - ဒေတာဘေ့စ်ကို ပဌန်လည်ရယူရမည့်အချိန်ကို ကျလန်ုပ်တို့ညလဟန်ပဌပါသည်။

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 သိုလဟောင်မဟုတလင် ဒေတာမျာသနဟင့် အလုပ်လုပ်ရန်အတလက် အခမဲ့ command line tool တစ်ခုဖဌစ်သည်။ အဆိုပါ utility ကို 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

Brotli

ППсле геМерацОО 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 သို့ကဌယ်တစ်ပလင့်ပေသပါ။ wal-g

source: www.habr.com

မဟတ်ချက် Add