Kanusho
Mimi ni msanidi programu. Ninaandika nambari na kuingiliana na hifadhidata tu kama mtumiaji. Kwa njia yoyote sijifanyi kuwa msimamizi wa mfumo, sembuse dba. Lakini…
Ilifanyika kwamba nilihitaji kupanga nakala rudufu ya hifadhidata ya postgresql. Hakuna mawingu - tumia tu SSH na uhakikishe kuwa kila kitu kinafanya kazi bila kuomba pesa. Tunafanya nini katika hali kama hizi? Hiyo ni kweli, tunasukuma pgdump kwenye cron, kuhifadhi kila kitu kwenye kumbukumbu kila siku, na ikiwa tumepotea kabisa, tunatuma kumbukumbu hii mahali fulani mbali.
Wakati huu ugumu ulikuwa kwamba kulingana na mipango, hifadhidata ilipaswa kukua kwa karibu +- 100 MB kwa siku. Kwa kweli, baada ya wiki chache hamu ya kuhifadhi kila kitu na pgdump itatoweka. Hapa ndipo hifadhi rudufu zinazoongezeka zinakuja kuwaokoa.
Inavutia? Karibu paka.
Nakala ya ziada ni aina ya chelezo wakati si faili zote chanzo zinakiliwa, lakini ni mpya tu na zile zilizobadilishwa tangu kuundwa kwa nakala ya awali.
Kama msanidi programu yeyote ambaye alikuwa hataki KABISA (wakati huo) kuelewa ugumu wa postgres, nilitaka kupata kitufe cha kijani. Unajua, kama katika AWS, DigitalOcean: ulibonyeza kitufe kimoja - ulipata nakala, ulibonyeza ya pili - ulisanidi nakala rudufu, ya tatu - ulirudisha kila kitu nyuma kwa masaa kadhaa. Sikupata kitufe au zana nzuri ya GUI. Ikiwa unajua moja (ya bure au ya bei nafuu), andika juu yake katika maoni.
Baada ya googling nilipata zana mbili pgbarman и pgbackrest. Sikufanikiwa na ile ya kwanza (nyaraka chache sana, nilijaribu kubaini kila kitu kulingana na miongozo ya zamani), lakini na ya pili nyaraka ziligeuka kuwa sawa, lakini sio bila dosari. Ili kurahisisha kazi ya wale ambao wanakabiliwa na kazi kama hiyo, nakala hii iliandikwa.
Baada ya kusoma nakala hii, utajifunza jinsi ya kufanya nakala rudufu, zihifadhi kwenye seva ya mbali (hifadhi iliyo na chelezo) na uirejeshe ikiwa utapoteza data au shida zingine kwenye seva kuu.
Mafunzo ya
Ili kuzalisha mwongozo utahitaji VPS mbili. Ya kwanza itakuwa hifadhi (hazina ambayo chelezo zitahifadhiwa), na pili, kwa kweli, seva yenyewe na postgres (kwa upande wangu, toleo la 11 la postgres).
Inachukuliwa kuwa kwenye seva iliyo na postgres unayo mzizi, mtumiaji wa sudo, mtumiaji wa posta na postgres yenyewe imewekwa (mtumiaji wa postgres huundwa kiatomati wakati wa kusanikisha postgresql), na kwenye seva ya kumbukumbu kuna mtumiaji wa mizizi na sudo (kwenye mwongozo. jina la mtumiaji pgbackrest litatumika) .
Ili uwe na shida chache wakati wa kutoa maagizo tena, ninaandika kwa italiki wapi, na mtumiaji gani na kwa haki gani nilitoa amri wakati wa kuandika na kuangalia makala.
Inasakinisha pgbackrest
Hifadhi (pgbackrest ya mtumiaji):
1. Pakua kumbukumbu kutoka pgbackrest na uhamishe yaliyomo kwenye /build folda:
sudo mkdir /build
sudo wget -q -O -
https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz |
sudo tar zx -C /build2. Sakinisha vitegemezi vinavyohitajika kwa mkusanyiko:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev3. Kukusanya pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src4. Nakili faili inayoweza kutekelezwa kwenye saraka ya /usr/bin:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest5. Pgbackrest inahitaji perl. Sakinisha:
sudo apt-get install perl6. Unda saraka za kumbukumbu, zipe haki fulani:
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf7. Angalia:
pgbackrest versionSeva ya Postgres (mtumiaji wa sudo au mzizi):
Mchakato wa kusakinisha pgbackrest kwenye seva iliyo na postgres ni sawa na usakinishaji kwenye hazina (ndio, pgbackrest lazima iwekwe kwenye seva zote mbili), lakini katika aya ya 6 amri ya pili na ya mwisho:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.confbadilisha na:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.confKuanzisha mwingiliano kati ya seva kupitia SSH isiyo na nenosiri
Ili pgbackrest ifanye kazi kwa usahihi, inahitajika kusanidi mwingiliano kati ya seva ya posta na hazina kwa kutumia faili muhimu.
Hifadhi (pgbackrest ya mtumiaji):
Unda jozi muhimu:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""Attention! Tunaendesha amri hapo juu bila sudo.
Seva ya Postgres (mtumiaji wa sudo au mzizi):
Unda jozi muhimu:
sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa
-t rsa -b 4096 -N ""Hifadhi (mtumiaji wa sudo):
Nakili ufunguo wa umma wa seva ya posta kwenye seva ya hazina:
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' &&
echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' &&
sudo ssh root@<postgres_server_ip> cat /var/lib/postgresql/.ssh/id_rsa.pub) |
sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keysKatika hatua hii utaulizwa nenosiri kwa mtumiaji wa mizizi. Unahitaji kuingiza nenosiri la mtumiaji wa mizizi ya seva ya postgres!
Seva ya Postgres (mtumiaji wa sudo):
Nakili ufunguo wa umma wa hazina kwa seva na postgres:
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' &&
echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' &&
sudo ssh root@<repository_server_ip> cat /home/pgbackrest/.ssh/id_rsa.pub) |
sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys
Katika hatua hii utaulizwa nenosiri kwa mtumiaji wa mizizi. Unahitaji kuingiza nywila haswa ya mtumiaji wa mizizi ya hazina!
Tunaangalia:
Hifadhi (mtumiaji wa mizizi, kwa usafi wa jaribio):
sudo -u pgbackrest ssh postgres@<postgres_server_ip>Seva ya Postgres (mtumiaji wa mizizi, kwa usafi wa jaribio):
sudo -u postgres ssh pgbackrest@<repository_server_ip>Tunahakikisha kwamba tunapata ufikiaji bila matatizo.
Kuanzisha seva ya posta
Seva ya Postgres (mtumiaji wa sudo au mzizi):
1. Hebu turuhusu kugonga kwenye seva ya postgres kutoka kwa IP za nje. Ili kufanya hivyo, hariri faili postgresql.conf (iko kwenye /etc/postgresql/11/main folda), na kuongeza mstari kwake:
listen_addresses = '*'Ikiwa mstari kama huo tayari upo, iondoe au uweke thamani ya kigezo kama '*'.
Katika faili pg_hba.conf (pia iko kwenye folda /etc/postgresql/11/main) ongeza mistari ifuatayo:
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5ambapo:
hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля2. Hebu tufanye mipangilio muhimu ndani postgresql.conf (iko kwenye folda /etc/postgresql/11/main) kwa pgbackrest kufanya kazi:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica3. Hebu tufanye mipangilio muhimu katika faili ya usanidi ya pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=<repository_server_ip>4. Pakia upya postgresql:
sudo service postgresql restartKuweka seva ya hifadhi
Hifadhi (mtumiaji wa pgbackrest):
Hebu tufanye mipangilio muhimu katika faili ya usanidi pgbackrest
(/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-host=<postgres_server_ip>
pg1-path=/var/lib/postgresql/11/main
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # Параметр, указывающий сколько хранить полных бэкапов. Т.е. если у вас есть два полных бэкапа и вы создаете третий - первые два будут удалены вместе с инкрементами.
start-fast=y # Начинает резервное копирование немедленно, прочитать про этот параметр можно тут https://postgrespro.ru/docs/postgrespro/9.5/continuous-archivingKuunda hifadhi
Hifadhi (mtumiaji wa pgbackrest):
Unda hifadhi mpya ya nguzo kuu:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
Проверка
Seva ya Postgres (mtumiaji wa sudo au mzizi):
Tunaangalia seva ya postgres:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info checkHifadhi (mtumiaji wa pgbackrest):
Tunaangalia seva ya kumbukumbu:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info checkTunahakikisha kwamba katika pato tunaona mstari "angalia mwisho wa amri: imekamilika kwa mafanikio".
Umechoka? Wacha tuendelee kwenye sehemu ya kuvutia zaidi.
Kufanya chelezo
Hifadhi (mtumiaji wa pgbackrest):
1. Tekeleza nakala rudufu:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. Hakikisha kwamba nakala rudufu imeundwa:
ls /var/lib/pgbackrest/backup/main/Pgbackrest itaunda chelezo kamili ya kwanza. Ikiwa unataka, unaweza kuendesha amri ya chelezo tena na uhakikishe kuwa mfumo huunda nakala rudufu.
Ikiwa unataka kufanya nakala kamili tena, basi taja bendera ya ziada:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backupIkiwa unataka pato la kina la koni, basi pia taja:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backupInarejesha nakala rudufu
Seva ya Postgres (mtumiaji wa sudo au mzizi):
1. Acha nguzo inayoendesha:
sudo pg_ctlcluster 11 main stop2. Kurejesha kutoka kwa chelezo:
sudo -u postgres pgbackrest --stanza=main --delta restore3. Anzisha nguzo:
sudo pg_ctlcluster 11 main startBaada ya kurejesha nakala rudufu, tunahitaji kufanya nakala rudufu ya pili:
Hifadhi (mtumiaji wa pgbackrest):
sudo pgbackrest --stanza=main backupNi hayo tu. Kwa kumalizia, ningependa kuwakumbusha kwamba sijaribu kwa vyovyote kujifanya kuwa dba mkuu na nitatumia mawingu kwa fursa yoyote ile. Hivi sasa, mimi mwenyewe naanza kusoma mada anuwai kama vile chelezo, urudufishaji, ufuatiliaji, n.k. na ninaandika ripoti ndogo kuhusu matokeo ili kutoa mchango mdogo kwa jamii na kuacha karatasi ndogo za kudanganya kwa ajili yangu.
Katika makala zifuatazo nitajaribu kuzungumza juu ya vipengele vya ziada - kurejesha data kwenye nguzo safi, usimbaji fiche wa chelezo na uchapishaji kwa S3, chelezo kupitia rsync.
Chanzo: mapenzi.com
