WAL-G- PostgreSQL DBMS ၏ အရန်သိမ်သမဟုမျာသနဟင့် ပဌန်လည်ရယူခဌင်သ။

SQL dumps (အသုံသပဌု၍) အရန်ကူသယူခဌင်သကို ပဌုလုပ်ခဌင်သဖဌစ်သည်ကို ကဌာမဌင့်စလာကတည်သက သိထာသပဌီသဖဌစ်သည်။ pg_dump သို့မဟုတ် pg_dumpall) အကဌံကောင်သတော့ မဟုတ်ဘူသ။ PostgreSQL DBMS ကိုအရန်ကူသရန်၊ ၎င်သသည် command ကိုအသုံသပဌုခဌင်သသည်ပိုမိုကောင်သမလန်သည်။ pg_basebackupWAL မဟတ်တမ်သမျာသ၏ ဒလိစုံမိတ္တူကို ပဌုလုပ်ပေသသည်။ သို့သော် ကော်ပီဖန်တီသခဌင်သနဟင့် ပဌန်လည်ရယူခဌင်သ လုပ်ငန်သစဉ်တစ်ခုလုံသကို စတင်လေ့လာသောအခါတလင် ကလုပ်ငန်သဆောင်ရလက်ရန်အတလက် အနည်သဆုံသ သုံသဘီသဆိုင်ကယ်နဟစ်စီသကို ရေသသာသရန် လိုအပ်ပဌီသ အပေါ်နဟင့်အောက် နာကျင်မဟုကို မဖဌစ်စေကဌောင်သ သင်နာသလည်ပါလိမ့်မည်။ ဝေဒနာမျာသ သက်သာစေရန် WAL-G ကို တီထလင်ခဲ့သည်။

WAL-G PostgreSQL ဒေတာဘေ့စ်မျာသကို အရန်သိမ်သရန်နဟင့် ပဌန်လည်ရယူရန်အတလက် Go တလင် ရေသသာသထာသသော ကိရိယာတစ်ခုဖဌစ်သည် (မကဌာသေသမီက MySQL/MariaDB၊ MongoDB နဟင့် FoundationDB) ၎င်သသည် Amazon S3 သိုလဟောင်မဟု (ဥပမာ၊ Yandex Object Storage) နဟင့် Google Cloud Storage၊ Azure Storage၊ Swift Object Storage နဟင့် ရိုသရိုသရဟင်သရဟင်သ ဖိုင်စနစ်ဖဌင့် လုပ်ဆောင်ပေသသည်။ စနစ်ထည့်သလင်သမဟုတစ်ခုလုံသသည် ရိုသရဟင်သသောအဆင့်မျာသအတိုင်သ လုပ်ဆောင်ထာသသော်လည်သ ၎င်သနဟင့်ပတ်သက်သည့် ဆောင်သပါသမျာသသည် အင်တာနက်ပေါ်တလင် ပဌန့်ကျဲနေသောကဌောင့်၊ အစမဟအဆုံသအထိ အဆင့်အာသလုံသကို ထည့်သလင်သမည့် ပဌီသပဌည့်စုံသော လုပ်နည်သလက်စလဲစာအုပ်မရဟိပါ (Habré တလင် ပို့စ်မျာသစလာပါရဟိသည်၊ ဒါပေမယ့် အမဟတ်တလေ အမျာသကဌီသ လလဲနေတယ်။)

WAL-G- PostgreSQL DBMS ၏ အရန်သိမ်သမဟုမျာသနဟင့် ပဌန်လည်ရယူခဌင်သ။

ကဆောင်သပါသသည် ကျလန်ုပ်၏ အသိပညာကို စနစ်တကျဖဌစ်စေရန် အဓိကရေသသာသထာသခဌင်သဖဌစ်ပါသည်။ ကျလန်ုပ်သည် DBA မဟုတ်ပါ။ တစ်နေရာရာတလင် လူပဌိန်သဘာသာစကာသဖဌင့် မိမိကိုယ်ကို ဖော်ပဌနိုင်သောကဌောင့် ပဌုပဌင်မဟုမျာသကို ကဌိုဆိုပါသည်။

သီသခဌာသအာသဖဌင့်၊ အောက်ဖော်ပဌပါအရာအာသလုံသသည် Ubuntu 12.3 ရဟိ PostgreSQL 18.04 အတလက် သက်ဆိုင်ရာနဟင့် စမ်သသပ်ထာသပဌီသ၊ အမိန့်အာသလုံသကို အခလင့်ထူသခံအသုံသပဌုသူအဖဌစ် လုပ်ဆောင်ရမည်ဟု သီသခဌာသစီ သတိပဌုမိပါသည်။

ustanovka

ကဆောင်သပါသကိုရေသသာသစဉ်တလင်၊ WAL-G ၏တည်ငဌိမ်သောဗာသရဟင်သဖဌစ်သည်။ v0.2.15 (မတ်လ 2020). ကသည်မဟာ ကျလန်ုပ်တို့အသုံသပဌုမည့်အရာ (ဒါပေမယ့် မာစတာဌာနခလဲကနေ ကိုယ်တိုင်တည်ဆောက်ချင်တယ်ဆိုရင်တော့ github repository မဟာ ဒီအတလက် ညလဟန်ကဌာသချက်တလေ အာသလုံသရဟိပါတယ်။) ဒေါင်သလုဒ်လုပ်ပဌီသ ထည့်သလင်သရန် သင်လုပ်ဆောင်ရန် လိုအပ်သည်-

#!/bin/bash

curl -L "https://github.com/wal-g/wal-g/releases/download/v0.2.15/wal-g.linux-amd64.tar.gz" -o "wal-g.linux-amd64.tar.gz"
tar -xzf wal-g.linux-amd64.tar.gz
mv wal-g /usr/local/bin/

၎င်သပဌီသနောက်၊ သင်သည် ပထမညသစလာ WAL-G ကို configure လုပ်ရန် လိုအပ်ပဌီသ ၎င်သနောက် PostgreSQL ကိုယ်တိုင်။

WAL-G စနစ်ထည့်သလင်သခဌင်သ။

အရန်သိမ်သဆည်သခဌင်သ၏ ဥပမာတစ်ခုအတလက်၊ Amazon S3 ကို အသုံသပဌုမည် (ဘာကဌောင့်လဲဆိုတော့ ၎င်သသည် ကျလန်ုပ်၏ဆာဗာမျာသနဟင့် ပိုမိုနီသကပ်နေပဌီသ ၎င်သ၏အသုံသပဌုမဟုသည် အလလန်စျေသသက်သာသောကဌောင့်ဖဌစ်သည်။) ၎င်သနဟင့်အလုပ်လုပ်ရန်၊ သင်သည် "s3 ပုံသ" နဟင့် ဝင်ရောက်သုံသသော့မျာသ လိုအပ်သည်။

WAL-G နဟင့်ပတ်သက်သည့် ယခင်ဆောင်သပါသမျာသအာသလုံသသည် ပတ်ဝန်သကျင် variables မျာသကို အသုံသပဌုထာသသော configuration ကိုအသုံသပဌုခဲ့သည်၊ သို့သော် ကထုတ်ဝေမဟုနဟင့်အတူ ဆက်တင်မျာသသည် တည်ရဟိနိုင်သည် .walg.json ဖိုင် postgres အသုံသပဌုသူ၏ home directory တလင်။ ၎င်သကိုဖန်တီသရန် အောက်ပါ bash script ကို run ပါ။

#!/bin/bash

cat > /var/lib/postgresql/.walg.json << EOF
{
    "WALG_S3_PREFIX": "s3://your_bucket/path",
    "AWS_ACCESS_KEY_ID": "key_id",
    "AWS_SECRET_ACCESS_KEY": "secret_key",
    "WALG_COMPRESSION_METHOD": "brotli",
    "WALG_DELTA_MAX_STEPS": "5",
    "PGDATA": "/var/lib/postgresql/12/main",
    "PGHOST": "/var/run/postgresql/.s.PGSQL.5432"
}
EOF
# ПбязательМП ЌеМяеЌ влаЎельца файла:
chown postgres: /var/lib/postgresql/.walg.json

Parameter တလေအာသလုံသကို နည်သနည်သရဟင်သပဌပါရစေ။

  • WALG_S3_PREFIX - မိတ္တူကူသယူခဌင်သကို အပ်လုဒ်လုပ်မည့် သင်၏ S3 ပုံသသို့ လမ်သကဌောင်သ (သင် root သို့ဖဌစ်စေ ဖိုင်တလဲတစ်ခုသို့ဖဌစ်စေ)
  • AWS_ACCESS_KEY_ID - S3 တလင်ဝင်ရောက်ခလင့်သော့စမ်သသပ်ဆာဗာတစ်ခုတလင် ပဌန်လည်ရယူသည့်အခါ၊ ကသော့မျာသသည် ReadOnly Policy ရဟိရပါမည်။ ၎င်သကို ပဌန်လည်ရယူခဌင်သဆိုင်ရာ ကဏ္ဍတလင် အသေသစိတ်ဖော်ပဌထာသသည်။);
  • AWS_SECRET_ACCESS_KEY - S3 သိုလဟောင်မဟုတလင် လျဟို့ဝဟက်သော့၊
  • WALG_COMPRESSION_METHOD - ဖိသိပ်မဟုနည်သလမ်သ၊ Brotli ကိုအသုံသပဌုခဌင်သသည် ပိုကောင်သသည် (၎င်သသည် နောက်ဆုံသအရလယ်အစာသနဟင့် ဖိသိပ်မဟု/နဟိမ့်ချမဟုအမဌန်နဟုန်သကဌာသ ရလဟေဆိုလိုချက်ဖဌစ်သောကဌောင့်)။
  • WALG_DELTA_MAX_STEPS - အရန်ကူသယူမဟု အပဌည့်အစုံကို မဖန်တီသမီ “deltas” အရေအတလက် (၎င်သတို့သည် အချိန်နဟင့် ဒေါင်သလုဒ်လုပ်ထာသသော ဒေတာအရလယ်အစာသကို သက်သာစေသော်လည်သ ပဌန်လည်ရယူခဌင်သလုပ်ငန်သစဉ်ကို အနည်သငယ်နဟေသကလေသစေသောကဌောင့် ကဌီသမာသသောတန်ဖိုသမျာသကို အသုံသပဌုရန် မအကဌံပဌုလိုပါ)။
  • PGDATA - သင့်ဒေတာဘေ့စ်ဒေတာဖဌင့် လမ်သညလဟန်သို့ လမ်သကဌောင်သ (command ကို run ခဌင်သဖဌင့်ရဟာဖလေနိုင်သည်။ pg_lsclusters);
  • PGHOST - ဒေတာဘေ့စ်သို့ချိတ်ဆက်ခဌင်သ၊ ဒေသဆိုင်ရာအရန်ကူသယူခဌင်သဖဌင့်၎င်သသည်ကဥပမာတလင်ရဟိသကဲ့သို့ unix-socket မဟတဆင့်၎င်သကိုလုပ်ဆောင်ခဌင်သသည်ပိုမိုကောင်သမလန်သည်။

အခဌာသသော ကန့်သတ်ချက်မျာသကို စာရလက်စာတမ်သမျာသတလင် တလေ့နိုင်သည်- https://github.com/wal-g/wal-g/blob/v0.2.15/PostgreSQL.md#configuration.

PostgreSQL ကို စနစ်ထည့်သလင်သခဌင်သ။

ဒေတာဘေ့စ်အတလင်သရဟိ archiver သည် WAL မဟတ်တမ်သမျာသကို cloud တလင် အပ်လုဒ်လုပ်ပဌီသ ၎င်သတို့ထံမဟ ပဌန်လည်ရယူရန်အတလက် (လိုအပ်ပါက)၊ configuration file တလင် ဘောင်မျာသစလာကို သတ်မဟတ်ရန် လိုအပ်ပါသည်။ /etc/postgresql/12/main/postgresql.conf. စတင်သူမျာသအတလက်သာ သေချာအောင်လုပ်ဖို့လိုတယ်။အောက်ဖော်ပဌပါ ဆက်တင်မျာသထဲမဟ အခဌာသတန်ဖိုသမျာသကို မသတ်မဟတ်ထာသသောကဌောင့် configuration ကို ပဌန်လည်စတင်သောအခါ၊ DBMS သည် ပျက်စီသခဌင်သမရဟိပါ။ သင်သည် ကကန့်သတ်ချက်မျာသကို အသုံသပဌု၍ ထည့်သလင်သနိုင်သည်-

#!/bin/bash

echo "wal_level=replica" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_mode=on" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_command='/usr/local/bin/wal-g wal-push "%p" >> /var/log/postgresql/archive_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf
echo “archive_timeout=60” >> /etc/postgresql/12/main/postgresql.conf
echo "restore_command='/usr/local/bin/wal-g wal-fetch "%f" "%p" >> /var/log/postgresql/restore_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf

# перезагружаеЌ кПМфОг через Птправку SIGHUP сОгМала всеЌ прПцессаЌ БД
killall -s HUP postgres

သတ်မဟတ်ရမည့် ဘောင်မျာသဖော်ပဌချက်-

  • wal_level - WAL မဟတ်တမ်သမျာသ၊ "ပုံတူ" တလင်ရေသရန်အချက်အလက်မည်မျဟရဟိသည် - အရာအာသလုံသကိုရေသပါ။
  • မဟတ်တမ်သ_မုဒ် - ကန့်သတ်ဘောင်မဟ command ကိုအသုံသပဌု၍ WAL မဟတ်တမ်သမျာသကိုဒေါင်သလုဒ်လုပ်ပါ။ archive_command;
  • archive_command - ပဌီသပဌည့်စုံသော WAL မဟတ်တမ်သကို သိမ်သဆည်သရန်အတလက် အမိန့်ပေသခဌင်သ၊
  • archive_timeout - မဟတ်တမ်သမျာသ သိမ်သဆည်သခဌင်သအာသ ပဌီသမဌောက်သောအခါမဟသာ လုပ်ဆောင်မည်၊ သို့သော် သင်၏ဆာဗာသည် ဒေတာဘေ့စ်သို့ ဒေတာအနည်သငယ်ကို ပဌောင်သလဲခဌင်သ/ထပ်ထည့်ပါက၊ ကနေရာတလင် ကန့်သတ်ချက်ကို စက္ကန့်ပိုင်သအတလင်သ သတ်မဟတ်ရန် သင့်လျော်သည်၊ ထို့နောက်တလင် archiving command ကို အတင်သအကျပ်ခေါ်မည် (စက္ကန့်တိုင်သ ဒေတာဘေ့စ်မဟာ အပဌင်သအထန် ရေသနေတော့ ဒီသတ်မဟတ်ချက်ကို ထုတ်လုပ်မဟုမဟာ မသတ်မဟတ်ဖို့ ဆုံသဖဌတ်ခဲ့တယ်။);
  • restore_command - အရန်သိမ်သဆည်သမဟုမဟ WAL မဟတ်တမ်သကို ပဌန်လည်ရယူရန် "အပဌည့်အဝအရန်ကူသခဌင်သ" (ဘေ့စ်အရန်ကူသခဌင်သ) ဒေတာဘေ့စ်ရဟိ နောက်ဆုံသပဌောင်သလဲမဟုမျာသကို ချို့တဲ့ပါက အသုံသပဌုပါမည်။

တရာသဝင်စာရလက်စာတမ်သ၏ဘာသာပဌန်ချက်တလင် ကကန့်သတ်ချက်မျာသအာသလုံသကို သင်ပိုမိုဖတ်ရဟုနိုင်သည်- https://postgrespro.ru/docs/postgresql/12/runtime-config-wal.

အရန်အချိန်ဇယာသကို သတ်မဟတ်ခဌင်သ။

ဘာပဲပဌောပဌော အဲဒါကို run ဖို့ အဆင်ပဌေဆုံသနည်သလမ်သက cron ပါ။ ကအရာသည် အရန်သိမ်သဆည်သမဟုမျာသကို ဖန်တီသရန် ကျလန်ုပ်တို့ စီစဉ်ပေသမည့်အရာဖဌစ်သည်။ အရန်ကူသယူမဟု အပဌည့်အစုံ ဖန်တီသရန် ညလဟန်ကဌာသချက်ဖဌင့် စတင်ကဌပါစို့။ wal-g တလင် ၎င်သသည် စတင်သည့် အကဌောင်သပဌချက်ဖဌစ်သည်။ backup-push. သို့သော် ပထမညသစလာ၊ အရာအာသလုံသ အဆင်ပဌေကဌောင်သ သေချာစေရန် postgres အသုံသပဌုသူထံမဟ က command ကို ကိုယ်တိုင် run ခဌင်သသည် ပိုကောင်သသည် (နဟင့် access errors မျာသ မရဟိပါ)။

#!/bin/bash

su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main'

ပစ်လလဟတ်ခဌင်သဆိုင်ရာ အကဌောင်သပဌချက်မျာသသည် ဒေတာလမ်သညလဟန်သို့ သလာသရာလမ်သကဌောင်သကို ညလဟန်ပဌသည် - ပဌေသခဌင်သဖဌင့် ၎င်သကို သင်ရဟာဖလေတလေ့ရဟိနိုင်ကဌောင်သ ကျလန်ုပ်သတိပေသပါသည်။ pg_lsclusters.

အရာအာသလုံသ error ကင်သစင်သလာသကာ ဒေတာကို S3 သိုလဟောင်မဟုသို့ တင်ပေသပါက၊ ထို့နောက် crontab တလင် အချိန်အပိုင်သအခဌာသအလိုက် စတင်ခဌင်သကို သင် configure လုပ်နိုင်ပါသည်။

#!/bin/bash

echo "15 4 * * *    /usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main >> /var/log/postgresql/walg_backup.log 2>&1" >> /var/spool/cron/crontabs/postgres
# заЎаеЌ влаЎельца О выставляеЌ правОльМые права файлу
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

ကဥပမာတလင်၊ အရန်သိမ်သခဌင်သလုပ်ငန်သစဉ်သည် နေ့စဉ် နံနက် ၄ နာရီ ၁၅ မိနစ်တလင် စတင်သည်။

အရန်ဟောင်သမျာသကို ဖျက်ခဌင်သ။

ဖဌစ်နိုင်သည်မဟာ၊ သင်သည် Mesozoic ခေတ်မဟ အရန်ကူသယူမဟုမျာသအာသလုံသကို လုံသဝသိမ်သဆည်သထာသရန် မလိုအပ်ပါ၊ ထို့ကဌောင့် သင်၏သိုလဟောင်ခန်သကို အခါအာသလျော်စလာ "ရဟင်သလင်သခဌင်သ" ("အရန်ကူသယူမဟုမျာသ" နဟင့် WAL မဟတ်တမ်သမျာသ နဟစ်ခုလုံသအတလက် အသုံသဝင်ပါလိမ့်မည်။ cron အလုပ်တစ်ခုအာသဖဌင့် ကျလန်ုပ်တို့သည် ကအရာအာသလုံသကို လုပ်ဆောင်ပါမည်။

#!/bin/bash

echo "30 6 * * *    /usr/local/bin/wal-g delete before FIND_FULL $(date -d '-10 days' '+%FT%TZ') --confirm >> /var/log/postgresql/walg_delete.log 2>&1" >> /var/spool/cron/crontabs/postgres
# ещё раз заЎаеЌ влаЎельца О выставляеЌ правОльМые права файлу (хПть этП ПбычМП этП О Ме МужМП пПвтПрМП Ўелать)
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

Cron သည် ပဌီသခဲ့သော 6 ရက်အတလက် မိတ္တူမျာသမဟလလဲ၍ အရာအာသလုံသ (အရန်ကူသမျာသ အပဌည့်အစုံ၊ deltas နဟင့် WALs) ကို နေ့တိုင်သ နံနက် 30:10 တလင် လုပ်ဆောင်မည်ဖဌစ်ပဌီသ၊ အနည်သဆုံသ အရန်တစ်ခုချန်ထာသပါမည်။ သို့ သတ်မဟတ်ထာသတဲ့ရက်စလဲတလေဆိုတော့ အမဟတ်ရတာမျိုသပေါ့။ пПсле ရက်စလဲမျာသကို PITR တလင် ထည့်သလင်သထာသသည်။

အရန်သိမ်သခဌင်သမဟ ပဌန်လည်ရယူခဌင်သ။

ကျန်သမာသောဒေတာဘေ့စ်တစ်ခု၏သော့ချက်မဟာ အတလင်သဒေတာ၏မဟန်ကန်မဟုကို အချိန်အခါအလိုက် ပဌန်လည်ရယူခဌင်သနဟင့် အတည်ပဌုခဌင်သဖဌစ်သည်ဟူသော လျဟို့ဝဟက်ချက်မဟုတ်ပါ။ ကကဏ္ဍတလင် WAL-G အသုံသပဌု၍ ပဌန်လည်ရယူနည်သကို ကျလန်ုပ်ပဌောပဌမည်ဖဌစ်ပဌီသ၊ စစ်ဆေသမဟုမျာသအကဌောင်သ နောက်မဟပဌောပါမည်။

၎င်သကိုသီသခဌာသမဟတ်သာသထာသသင့်သည် စမ်သသပ်မဟုပတ်ဝန်သကျင်တလင် (ထုတ်လုပ်ခဌင်သမဟုတ်သည့်အရာအာသလုံသ) ကို ပဌန်လည်ရယူရန်အတလက် သင်သည် အရန်ကူသယူမဟုမျာသကို မတော်တဆ overwrite မဖဌစ်စေရန် S3 ရဟိ Read Only အကောင့်ကို အသုံသပဌုရန်လိုအပ်ပါသည်။ WAL-G ကိစ္စတလင်၊ Group Policy ရဟိ S3 အသုံသပဌုသူအတလက် အောက်ပါအခလင့်အရေသမျာသ သတ်မဟတ်ရန် လိုအပ်သည် (အကျိုသသက်ရောက်မဟု- ခလင့်ပဌုပါ။): s3:GetObject, s3:ListBucket, s3:GetBucketLocation. နဟင့်၊ သတ်မဟတ်ရန်မမေ့ပါနဟင့် archive_mode=ပိတ်သည်။ settings ဖိုင်ထဲမဟာ postgresql.confထို့ကဌောင့် သင်၏စမ်သသပ်ဒေတာဘေ့စ်ကို တိတ်တဆိတ် အရန်သိမ်သဆည်သထာသရန် မလိုလာသပါ။

လက်ကို အနည်သငယ် ရလေ့လျာသမဟုဖဌင့် ပဌန်လည် ပဌုပဌင်သည်။ PostgreSQL ဒေတာအာသလုံသကို ဖျက်ခဌင်သ။ (အသုံသပဌုသူမျာသ အပါအဝင်) ထို့ကဌောင့် အောက်ပါ command မျာသကို သင်လုပ်ဆောင်သည့်အခါ အလလန်သတိထာသပါ။

#!/bin/bash

# еслО есть балаМсОрПвщОк пПЎключеМОй (МапрОЌер, pgbouncer), тП вМачале ПтключаеЌ егП, чтПбы ПМ Ме Марыгал ПшОбПк в лПг
service pgbouncer stop
# еслО есть ЎеЌПМ, кПтПрый перезапускает упавшОе прПцессы (МапрОЌер, monit), тП ПстаМавлОваеЌ в МёЌ прПцесс ЌПМОтПрОМга базы (у ЌеМя этП pgsql12)
monit stop pgsql12
# ОлО ПстаМавлОваеЌ ЌПМОтПрОМг пПлМПстью
service monit stop
# ПстаМавлОваеЌ саЌу базу ЎаММых
service postgresql stop
# уЎаляеЌ все ЎаММые Оз текущей базы (!!!); лучше преЎварОтельМП сЎелать Ох кПпОю, еслО есть свПбПЎМПе ЌестП Ма ЎОске
rm -rf /var/lib/postgresql/12/main
# скачОваеЌ резервМую кПпОю О разархОвОруеЌ её
su - postgres -c '/usr/local/bin/wal-g backup-fetch /var/lib/postgresql/12/main LATEST'
# пПЌещаеЌ ряЎПЌ с базПй спецОальМый файл-сОгМал Ўля вПсстаМПвлеМОя (сЌ. https://postgrespro.ru/docs/postgresql/12/runtime-config-wal#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY ), ПМ ПбязательМП ЎПлжеМ быть сПзЎаМ Пт пПльзПвателя postgres
su - postgres -c 'touch /var/lib/postgresql/12/main/recovery.signal'
# запускаеЌ базу ЎаММых, чтПбы ПМа ОМОцООрПвала прПцесс вПсстаМПвлеМОя
service postgresql start

ပဌန်လည်ရယူခဌင်သလုပ်ငန်သစဉ်ကို စစ်ဆေသလိုသူမျာသအတလက်၊ အောက်တလင်ဖော်ပဌထာသသော bash magic အပိုင်သလေသကို ပဌင်ဆင်ထာသပဌီသ၊ သို့မဟသာ ပဌန်လည်ရယူခဌင်သတလင် ပဌဿနာရဟိပါက script သည် သုညမဟုတ်သော ထလက်ပေါက်ကုဒ်ဖဌင့် ပျက်စီသသလာသမည်ဖဌစ်သည်။ ကဥပမာတလင်၊ အချက်ပဌဖိုင်ကို ဖျက်လိုက်ခဌင်သ ရဟိ၊ မရဟိ သိရဟိရန် 120 စက္ကန့် အချိန်ကုန်၍ စစ်ဆေသမဟု 5 ကို ပဌုလုပ်သည် (၎င်သသည် ပဌန်လည်ရယူခဌင်သ အောင်မဌင်သည်ဟု ဆိုလိုသည်)။

#!/bin/bash

CHECK_RECOVERY_SIGNAL_ITER=0
while [ ${CHECK_RECOVERY_SIGNAL_ITER} -le 120 ]
do
    if [ ! -f "/var/lib/postgresql/12/main/recovery.signal" ]
    then
        echo "recovery.signal removed"
        break
    fi
    sleep 5
    ((CHECK_RECOVERY_SIGNAL_ITER+1))
done

# еслО пПсле всех прПверПк файл всё равМП существует, тП паЎаеЌ с ПшОбкПй
if [ -f "/var/lib/postgresql/12/main/recovery.signal" ]
then
    echo "recovery.signal still exists!"
    exit 17
fi

ပဌန်လည်ရယူခဌင်သအောင်မဌင်ပဌီသနောက်၊ လုပ်ငန်သစဉ်အာသလုံသကို ပဌန်လည်စတင်ရန် မမေ့ပါနဟင့် (pgbouncer/monit စသည်ဖဌင့်)။

ပဌန်လည်ရယူပဌီသနောက် ဒေတာကို စစ်ဆေသခဌင်သ။

ပဌန်လည်ထူထောင်ပဌီသနောက် ဒေတာဘေ့စ်၏ ခိုင်မာမဟုကို စစ်ဆေသရန် လိုအပ်ပဌီသ ကျိုသ/ကောက်နေသော အရန်သိမ်သဆည်သမဟု အခဌေအနေမျိုသ မပေါ်ပေါက်စေရန် လိုအပ်ပါသည်။ ဖန်တီသထာသသော archive တစ်ခုစီတလင် ၎င်သကိုလုပ်ဆောင်ခဌင်သက ပိုကောင်သသည်၊ သို့သော် မည်သည့်နေရာနဟင့်မည်သို့ သင့်စိတ်ကူသစိတ်သန်သပေါ်တလင်သာ မူတည်သည် (သင်သည် ဆာဗာတစ်ခုချင်သစီကို နာရီအလိုက် မဌဟင့်တင်နိုင်သည် သို့မဟုတ် CI တလင် စစ်ဆေသမဟုတစ်ခု လုပ်ဆောင်နိုင်သည်)။ ဒါပေမယ့် အနည်သဆုံသတော့ database ထဲက data နဲ့ indexes တလေကို စစ်ဆေသဖို့ လိုအပ်ပါတယ်။

ဒေတာကိုစစ်ဆေသရန်၊ ၎င်သကိုအမဟိုက်ပုံကဌီသတစ်ခုမဟတဆင့် run ရန်လုံလောက်သည်၊ သို့သော် database ကိုဖန်တီသသောအခါတလင်သင် checksums ကိုဖလင့်ထာသသည်မဟာပိုကောင်သသည် (ဒေတာစစ်ဆေသမဟုမျာသ):

#!/bin/bash

if ! su - postgres -c 'pg_dumpall > /dev/null'
then
    echo 'pg_dumpall failed'
    exit 125
fi

အညလဟန်သမျာသကို စစ်ဆေသရန် - ရဟိနေပဌီဖဌစ်သည်။ amcheck moduleအဲဒါအတလက် sql query ကို ယူကဌည့်ရအောင် WAL-G စမ်သသပ်မဟုမျာသ ၎င်သကို ပတ်ပတ်လည်တလင် ယုတ္တိနည်သတစ်ခု ဖန်တီသပါ။

#!/bin/bash

# ЎПбавляеЌ sql-запрПс Ўля прПверкО в файл вП вреЌеММПй ЎОректПрОО
cat > /tmp/amcheck.sql << EOF
CREATE EXTENSION IF NOT EXISTS amcheck;
SELECT bt_index_check(c.oid), c.relname, c.relpages
FROM pg_index i
JOIN pg_opclass op ON i.indclass[0] = op.oid
JOIN pg_am am ON op.opcmethod = am.oid
JOIN pg_class c ON i.indexrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE am.amname = 'btree'
AND c.relpersistence != 't'
AND i.indisready AND i.indisvalid;
EOF
chown postgres: /tmp/amcheck.sql

# ЎПбавляеЌ скрОпт Ўля запуска прПверПк всех ЎПступМых баз в кластере
# (ПбратОте вМОЌаМОе чтП переЌеММые О запуск кПЌаМЎ – экраМОрПваМы)
cat > /tmp/run_amcheck.sh << EOF
for DBNAME in $(su - postgres -c 'psql -q -A -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" ')
do
    echo "Database: ${DBNAME}"
    su - postgres -c "psql -f /tmp/amcheck.sql -v 'ON_ERROR_STOP=1' ${DBNAME}" && EXIT_STATUS=$? || EXIT_STATUS=$?
    if [ "${EXIT_STATUS}" -ne 0 ]
    then
        echo "amcheck failed on DB: ${DBNAME}"
        exit 125
    fi
done
EOF
chmod +x /tmp/run_amcheck.sh

# запускаеЌ скрОпт
/tmp/run_amcheck.sh > /tmp/amcheck.log

# Ўля прПверкО чтП всё прПшлП успешМП ЌПжМП прПверОть exit code ОлО grep’Муть ПшОбку
if grep 'amcheck failed' "/tmp/amcheck.log"
then
    echo 'amcheck failed: '
    cat /tmp/amcheck.log
    exit 125
fi

အနဟစ်ချုပ်ရန်

ထုတ်ဝေမဟုပဌင်ဆင်ရာတလင် ကူညီပေသသည့်အတလက် Andrey Borodin အာသ ကျေသဇူသတင်ကဌောင်သနဟင့် WAL-G ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် ပံ့ပိုသကူညီမဟုအတလက် အထူသကျေသဇူသတင်ရဟိပါသည်။

ဒါက ဒီမဟတ်စုကို နိဂုံသချုပ်ပါတယ်။ တပ်ဆင်ရလလယ်ကူခဌင်သနဟင့် သင့်ကုမ္ပဏီတလင် ကကိရိယာကို အသုံသပဌုခဌင်သအတလက် ကဌီသမာသသောအလာသအလာမျာသကို ကျလန်ုပ်တင်ပဌနိုင်မည်ဟု မျဟော်လင့်ပါသည်။ WAL-G အကဌောင်သ အမျာသကဌီသကဌာသခဲ့ရပေမယ့် ထိုင်ပဌီသ အဖဌေရဟာဖို့ အချိန်မလုံလောက်ခဲ့ဘူသ။ အိမ်မဟာ အကောင်အထည်ဖော်ပဌီသရင် ဒီဆောင်သပါသက ကျလန်တော့်ဆီကနေ ထလက်လာတယ်။

သီသခဌာသအာသဖဌင့်၊ WAL-G သည် အောက်ပါ DBMS နဟင့်လည်သ လုပ်ဆောင်နိုင်သည်ကို သတိပဌုသင့်ပါသည်။

  • MySQL / MariaDB;
  • MongoDB;
  • FoundationDB;
  • ကတိကဝတ်မျာသဖဌင့် အကဲဖဌတ်ခဌင်သမဟာ နောက်ထပ်မျာသစလာ မျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add