Kā konfigurēt PostgreSQL 12 straumēšanas replikāciju CentOS 8


PostgreSQL datu bāze atbalsta vairākus replikācijas risinājumus, lai izveidotu augstas pieejamības, mērogojamas, kļūdas izturīgas lietojumprogrammas, no kurām viena ir Write-Ahead Log (WAL) nosūtīšana. Šis risinājums ļauj ieviest gaidīšanas serveri, izmantojot uz failiem balstītu žurnālu nosūtīšanu vai straumēšanas replikāciju vai, ja iespējams, abu pieeju kombināciju.

Izmantojot straumēšanas replikāciju, gaidstāves (replikācijas verga) datu bāzes serveris ir konfigurēts, lai izveidotu savienojumu ar galveno/galveno serveri, kurš WAL ierakstus straumē gaidīšanas režīmā, kad tie tiek ģenerēti, negaidot WAL faila aizpildīšanu.

Pēc noklusējuma straumēšanas replikācija ir asinhrona, ja dati tiek ierakstīti gaidīšanas serverī (-os) pēc tam, kad darījums ir izdarīts primārajā serverī. Tas nozīmē, ka ir neliela kavēšanās starp darījuma veikšanu galvenajā serverī un izmaiņām, kas kļūst redzamas gaidīšanas serverī. Viens no šīs pieejas trūkumiem ir tāds, ka gadījumā, ja galvenais serveris avarē, visi neizpildītie darījumi var netikt atkārtoti, un tas var izraisīt datu zudumu.

Šajā rokasgrāmatā ir parādīts, kā iestatīt Postgresql 12 galvenās gaidīšanas un straumēšanas straumēšanas replikāciju vietnē CentOS 8. Gaidīšanas režīmā kā risinājumu izmantosim “replikācijas slotus”, lai izvairītos no galvenā servera veco WAL segmentu otrreizējas pārstrādes, pirms gaidīšanas režīms tos ir saņēmis.

Ņemiet vērā, ka, salīdzinot ar citām metodēm, replikācijas sloti saglabā tikai nepieciešamo segmentu skaitu.

Šajā rokasgrāmatā tiek pieņemts, ka esat izveidojis savienojumu ar galveno un gaidīšanas datubāzes serveri kā sakni, izmantojot SSH (vajadzības gadījumā izmantojiet komandu Sudo, ja esat izveidojis savienojumu kā parasts lietotājs ar administratora tiesībām):

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

Abos datu bāzes serveros jābūt instalētai Postgresql 12, pretējā gadījumā skatiet sadaļu: Kā instalēt PostgreSQL un pgAdmin CentOS 8.

Piezīme: PostgreSQL 12 nāk ar būtiskām izmaiņām replikācijas ieviešanā un konfigurācijā, piemēram, recovery.conf nomaiņa un recovery.conf parametru konvertēšana parastos PostgreSQL konfigurācijas parametros, padarot klastera replikācijas konfigurēšanu daudz vieglāku.

1. darbība: PostgreSQL galvenā/primārā datu bāzes servera konfigurēšana

1. Galvenajā serverī pārslēdzieties uz postgres sistēmas kontu un konfigurējiet IP adresi (-es), kurā (-ās) galvenais serveris klausīsies klientu savienojumus.

Šajā gadījumā mēs izmantosim * , kas nozīmē visu.

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

ALTER SYSTEM SET SQL komanda ir spēcīga funkcija, lai tieši ar SQL vaicājumu mainītu servera konfigurācijas parametrus. Konfigurācijas tiek saglabātas failā postgresql.conf.auto, kas atrodas datu mapes saknē (piem.,/Var/lib/pgsql/12/data /), un nolasītas papildus tām, kas glabājas postgresql.conf. Bet iepriekšējo konfigurācijām ir prioritāte salīdzinājumā ar vēlāko un citu saistīto failu konfigurācijām.

2. Pēc tam izveidojiet replikācijas lomu, kas tiks izmantota savienojumiem no gaidīšanas servera uz galveno serveri, izmantojot programmu creator. Šajā komandā karodziņš -P pieprasa paroli jaunajai lomai, un -e atbalsojas komandas, kuras creator lietotājs ģenerē un nosūta datu bāzes serverim.

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

3. Pēc tam klienta autentifikācijas konfigurācijas faila /var/lib/pgsql/12/data/pg_hba.conf beigās ievadiet šo ierakstu ar datu bāzes lauku, kas iestatīts uz replikāciju, kā parādīts ekrānuzņēmumā.

host    replication     replicator      10.20.20.8/24     md5

4. Tagad restartējiet pakalpojumu Postgres12, izmantojot šādu komandu systemctl, lai piemērotu izmaiņas.

# systemctl restart postgresql-12.service

5. Pēc tam, ja darbojas ugunsmūra pakalpojums, ugunsmūra konfigurācijā jāpievieno pakalpojums Postgresql, lai atļautu pieprasījumus no gaidīšanas servera galvenajam.

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

2. solis: Bāzes dublējuma izveidošana gaidstāves servera sāknēšanas palaišanai

6. Pēc tam no rezerves servera jāveic pamatservera bāzes dublēšana; tas palīdz sāknēt gaidīšanas serveri. Gaidīšanas serverī ir jāpārtrauc pakalpojums postgresql 12, jāpārslēdzas uz lietotāja postgres kontu, jādublē datu katalogs (/ var/lib/pgsql/12/data /), pēc tam jāizdzēš viss zem tā, kā parādīts, pirms bāzes uzņemšanas. dublējums.

# 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. Pēc tam izmantojiet rīku pg_basebackup, lai paņemtu bāzes dublējumu ar pareizajām īpašumtiesībām (datu bāzes sistēmas lietotājs, t.i., Postgres, Postgres lietotāja kontā) un ar pareizām atļaujām.

Šajā komandā opcija:

  • -h - norāda resursdatoru, kas ir galvenais serveris.
  • -D - norāda datu direktoriju.
  • -U - norāda savienojuma lietotāju.
  • -P - ļauj ziņot par progresu.
  • -v - iespējo daudzveidīgu režīmu.
  • -R - ļauj izveidot atkopšanas konfigurāciju: izveido standby.signal failu un pievieno savienojuma iestatījumus postgresql.auto.conf datu direktorijā.
  • -X - tiek izmantots, lai dublējumā iekļautu nepieciešamos iepriekš ierakstāmos žurnāla failus (WAL failus). Straumes vērtība nozīmē WAL straumēšanu, kamēr tiek izveidota dublēšana.
  • -C - ļauj izveidot dublēšanas slotu, kuru nosauca opcija -S pirms dublēšanas sākšanas.
  • -S - norāda replikācijas slota nosaukumu.

$ 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. Kad dublēšanas process ir pabeigts, gaidīšanas servera jaunajam datu direktorijai jāizskatās tā, kā redzams ekrānuzņēmumā. Tiek izveidots gaidīšanas signāls un savienojuma iestatījumi tiek pievienoti postgresql.auto.conf. Tās saturu var uzskaitīt, izmantojot komandu ls.

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

Replikācijas vergs darbosies režīmā “Karstais gaidstāves režīms”, ja parametrā hot_standby parametrs postgresql.conf ir iestatīts uz (noklusējuma vērtība) un datu direktorijā atrodas standby.signal fails.

9. Tagad atgriezieties galvenajā serverī, atverot skatu pg_replication_slots, jums jāspēj redzēt replikācijas slotu ar nosaukumu pgstandby1.

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

10. Lai skatītu failā postgresql.auto.conf pievienotos savienojuma iestatījumus, izmantojiet komandu cat.

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

11. Tagad sāciet normālas datu bāzes darbības gaidīšanas serverī, palaižot pakalpojumu PostgreSQL šādi.

# systemctl start postgresql-12

3. darbība: PostgreSQL straumēšanas replikācijas pārbaude

12. Kad veiksmīgi izveidots savienojums starp galveno un gaidīšanas režīmu, gaidīšanas serverī redzēsit WAL uztvērēja procesu ar straumēšanas statusu, to varat pārbaudīt, izmantojot skatu pg_stat_wal_receiver.

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

un atbilstošo WAL sūtītāja procesu galvenajā/primārajā serverī ar straumēšanas stāvokli un asinhronizācijas staciju, varat pārbaudīt šo skatu pg_stat_replication pg_stat_replication.

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

Iepriekš redzamajā ekrānuzņēmumā straumēšanas replikācija ir asinhrona. Nākamajā sadaļā mēs parādīsim, kā pēc izvēles iespējot sinhrono replikāciju.

13. Tagad pārbaudiet, vai replikācija darbojas labi, izveidojot testa datu bāzi galvenajā serverī, un pārbaudiet, vai tā pastāv gaidīšanas serverī.
[master] postgres = # IZVEIDOT DATU BĀZES tekmint;
[gaidīšanas režīms] postgres = #\l

Pēc izvēles: iespējot sinhrono replikāciju

14. Sinhronā replikācija piedāvā iespēju veikt darījumu (vai rakstīt datus) primārajā datu bāzē un vienlaikus gaidīšanas/reprodukcijas režīmā. Tas tikai apstiprina, ka darījums ir veiksmīgs, kad visas transakcijas veiktās izmaiņas ir pārsūtītas uz vienu vai vairākiem sinhroniem gaidīšanas serveriem.

Lai iespējotu sinhrono replikāciju, ir jāiestata arī synchronous_commit (kas ir noklusējuma vērtība, tāpēc nav nepieciešamas nekādas izmaiņas), kā arī parametrs synchronous_standby_names ir jāiestata kā tukša vērtība. Šajā ceļvedī mēs to iestatīsim visiem.

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

15. Pēc tam atkārtoti ielādējiet pakalpojumu PostgreSQL 12, lai lietotu jaunās izmaiņas.

# systemctl reload postgresql-12.service

16. Tagad, vēlreiz vaicājot par WAL sūtītāja procesu primārajā serverī, tam jāparāda straumēšanas stāvoklis un sinhronizācijas sinhronizācija.

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

Mēs esam nonākuši šīs rokasgrāmatas beigās. Mēs parādījām, kā iestatīt PostgreSQL 12 galvenās gaidīšanas datubāzes straumēšanas replikāciju CentOS 8. Mēs arī apskatījām, kā iespējot sinhrono replikāciju PostgreSQL datu bāzes klasterī.

Replikācijas ir daudz, un jūs vienmēr varat izvēlēties risinājumu, kas atbilst jūsu IT videi un/vai lietojumprogrammas prasībām. Lai iegūtu sīkāku informāciju, dodieties uz Log-Shipping Standby Servers, kas atrodas PostgreSQL 12 dokumentācijā.