Kaip sukonfigūruoti „PostgreSQL 12“ srautinio perdavimo replikaciją „CentOS 8“.


PostgreSQL duomenų bazė palaiko kelis replikacijos sprendimus, skirtus didelio pasiekiamumo, keičiamo dydžio, gedimams atsparioms programoms kurti, viena iš jų yra Įrašymo žurnalas (WAL). ) Siuntimas. Šis sprendimas leidžia įdiegti budėjimo serverį naudojant failų siuntimą arba srautinio perdavimo replikaciją arba, jei įmanoma, abiejų būdų derinį.

Naudojant srautinį replikavimą, parengties (replikacijos pagalbinis) duomenų bazės serveris sukonfigūruojamas prisijungti prie pagrindinio/pagrindinio serverio, kuris srautu perduoda WAL įrašus į budėjimo režimą, kai jie generuojami, nelaukiant WAL. failą, kurį reikia užpildyti.

Pagal numatytuosius nustatymus srautinio perdavimo replikacija yra asinchroninė, kai duomenys įrašomi į budėjimo serverį (-ius) po operacijos atlikimo pirminiame serveryje. Tai reiškia, kad tarp operacijos atlikimo pagrindiniame serveryje ir pasikeitimų, kurie tampa matomi budėjimo režimo serveryje, yra nedidelis delsa. Vienas šio metodo trūkumas yra tas, kad pagrindiniam serveriui sugenda, bet kokios neįpareigotos operacijos gali būti neatkartojamos ir dėl to gali būti prarasti duomenys.

Šiame vadove parodyta, kaip nustatyti Postgresql 12 pagrindinio budėjimo režimo srautinio perdavimo replikaciją CentOS 8. Budėjimo režimui naudosime „replikacijos lizdus“ kaip sprendimą, kad pagrindinis serveris neperdirbtų senų WAL segmentų, kol budėjimo režimas juos negavo.

Atminkite, kad, palyginti su kitais metodais, replikacijos lizdai išlaiko tik tiek segmentų, kiek žinoma, kad jų reikia.

Bandymo aplinka:

Šiame vadove daroma prielaida, kad prie pagrindinės ir parengties duomenų bazės serverių prisijungėte kaip šakninis per SSH (jei reikia, naudokite komandą Sudo, jei esate prisijungę kaip įprastas vartotojas, turintis administratoriaus teises):

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

Abiejuose duomenų bazių serveriuose turi būti įdiegta Postgresql 12, kitu atveju žr.: Kaip įdiegti PostgreSQL ir pgAdmin sistemoje CentOS 8.

Pastaba: PostgreSQL 12 pateikiami dideli replikacijos diegimo ir konfigūracijos pakeitimai, pvz., recovery.conf pakeitimas ir recovery.conf parametrų konvertavimas į įprastus PostgreSQL konfigūracijos parametrus, todėl daug lengviau konfigūruoti klasterio replikaciją.

1 veiksmas: „PostgreSQL“ pagrindinio/pirminio duomenų bazės serverio konfigūravimas

1. Pagrindiniame serveryje perjunkite į „postgres“ sistemos paskyrą ir sukonfigūruokite IP adresą (-ius), kuriuo (-iais) pagrindinis serveris klausys klientų ryšių.

Šiuo atveju naudosime *, reiškiančią viską.

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

SQL komanda ALTER SYSTEM SET yra galinga funkcija, leidžianti pakeisti serverio konfigūracijos parametrus tiesiogiai naudojant SQL užklausą. Konfigūracijos išsaugomos postgresql.conf.auto faile, esančiame duomenų aplanko šaknyje (pvz., /var/lib/pgsql/12/data/) ir nuskaitomas papildymas į saugomus postgresql.conf. Tačiau pirmųjų konfigūracijos turi viršenybę prieš vėlesnių ir kitų susijusių failų konfigūracijas.

2. Tada sukurkite replikacijos vaidmenį, kuris bus naudojamas ryšiams iš budėjimo režimo serverio su pagrindiniu serveriu, naudojant programą createuser. Šioje komandoje vėliavėlė -P ragina įvesti slaptažodį naujam vaidmeniui, o -e atkartoja komandas, kurias Createuser generuoja ir siunčia duomenų bazės serveriui.

su – postgres
createuser --replication -P -e replicator
exit

3. Tada įveskite šį įrašą /var/lib/pgsql/12/data/pg_hba.conf kliento autentifikavimo konfigūracijos failo pabaigoje, nustatydami duomenų bazės lauką į replikacija, kaip parodyta ekrano kopijoje.

host    replication     replicator      10.20.20.8/24     md5

4. Dabar iš naujo paleiskite Postgres12 paslaugą naudodami šią systemctl komandą, kad pritaikytumėte pakeitimus.

systemctl restart postgresql-12.service

5. Be to, jei veikia ugniasienės paslauga, ugniasienės konfigūracijoje turite pridėti „Postgresql“ paslaugą, kad būtų galima teikti užklausas iš budėjimo serverio pagrindiniam serveriui.

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

2 veiksmas: sukurkite bazinę atsarginę kopiją, kad įkeltumėte budėjimo serverį

6. Tada turite sukurti pagrindinio serverio atsarginę kopiją iš budėjimo serverio; tai padeda paleisti budėjimo serverį. Turite sustabdyti „postgresql 12“ paslaugą budėjimo serveryje, pereiti prie „postgres“ vartotojo abonemento, sukurti atsarginę duomenų katalogo (/var/lib/pgsql/12/data/) atsarginę kopiją, tada ištrinti viską, kas jame yra. kaip parodyta, prieš darydami bazinę atsarginę kopiją.

systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*

7. Tada naudokite įrankį pg_basebackup, kad sukurtumėte pagrindinę atsarginę kopiją, kuriai priklausytų teisė (duomenų bazės sistemos naudotojas, t. y. Postgres, esantis Postgres vartotojo abonementą) ir su tinkamais leidimais.

Šioje komandoje parinktis:

  • -h – nurodo pagrindinį serverį, kuris yra pagrindinis serveris.
  • -D – nurodo duomenų katalogą.
  • -U – nurodo ryšio vartotoją.
  • -P – įgalina pažangos ataskaitas.
  • -v – įjungia daugiažodį režimą.
  • -R – leidžia sukurti atkūrimo konfigūraciją: sukuriamas standby.signal failas ir po duomenimis pridedami ryšio parametrai prie postgresql.auto.conf katalogas.
  • -X – naudojama į atsarginę kopiją įtraukti reikalingus įrašymo žurnalo failus (WAL failus). Srauto reikšmė reiškia WAL srautinį perdavimą, kol sukuriama atsarginė kopija.
  • -C – leidžia sukurti replikacijos lizdą, pavadintą -S parinktimi prieš pradedant atsarginę kopiją.
  • -S – nurodo replikacijos lizdo pavadinimą.
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

8. Kai atsarginės kopijos kūrimo procesas bus baigtas, naujas duomenų katalogas budėjimo režimo serveryje turėtų atrodyti taip, kaip parodyta ekrano kopijoje. Sukuriamas standby.signal, o ryšio nustatymai pridedami prie postgresql.auto.conf. Jo turinį galite išvardyti naudodami komandą ls.

ls -l /var/lib/pgsql/12/data/

Replikacijos pavaldinys veiks „Hot Standby ” režimu, jei hot_standby parametras yra įjungtas (numatytoji vertė) postgresql.conf ir duomenų kataloge yra failas standby.signal.

9. Grįžę į pagrindinį serverį, turėtumėte matyti replikacijos sritį, vadinamą pgstandby1, kai atidarote pg_replication_slots rodinį, kaip nurodyta toliau.

su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit

10. Norėdami peržiūrėti ryšio nustatymus, pridėtus prie postgresql.auto.conf failo, naudokite komandą cat.

cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. Dabar pradėkite įprastas duomenų bazės operacijas budėjimo serveryje paleisdami PostgreSQL paslaugą, kaip nurodyta toliau.

systemctl start postgresql-12

3 veiksmas: „PostgreSQL“ srautinio perdavimo replikacijos testavimas

12. Sėkmingai užmezgus ryšį tarp pagrindinio įrenginio ir budėjimo režimo, budėjimo serveryje pamatysite WAL imtuvo procesą su srautinio perdavimo būsena, galite tai patikrinti. naudojant pg_stat_wal_receiver rodinį.

psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

ir atitinkamą WAL siuntimo procesą pagrindiniame/pirminiame serveryje su srautinio perdavimo būsena ir sinchronizavimo_būsena asinchronizacija, galite patikrinti šį pg_stat_replication pg_stat_replication rodinį.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Aukščiau pateiktoje ekrano kopijoje srautinio perdavimo replikacija yra asinchroninė. Kitame skyriuje parodysime, kaip pasirinktinai įjungti sinchroninį replikavimą.

13. Dabar patikrinkite, ar replikacija veikia gerai, sukurdami bandomąją duomenų bazę pagrindiniame serveryje ir patikrinkite, ar ji yra budėjimo serveryje.
[master]postgres=# KURTI DUOMENŲ BAZĘ tecmint;
[standby]postgres=# \l

Pasirenkama: sinchroninio replikavimo įgalinimas

14. Sinchroninis replikavimas suteikia galimybę atlikti operaciją (arba įrašyti duomenis) į pirminę duomenų bazę ir budėjimo režimą/repliką vienu metu. Tai tik patvirtina, kad operacija sėkminga, kai visi operacijos atlikti pakeitimai buvo perkelti į vieną ar daugiau sinchroninių budėjimo serverių.

Kad įgalintumėte sinchroninį replikavimą, synchronous_commit taip pat turi būti įjungtas (tai yra numatytoji reikšmė, todėl nereikia jokių pakeitimų), taip pat turite nustatyti parametrą synchronous_standby_names iki netuščios vertės. Šiam vadovui nustatysime jį visiems.

psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. Tada iš naujo įkelkite „PostgreSQL 12“ paslaugą, kad pritaikytumėte naujus pakeitimus.

systemctl reload postgresql-12.service

16. Dabar, kai dar kartą pateikiate užklausą apie WAL siuntėjo procesą pirminiame serveryje, jame turėtų būti rodoma srautinio perdavimo būsena ir sinchronizavimo būsenasinchronizuoti.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Priėjome šio vadovo pabaigą. Parodėme, kaip nustatyti PostgreSQL 12 pagrindinės parengties duomenų bazės srautinio perdavimo replikaciją CentOS 8. Taip pat aptarėme, kaip įjungti sinchroninį replikavimą PostgreSQL duomenų bazės klasteryje.

Yra daug replikavimo būdų ir visada galite pasirinkti sprendimą, atitinkantį jūsų IT aplinką ir (arba) konkrečios programos reikalavimus. Norėdami gauti daugiau informacijos, eikite į žurnalo pristatymo budėjimo serverius PostgreSQL 12 dokumentacijoje.