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.
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 /build
2. Sakinisha vitegemezi vinavyohitajika kwa mkusanyiko:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev
3. Kukusanya pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src
4. 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/pgbackrest
5. Pgbackrest inahitaji perl. Sakinisha:
sudo apt-get install perl
6. 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.conf
7. Angalia:
pgbackrest version
Seva 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.conf
badilisha na:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
Kuanzisha 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_keys
Katika 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 md5
ambapo:
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 = replica
3. 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 restart
Kuweka 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 # ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»Π½ΡΡ
Π±ΡΠΊΠ°ΠΏΠΎΠ². Π’.Π΅. Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΠΏΠΎΠ»Π½ΡΡ
Π±ΡΠΊΠ°ΠΏΠ° ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΡΠ΅ΡΠΈΠΉ, ΡΠΎ ΡΠ°ΠΌΡΠΉ ΡΡΠ°ΡΡΠΉ Π±ΡΠΊΠ°ΠΏ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π½ΠΎΡΠΈΡΡ ΠΊΠ°ΠΊ "Ρ
ΡΠ°Π½ΠΈΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ
Π±ΡΠΊΠ°ΠΏΠΎΠ²" - ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΡΠΎΡΠ°ΡΠΈΡΠΌΠΈ Π»ΠΎΠ³ΠΎΠ². Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @Aytuar Π·Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
start-fast=y # ΠΠ°ΡΠΈΠ½Π°Π΅Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΡΠΎ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving
Kuunda 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 check
Hifadhi (mtumiaji wa pgbackrest):
Tunaangalia seva ya kumbukumbu:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
Tunahakikisha 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 backup
Ikiwa unataka pato la kina la koni, basi pia taja:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
Inarejesha nakala rudufu
Seva ya Postgres (mtumiaji wa sudo au mzizi):
1. Acha nguzo inayoendesha:
sudo pg_ctlcluster 11 main stop
2. Kurejesha kutoka kwa chelezo:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore
Ili kurejesha hifadhidata katika hali ya chelezo FULL ya mwisho, tumia amri bila kubainisha recovery_target:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore
Muhimu! Baada ya urejeshaji, inaweza kutokea kwamba hifadhidata inakwama katika hali ya uokoaji (kutakuwa na makosa kama ERROR: haiwezi kutekeleza DROP DATABASE katika muamala wa kusoma tu). Kwa kuwa mkweli, bado sijaelewa hii inahusiana na nini. Suluhisho ni kama ifuatavyo (utahitaji kusubiri kidogo baada ya amri kutekelezwa):
sudo -u postgres psql -c "select pg_wal_replay_resume()"
Kwa kweli, inawezekana kurejesha salama maalum kwa jina lake. Hapa nipo tu
3. Anzisha nguzo:
sudo pg_ctlcluster 11 main start
Baada ya kurejesha nakala rudufu, tunahitaji kufanya nakala rudufu ya pili:
Hifadhi (mtumiaji wa pgbackrest):
sudo pgbackrest --stanza=main backup
Ni 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