Hvernig á að stilla PostgreSQL 12 straumafritun í CentOS 8


PostgreSQL gagnagrunnur styður nokkrar afritunarlausnir til að byggja upp aðgengileg, stigstærð, villuþolin forrit, ein þeirra er Write-Ahead Log (WAL) Shipping. Þessi lausn gerir kleift að innleiða biðþjón með því að nota skráatengda flutningsskrá eða straumafritun, eða þar sem hægt er, blöndu af báðum aðferðum.

Með straumafritun er biðstaða (afritunarþræll) gagnagrunnsþjónn stilltur til að tengjast aðal-/aðalþjóni, sem streymir WAL færslum í biðstöðu þegar þær eru búnar til, án þess að bíða eftir að WAL skráin sé fyllt út.

Sjálfgefið er að straumafritun er ósamstillt þar sem gögn eru skrifuð á biðþjón(a) eftir að viðskipti hafa verið framin á aðalþjóninum. Þetta þýðir að það er lítil töf á milli þess að færslu er framkvæmd á aðalþjóninum og þar til breytingarnar verða sýnilegar á biðþjóninum. Einn galli þessarar aðferðar er að ef aðalþjónninn hrynur, er ekki víst að óskuldbundin viðskipti séu endurtekin og það getur valdið gagnatapi.

Þessi handbók sýnir hvernig á að setja upp Postgresql 12 master-biðstaða straumafritunar á CentOS 8. Við munum nota \afritunarlotur fyrir biðstöðuna sem lausn til að koma í veg fyrir að aðalþjónninn endurvinni gamla WAL hluta áður en biðstaðan hefur tekið við þeim.

Athugaðu að miðað við aðrar aðferðir halda afritunarrauf aðeins þeim fjölda hluta sem vitað er að þurfi.

Þessi handbók gerir ráð fyrir að þú hafir tengst aðal- og biðgagnagrunnsþjónum þínum sem rót í gegnum SSH (notaðu Sudo skipun þar sem þörf krefur ef þú ert tengdur sem venjulegur notandi með stjórnunarréttindi):

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

Báðir gagnagrunnsþjónarnir verða að hafa Postgresql 12 uppsett, annars sjá: Hvernig á að setja upp PostgreSQL og pgAdmin í CentOS 8.

Athugið: PostgreSQL 12 kemur með meiriháttar breytingum á afritunarútfærslu og stillingum eins og að skipta um recovery.conf og umbreytingu á recovery.conf breytum í venjulegar PostgreSQL stillingarfæribreytur, sem gerir það miklu auðveldara að stilla klasaafritun.

Skref 1: Stilla PostgreSQL Master/Primary Database Server

1. Á aðalþjóninum skaltu skipta yfir í postgres kerfisreikninginn og stilla IP töluna sem aðalþjónninn mun hlusta á fyrir tengingar frá viðskiptavinum.

Í þessu tilviki munum við nota * sem þýðir allt.

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

ALTER SYSTEM SET SQL skipunin er öflugur eiginleiki til að breyta stillingarbreytum netþjóns, beint með SQL fyrirspurn. Stillingar eru vistaðar í postgresql.conf.auto skránni sem er staðsett í rót gagnamöppunnar (t.d. /var/lib/pgsql/12/data/) og lesin viðbót við þær sem eru geymdar í postgresql.conf. En stillingar í fyrrnefndu hafa forgang fram yfir þær í síðari og öðrum tengdum skrám.

2. Búðu síðan til afritunarhlutverk sem verður notað fyrir tengingar frá biðþjóni til aðalþjóns með því að nota createuser forritið. Í eftirfarandi skipun, -P fáninn biður um lykilorð fyrir nýja hlutverkið og -e endurómar skipanirnar sem createuser býr til og sendir til gagnagrunnsþjónsins.

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

3. Sláðu síðan inn eftirfarandi færslu í lok /var/lib/pgsql/12/data/pg_hba.conf auðkenningaruppsetningarskrár viðskiptavinar með gagnagrunnsreitinn stilltan á afritun eins og sýnt er á skjámyndinni.

host    replication     replicator      10.20.20.8/24     md5

4. Endurræstu nú Postgres12 þjónustuna með því að nota eftirfarandi systemctl skipun til að beita breytingunum.

# systemctl restart postgresql-12.service

5. Næst, ef þú ert með eldveggsþjónustuna í gangi, þarftu að bæta Postgresql þjónustunni við í eldveggsstillingunni til að leyfa beiðnir frá biðþjóninum til skipstjórans.

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

Skref 2: Gerðu grunnafrit til að ræsa biðþjóninn

6. Næst þarftu að gera grunnafrit af aðalþjóninum frá biðþjóninum; þetta hjálpar til við að ræsa biðþjóninn. Þú þarft að stöðva postgresql 12 þjónustuna á biðþjóninum, skipta yfir í postgres notendareikninginn, taka öryggisafrit af gagnaskránni (/var/lib/pgsql/12/data/), eyða síðan öllu undir henni eins og sýnt er áður en þú tekur grunninn öryggisafrit.

# 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. Notaðu síðan pg_basebackup tólið til að taka grunnafritið með réttu eignarhaldi (gagnagrunnskerfisnotandinn þ.e. Postgres, innan Postgres notendareikningsins) og með réttum heimildum.

Í eftirfarandi skipun, valmöguleikinn:

  • -h – tilgreinir hýsilinn sem er aðalþjónninn.
  • -D – tilgreinir gagnaskrána.
  • -U – tilgreinir notanda tengingarinnar.
  • -P – gerir framvinduskýrslu kleift.
  • -v – virkjar orðlausa stillingu.
  • -R – gerir kleift að búa til endurheimtarstillingar: Býr til standby.signal skrá og bætir tengistillingum við postgresql.auto.conf undir gagnaskránni.
  • -X – notað til að innihalda nauðsynlegar framskráningarskrár (WAL skrár) í öryggisafritinu. Gildi straums þýðir að streyma WAL á meðan öryggisafritið er búið til.
  • -C – gerir kleift að búa til afritunarrauf sem er nefndur af -S valkostinum áður en öryggisafritið er hafið.
  • -S – tilgreinir nafn afritunarraufs.

$ 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. Þegar öryggisafritinu er lokið ætti nýja gagnaskráin á biðþjóninum að líta svona út á skjámyndinni. Standby.signal er búið til og tengistillingunum er bætt við postgresql.auto.conf. Þú getur skráð innihald þess með ls skipuninni.

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

Afritunarþræll mun keyra í \Hot Standby ham ef hot_standby færibreytan er stillt á á (sjálfgefið gildi) í postgresql.conf og það er standby.signal skrá til staðar í gagnaskránni.

9. Nú aftur á aðalþjóninum ættirðu að geta séð afritunarraufina sem heitir pgstandby1 þegar þú opnar pg_replication_slots útsýnið sem hér segir.

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

10. Notaðu cat skipunina til að skoða tengingarstillingarnar sem fylgja með í postgresql.auto.conf skránni.

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

11. Byrjaðu nú venjulega gagnagrunnsaðgerðir á biðþjóninum með því að ræsa PostgreSQL þjónustuna sem hér segir.

# systemctl start postgresql-12

Skref 3: Prófaðu PostgreSQL straumafritun

12. Þegar tenging hefur náðst á milli skipstjóra og biðstöðu muntu sjá WAL móttakaraferli á biðþjóninum með stöðu streymis, þú getur athugað þetta með því að nota pg_stat_wal_receiver útsýnið.

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

og samsvarandi WAL sendandaferli á aðal-/aðalþjóninum með streymisstöðu og samstillingarstöðu ósamstillingar, þú getur athugað þetta pg_stat_replication pg_stat_replication útsýni.

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

Frá skjámyndinni hér að ofan er straumafritunin ósamstillt. Í næsta kafla munum við sýna hvernig á að virkja samstillta afritun.

13. Prófaðu nú hvort afritunin virkar vel með því að búa til prófunargagnagrunn á aðalþjóninum og athugaðu hvort hann sé til í biðþjóninum.
[master]postgres=# BÚA TIL Gagnagrunnur tecmint;
[biðstaða]postgres=# \l

Valfrjálst: Virkja samstillta afritun

14. Samstillt afritun býður upp á getu til að skuldbinda færslu (eða skrifa gögn) í aðalgagnagrunninn og biðstöðu/afrit samtímis. Það staðfestir aðeins að færslu heppnast þegar allar breytingar sem gerðar hafa verið af færslunni hafa verið fluttar á einn eða fleiri samstillta biðþjóna.

Til að virkja samstillta afritun verður synchronous_commit einnig að vera stillt á on (sem er sjálfgefið gildi, þar af leiðandi engin þörf á neinum breytingum) og þú þarft líka að stilla synchronous_standby_names færibreytuna á ekki tómt gildi. Fyrir þessa handbók munum við stilla hana á alla.

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

15. Endurhlaðið síðan PostgreSQL 12 þjónustuna til að beita nýju breytingunum.

# systemctl reload postgresql-12.service

16. Nú þegar þú spyrð í WAL sendandaferlið á aðalþjóninum enn og aftur, ætti það að sýna stöðu streymis og sync_state of sync.

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

Við erum komin að lokum þessa handbókar. Við höfum sýnt hvernig á að setja upp PostgreSQL 12 master-biðstaða straumafritunar gagnagrunns í CentOS 8. Við fórum líka yfir hvernig á að virkja samstillta afritun í PostgreSQL gagnagrunnsþyrping.

Notkun afritunar er margvísleg og þú getur alltaf valið lausn sem uppfyllir upplýsingatækniumhverfið þitt og/eða umsóknarsértækar kröfur. Fyrir frekari upplýsingar, farðu í Log-Shipping biðþjónar í PostgreSQL 12 skjölunum.