Jinsi ya Kusanidi Urudiaji wa Utiririshaji wa PostgreSQL 12 katika CentOS 8


Hifadhidata ya PostgreSQL inasaidia suluhu kadhaa za urudufishaji ili kujenga upatikanaji wa hali ya juu, utumizi mbaya, ustahimilivu wa makosa, mojawapo ni Usafirishaji wa Andika-Ahead Log (WAL). Suluhisho hili huruhusu seva ya kusubiri kutekelezwa kwa usafirishaji wa kumbukumbu kulingana na faili au urudufishaji wa utiririshaji, au inapowezekana, mchanganyiko wa mbinu zote mbili.

Kwa urudufishaji wa utiririshaji, seva ya hifadhidata ya kusubiri (replication slave) imesanidiwa ili kuunganishwa na seva kuu/msingi, ambayo hutiririsha rekodi za WAL hadi hali ya kusubiri zinapotengenezwa, bila kusubiri faili ya WAL kujazwa.

Kwa chaguo-msingi, urudiaji wa utiririshaji haufanani ambapo data huandikwa kwa seva ya kusubiri baada ya muamala kufanywa kwenye seva msingi. Hii ina maana kwamba kuna ucheleweshaji mdogo kati ya kufanya muamala katika seva kuu na mabadiliko kuonekana kwenye seva ya kusubiri. Upande mmoja wa mbinu hii ni kwamba ikiwa seva kuu itaacha kufanya kazi, miamala yoyote ambayo haijatekelezwa haiwezi kuigwa na hii inaweza kusababisha upotezaji wa data.

Mwongozo huu unaonyesha jinsi ya kusanidi urudiaji wa mtiririko wa kusubiri wa Postgresql 12 kwenye CentOS 8. Tutatumia \nafasi za kurudia kwa hali ya kusubiri kama suluhu la kuepuka seva kuu kutokana na kuchakata sehemu za WAL za zamani kabla ya hali ya kusubiri kuzipokea.

Kumbuka kuwa ikilinganishwa na mbinu zingine, nafasi za urudufishaji huhifadhi tu idadi ya sehemu zinazojulikana kuhitajika.

Mwongozo huu unadhania kuwa umeunganishwa kwa hifadhidata kuu yako na seva za kusubiri kama mzizi kupitia SSH (tumia amri ya Sudo inapohitajika ikiwa umeunganishwa kama mtumiaji wa kawaida na haki za utawala):

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

Seva zote mbili za hifadhidata lazima ziwe na Postgresql 12 iliyosakinishwa, vinginevyo, tazama: Jinsi ya Kusakinisha PostgreSQL na pgAdmin katika CentOS 8.

Kumbuka: PostgreSQL 12 inakuja na mabadiliko makubwa ya utekelezaji na usanidi wa urudufishaji kama vile uingizwaji wa recovery.conf na ubadilishaji wa vigezo vya recovery.conf hadi vigezo vya kawaida vya usanidi wa PostgreSQL, na kuifanya iwe rahisi zaidi kusanidi urudufishaji wa nguzo.

Hatua ya 1: Kusanidi Seva ya Hifadhidata ya Mwalimu/Msingi ya PostgreSQL

1. Kwenye seva kuu, badilisha hadi akaunti ya mfumo wa postgres na usanidi anwani ya IP ambayo seva kuu itasikiliza kwa miunganisho kutoka kwa wateja.

Katika hali hii, tutatumia * kumaanisha yote.

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

Amri ya ALTER SYSTEM SET SQL ni kipengele chenye nguvu cha kubadilisha vigezo vya usanidi wa seva, moja kwa moja kwa hoja ya SQL. Mipangilio huhifadhiwa katika faili ya postgresql.conf.auto iliyo kwenye mzizi wa folda ya data (k.m /var/lib/pgsql/12/data/) na kusomeka nyongeza kwa zile zilizohifadhiwa katika postgresql.conf. Lakini usanidi katika ya awali huchukua nafasi ya kwanza juu ya zile za baadaye na faili zingine zinazohusiana.

2. Kisha unda jukumu la kurudia ambalo litatumika kwa miunganisho kutoka kwa seva ya kusubiri hadi seva kuu, kwa kutumia programu ya uundaji. Katika amri ifuatayo, alama ya -P inaomba nenosiri kwa jukumu jipya na -e inarejelea amri ambazo mtengenezaji hutengeneza na kutuma kwa seva ya hifadhidata.

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

3. Kisha ingiza ingizo lifuatalo mwishoni mwa /var/lib/pgsql/12/data/pg_hba.conf faili ya uthibitishaji ya uthibitishaji wa mteja na uga wa hifadhidata umewekwa kwa urudufishaji kama inavyoonyeshwa kwenye picha ya skrini.

host    replication     replicator      10.20.20.8/24     md5

4. Sasa anzisha upya huduma ya Postgres12 kwa kutumia amri ya systemctl ifuatayo ili kutumia mabadiliko.

# systemctl restart postgresql-12.service

5. Kisha, ikiwa una huduma ya firewalld inayofanya kazi, unahitaji kuongeza huduma ya Postgresql katika usanidi wa firewalld ili kuruhusu maombi kutoka kwa seva ya kusubiri hadi kwa bwana.

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

Hatua ya 2: Kutengeneza Hifadhi Nakala ya Msingi ili Kufunga Seva ya Kudumu

6. Kisha, unahitaji kufanya hifadhi ya msingi ya seva kuu kutoka kwa seva ya kusubiri; hii inasaidia kusanidi seva ya kusubiri. Unahitaji kusimamisha huduma ya postgresql 12 kwenye seva ya kusubiri, badilisha hadi akaunti ya mtumiaji wa postgres, chelezo saraka ya data (/var/lib/pgsql/12/data/), kisha ufute kila kitu chini yake kama inavyoonyeshwa, kabla ya kuchukua msingi. chelezo.

# 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. Kisha utumie zana ya pg_basebackup kuchukua chelezo msingi na umiliki sahihi (mtumiaji wa mfumo wa hifadhidata yaani Postgres, ndani ya akaunti ya mtumiaji ya Postgres) na kwa ruhusa zinazofaa.

Katika amri ifuatayo, chaguo:

  • -h - hubainisha seva pangishi ambayo ni seva kuu.
  • -D - hubainisha saraka ya data.
  • -U - hubainisha mtumiaji wa muunganisho.
  • -P - huwezesha kuripoti maendeleo.
  • -v - huwasha hali ya kitenzi.
  • -R - huwezesha uundaji wa usanidi wa urejeshaji: Huunda faili ya standby.signal na kuambatisha mipangilio ya muunganisho kwa postgresql.auto.conf chini ya saraka ya data.
  • -X - hutumika kujumuisha faili za kumbukumbu za kuandika-mbele (faili za WAL) kwenye hifadhi rudufu. Thamani ya mtiririko ina maana ya kutiririsha WAL wakati hifadhi rudufu inaundwa.
  • -C - huwezesha uundaji wa nafasi ya kunakili iliyotajwa kwa chaguo la -S kabla ya kuanza kuhifadhi nakala.
  • -S - hubainisha jina la nafasi ya urudufishaji.

$ 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. Mchakato wa kuhifadhi nakala unapofanywa, saraka mpya ya data kwenye seva ya kusubiri inapaswa kuonekana kama hiyo kwenye picha ya skrini. Standby.signal imeundwa na mipangilio ya muunganisho inaambatishwa kwa postgresql.auto.conf. Unaweza kuorodhesha yaliyomo kwa kutumia ls amri.

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

Kitumwa cha urudufishaji kitaendesha katika hali ya \Kusubiri Moto ikiwa kigezo cha hot_standby kimewekwa kuwasha (thamani chaguo-msingi) katika postgresql.conf na kuna faili ya standby.signal iliyopo kwenye saraka ya data.

9. Sasa umerudi kwenye seva kuu, unapaswa kuwa na uwezo wa kuona nafasi ya kunakili inayoitwa pgstandby1 unapofungua mwonekano wa pg_replication_slots kama ifuatavyo.

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

10. Kuangalia mipangilio ya uunganisho iliyoongezwa kwenye faili ya postgresql.auto.conf, tumia paka amri.

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

11. Sasa anza shughuli za kawaida za hifadhidata kwenye seva ya kusubiri kwa kuanzisha huduma ya PostgreSQL kama ifuatavyo.

# systemctl start postgresql-12

Hatua ya 3: Kujaribu Urudiaji wa Utiririshaji wa PostgreSQL

12. Pindi tu muunganisho unapoanzishwa kwa mafanikio kati ya kidhibiti na kisubiri, utaona mchakato wa kipokezi cha WAL kwenye seva ya kusubiri iliyo na hali ya utiririshaji, unaweza kuangalia hili kwa kutumia mwonekano wa pg_stat_wal_receiver.

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

na mchakato unaolingana wa mtumaji wa WAL katika seva kuu/msingi yenye hali ya utiririshaji na hali_ya usawazishaji, unaweza kuangalia mwonekano huu wa pg_stat_replication pg_stat_replication.

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

Kutoka kwa picha ya skrini hapo juu, urudufishaji wa utiririshaji haufanani. Katika sehemu inayofuata, tutaonyesha jinsi ya kuwezesha kwa hiari urudufishaji wa usawazishaji.

13. Sasa jaribu ikiwa urudufishaji unafanya kazi vizuri kwa kuunda hifadhidata ya majaribio katika seva kuu na uangalie ikiwa iko kwenye seva ya kusubiri.
[master]postgres=# CREATE DATABASE tecmint;
[standby]postgres=# \l

Hiari: Kuwasha Urudiaji Upatanishi

14. Urudufishaji wa Kilandanishi hutoa uwezo wa kufanya muamala (au kuandika data) kwa hifadhidata msingi na hali ya kusubiri/nakili kwa wakati mmoja. Inathibitisha tu kwamba muamala umefaulu wakati mabadiliko yote yaliyofanywa na muamala yamehamishiwa kwa seva moja au zaidi zinazolingana.

Ili kuwezesha urudufishaji linganishi, synchronous_commit lazima pia iwashwe (ambayo ndiyo thamani chaguo-msingi, kwa hivyo hakuna haja ya mabadiliko yoyote) na unahitaji pia kuweka kigezo cha synchronous_standby_names kwa thamani isiyo tupu. Kwa mwongozo huu, tutaiweka kwa wote.

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

15. Kisha pakia upya huduma ya PostgreSQL 12 ili kutumia mabadiliko mapya.

# systemctl reload postgresql-12.service

16. Sasa unapoulizia mchakato wa mtumaji wa WAL kwenye seva ya msingi kwa mara nyingine tena, inapaswa kuonyesha hali ya utiririshaji na hali_ya usawazishaji.

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

Tumefika mwisho wa mwongozo huu. Tumeonyesha jinsi ya kusanidi urudiaji wa utiririshaji wa hifadhidata mkuu 12 katika CentOS 8. Pia tulishughulikia jinsi ya kuwezesha urudiaji linganishi katika kundi la hifadhidata la PostgreSQL.

Kuna matumizi mengi ya urudufishaji na unaweza kuchagua suluhu linalokidhi mazingira yako ya TEHAMA na/au mahitaji mahususi ya programu. Kwa maelezo zaidi, nenda kwa Seva za Kusimamia Usafirishaji-Kumbukumbu kwenye hati za PostgreSQL 12.