Postgresql babeskopia gehigarriak pgbackrest-ekin - garatzaileen borrokalari gazteentzako ikastaroa

Erantzukizuna

Garatzailea naiz. Kodea idazten dut eta datu-basearekin elkarreragiten dut erabiltzaile gisa soilik. Ez dut inolaz ere sistema-administratzaile baten itxurak egiten, are gutxiago dba. Baina…

Gertatu zen postgresql datu-basearen babeskopia bat antolatu behar nuela. Hodeirik ez - erabili SSH eta ziurtatu dena funtzionatzen duela dirurik eskatu gabe. Zer egiten dugu horrelako kasuetan? Hori bai, pgdump cron-era bultzatzen dugu, dena artxiboan babeskopia egiten dugu egunero, eta guztiz galtzen bagara, artxibo hau urrun bidaltzen dugu.

Oraingoan zailtasuna izan zen, planen arabera, datu-basea egunean +- 100 MB inguru hazi behar zela. Noski, pare bat asteren buruan pgdump-ekin guztiaren babeskopiak egiteko gogoa desagertuko da. Hau da segurtasun-kopia gehigarriak erreskatatzen.

Interesgarria? Ongi etorri katura.

Sorburu-fitxategi guztiak kopiatzen ez direnean, berriak eta aurreko kopia sortu zenetik aldatutakoak baino ez direnean babeskopia mota bat da.

Postgresen korapilatsuak ulertzeko ERABAT nahi ez zuen (garai hartan) edozein garatzaile bezala, botoi berdea aurkitu nahi nuen. Bada, badakizu, AWS-n bezala, DigitalOcean-en: botoi bat sakatu duzu - erreplikazioa lortu duzu, bigarrena sakatu - babeskopiak konfiguratu dituzu, hirugarrena - dena ordu pare bat atzera egin duzu. Ez dut botoirik edo GUI tresna ederrik aurkitu. Bat ezagutzen baduzu (doan edo merke), idatzi horri buruz iruzkinetan.

Googlen bilatu ondoren bi tresna aurkitu ditut pgbarman ΠΈ pgbackrest. Besterik gabe, lehenengoarekin ez nuen lortu (oso dokumentazio urria, eskuliburu zaharren arabera dena asmatzen saiatu nintzen), baina bigarrenarekin dokumentazioa parekoa izan zen, baina ez akatsik gabe. Antzeko zeregin baten aurrean daudenen lana errazteko, artikulu hau idatzi zen.

Artikulu hau irakurri ondoren, segurtasun-kopia inkrementalak egiten ikasiko duzu, urruneko zerbitzari batean gorde (kopiak dituen biltegian) eta leheneratu datuak galtzen badira edo zerbitzari nagusian beste arazoren bat izanez gero.

Prestakuntza

Eskuliburua erreproduzitzeko bi VPS beharko dituzu. Lehenengoa biltegia izango da (kopiak gordeko dituen biltegia), eta bigarrena, hain zuzen ere, zerbitzaria bera postgres-ekin (nire kasuan, postgres-en 11. bertsioa).

Suposatzen da postgres duen zerbitzarian root, sudo user, postgres user eta postgres bera instalatuta dagoela (postgres erabiltzailea automatikoki sortzen da postgresql instalatzean), eta biltegiko zerbitzarian root eta sudo erabiltzailea (eskuliburuan) pgbackrest erabiltzaile-izena erabiliko da) .

Argibideak erreproduzitzerakoan arazo gutxiago izan ditzazun, letra etzanez idazten dut non, zein erabiltzailerekin eta zein eskubiderekin exekutatu nuen komandoa artikulua idazten eta egiaztatzean.

pgbackrest instalatzen

Biltegia (erabiltzailea pgbackrest):

1. Deskargatu artxiboa pgbackrest-etik eta transferitu bere edukia /build karpetara:

sudo mkdir /build
sudo wget -q -O - 
       https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz | 
       sudo tar zx -C /build

2. Instalatu muntatzeko beharrezkoak diren mendekotasunak:

sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev 
       libpq-dev

3. pgbackrest muntatzea:

cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src

4. Kopiatu fitxategi exekutagarria /usr/bin direktoriora:

sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

5. Pgbackrest-ek perl behar du. Instalatu:

sudo apt-get install perl

6. Sortu erregistroetarako direktorioak, eman eskubide batzuk:

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. Egiaztatu:

pgbackrest version

Postgres zerbitzaria (sudo erabiltzailea edo root):

Postgres duen zerbitzari batean pgbackrest instalatzeko prozesua biltegiko instalazio prozesuaren antzekoa da (bai, pgbackrest bi zerbitzarietan instalatu behar da), baina 6. paragrafoan bigarren eta azken aginduak:

sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf

ordezkatu:

sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Zerbitzarien arteko elkarrekintza konfiguratzea pasahitz gabeko SSH bidez

pgbackrest-ek behar bezala funtziona dezan, beharrezkoa da postgres zerbitzariaren eta biltegiaren arteko elkarrekintza konfiguratzea gako-fitxategia erabiliz.

Biltegia (erabiltzailea pgbackrest):

Sortu gako bikote bat:

mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa 
       -t rsa -b 4096 -N ""

Arreta! Goiko komandoak sudorik gabe exekutatzen ditugu.

Postgres zerbitzaria (sudo erabiltzailea edo root):

Sortu gako bikote bat:

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 ""

Biltegia (sudo erabiltzailea):

Kopiatu postgres zerbitzariaren gako publikoa biltegiko zerbitzarian:

(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

Urrats honetan root erabiltzailearen pasahitza eskatuko zaizu. Postgres zerbitzariaren root erabiltzailearen pasahitza sartu behar duzu!

Postgres zerbitzaria (sudo erabiltzailea):

Kopiatu biltegiko gako publikoa zerbitzarian postgres-ekin:

(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

Urrats honetan root erabiltzailearen pasahitza eskatuko zaizu. Biltegiko root erabiltzailearen pasahitza zehatz-mehatz idatzi behar duzu!

Egiaztatzen dugu:

Biltegia (erabiltzailea, esperimentuaren garbitasunerako):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Postgres zerbitzaria (erabiltzailea, esperimentuaren garbitasunagatik):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Arazorik gabe sarbidea izango dugula ziurtatzen dugu.

Postgres zerbitzari bat konfiguratzea

Postgres zerbitzaria (sudo erabiltzailea edo root):

1. Onar dezagun postgres zerbitzaria kanpoko IPetatik jotzea. Horretarako, editatu fitxategia postgresql.conf (/etc/postgresql/11/main karpetan dago), lerroa gehituz:

listen_addresses = '*'

Lerro hori jada existitzen bada, kendu iruzkinak edo ezarri parametroaren balioa '*' gisa.

Fitxategian pg_hba.conf (Karpetetan dago ere /etc/postgresql/11/main) gehitu lerro hauek:

hostssl  all  all  0.0.0.0/0  md5
host  all  all  0.0.0.0/0  md5

non:

hostssl/host - ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Ρ‡Π΅Ρ€Π΅Π· SSL (ΠΈΠ»ΠΈ Π½Π΅Ρ‚)
all - Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм Π±Π°Π·Π°ΠΌ
all - имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (всСм)
0.0.0.0/0 - маска сСти с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ
md5 - способ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ пароля

2. Egin ditzagun beharrezko ezarpenak postgresql.conf (karpetean dago /etc/postgresql/11/main) pgbackrest-ek funtziona dezan:

archive_command = 'pgbackrest --stanza=main archive-push %p' # Π“Π΄Π΅ main - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ кластСра. ΠŸΡ€ΠΈ установкС postgres автоматичСски создаСт кластСр main.
archive_mode = on
max_wal_senders = 3
wal_level = replica

3. Egin ditzagun beharrezko ezarpenak pgbackrest konfigurazio fitxategian (/etc/pgbackrest/pgbackrest.conf):

[main]
pg1-path=/var/lib/postgresql/11/main

[global]
log-level-file=detail
repo1-host=<repository_server_ip>

4. Berriz kargatu postgresql:

sudo service postgresql restart

Biltegiko zerbitzari bat konfiguratzea

Biltegia (pgbackrest erabiltzailea):

Egin ditzagun beharrezko ezarpenak konfigurazio fitxategian 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

Biltegi bat sortzea

Biltegia (pgbackrest erabiltzailea):

Sortu biltegiratze berri bat klusterrarentzako nagusia:

sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create

ikuskatzeko

Postgres zerbitzaria (sudo erabiltzailea edo root):

Postgres zerbitzarian egiaztatzen dugu:

sudo -u postgres pgbackrest --stanza=main --log-level-console=info check

Biltegia (pgbackrest erabiltzailea):

Biltegiko zerbitzarian egiaztatzen dugu:

sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check

Ziurtatu dugu irteeran "check command end: arrakastaz osatuta" lerroa ikusten dugula.

Nekatuta? Goazen parterik interesgarrienera.

Babeskopia bat egitea

Biltegia (pgbackrest erabiltzailea):

1. Egin babeskopia bat:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Ziurtatu babeskopia bat sortu dela:

ls /var/lib/pgbackrest/backup/main/

Pgbackrest-ek lehenengo babeskopia osoa sortuko du. Nahi baduzu, babeskopia komandoa berriro exekutatu dezakezu eta ziurtatu sistemak segurtasun kopia gehigarria sortzen duela.

Berriro babeskopia osoa egin nahi baduzu, zehaztu marka gehigarri bat:

sudo -u pgbackrest pgbackrest --stanza=main --type=full backup

Kontsolaren irteera zehatza nahi baduzu, zehaztu ere:

sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup

Babeskopia bat leheneratzen

Postgres zerbitzaria (sudo erabiltzailea edo root):

1. Gelditu exekutatzen ari den clusterra:

sudo pg_ctlcluster 11 main stop

2. Babeskopiatik leheneratu:

sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore

Datu-basea azken babeskopia OSOaren egoerara berrezartzeko, erabili komandoa recovery_target zehaztu gabe:

sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore

Garrantzitsua! Berreskuratu ondoren, gerta daiteke datu-basea berreskuratzeko moduan trabatuta egotea (ERROREA bezalako erroreak egongo dira: ezin da DROP DATABASE exekutatu irakurtzeko soilik den transakzio batean). Egia esateko, oraindik ez dut ulertu zerrekin lotzen den. Irtenbidea honakoa da (agindua exekutatu ondoren pixka bat itxaron beharko duzu):

sudo -u postgres psql -c "select pg_wal_replay_resume()"

Izan ere, posible da babeskopia zehatz bat bere izenarekin berrezartzea. Hemen nago bakarrik Ezaugarri honen deskribapenerako esteka bat emango dut dokumentazioan. Garatzaileek aukera hau kontu handiz erabiltzea gomendatzen dute eta zergatik azaltzen dute. Nik neuk erabili dudala gehi dezaket. Benetan behar baduzu, ziurtatu berreskuratu ondoren datu-baseak berreskuratze modutik irteten dela (hautatu pg_is_in_recovery() "f" erakutsi beharko luke) eta, badaezpada, egin babeskopia osoa berreskuratu ondoren.

3. Hasi klusterra:

sudo pg_ctlcluster 11 main start

Babeskopia berrezarri ondoren, bigarren segurtasun kopia bat egin behar dugu:

Biltegia (pgbackrest erabiltzailea):

sudo pgbackrest --stanza=main backup

Hori da dena. Amaitzeko, gogorarazi nahi dut ez naizela inolaz ere senior dba itxurak egiten saiatzen eta aukera txikienean hodeiak erabiliko ditudala. Gaur egun, ni neu ere hainbat gai aztertzen hasi naiz, hala nola segurtasun-kopia, erreplikazioa, monitorizazioa, etab. eta emaitzei buruzko txosten txikiak idazten ditut komunitateari ekarpen txiki bat egiteko eta neuretzako tranpa-orri txikiak uzteko.

Hurrengo artikuluetan ezaugarri gehigarriei buruz hitz egiten saiatuko naiz: datuak kluster garbi batean berreskuratzea, babeskopien enkriptatzea eta S3-n argitaratzea, rsync bidezko babeskopiak.

Iturria: www.habr.com

Gehitu iruzkin berria