Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Maqaalkan waxaan kuu sheegi doonaa sida aan u wajahnay arrinta dulqaadka qaladka ee PostgreSQL, sababta ay muhiim noogu noqotay, iyo wixii dhacay dhamaadkii.

Waxaan haynaa adeeg aad loo raray: 2,5 milyan isticmaaleyaasha adduunka oo dhan, 50K+ isticmaaleyaal firfircoon maalin kasta. Adeegayaashu waxay ku yaalliin Amazone ee hal gobol oo Ireland ah: 100+ server oo kala duwan ayaa si joogto ah u shaqeeya, ku dhawaad ​​​​50 iyaga ka mid ah ayaa leh xog-ururin.

Dhamman dhabarka dambe waa codsi dawladeed weyn oo hal-abuur leh oo Java ah kaas oo ilaalinaya xidhiidhka websocket-ka ee joogtada ah ee macmiilka. Marka dhowr isticmaale ay si isku mar ah u shaqeeyaan isla guddi isku mid ah, dhammaantood waxay arkaan isbeddelada waqtiga dhabta ah, sababtoo ah waxaan ku duubnaa isbeddel kasta oo ku yimaada keydka xogta. Waxaan haynaa ku dhawaad ​​10k codsi ilbiriqsikiiba xogtayada Marka ugu sarreeya ee Redis waxaan ku qornaa 80-100k codsi ilbiriqsikii.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Waa maxay sababta aan uga soo wareegnay Redis una guurnay PostgreSQL

Markii hore, adeeggayagu wuxuu la shaqeeyay Redis, kaydinta qiimaha muhiimka ah ee kaydisa dhammaan xogta RAM-ka ee server-ka.

Faa'iidooyinka Redis:

  1. Xawaaraha sare ee jawaabta, sababtoo ah wax walba waxa lagu kaydiyaa xusuusta;
  2. Ku-celinta iyo ku-noqoshada habboon.

Qasaarooyinka Redis anaga:

  1. Ma jiraan wax kala iibsiga dhabta ah. Waxaan isku daynay inaan ku dayno heerkayaga codsi. Nasiib darro, tani had iyo jeer si fiican uma shaqayn oo waxay u baahnayd qoritaanka kood aad u adag.
  2. Inta xogtu waxa ay ku xaddidan tahay xadiga xusuusta. Marka qadarka xogtu korodho, xasuustu way kori doontaa, iyo, dhamaadka, waxaan ku socon doonaa sifooyinka tusaalaha la doortay, taas oo AWS u baahan joojinta adeeggayaga si loo beddelo nooca tusaale ahaan.
  3. Waa lagama maarmaan in si joogto ah loo ilaaliyo heerka daahitaanka hooseeya, sababtoo ah Waxaan haynaa codsiyo aad u tiro badan. Heerarka daahitaanka ee ugu fiican anaga waa 17-20 ms. Heerka 30-40 ms, waxaanu helnaa jawaabo dheer codsiyadayada codsiga iyo hoos u dhaca adeega. Nasiib darro, tani waxay nagu dhacday Sebtembar 2018, markii mid ka mid ah xaaladaha Redis ee sababa qaar uu helay daahitaan 2 jeer ka sarreeya sidii caadiga ahayd. Si loo xaliyo dhibaatada, waxaanu joojinay adeega badhtamihii maalinta shaqada ee dayactirka aan la qorshayn waxaanu ku bedelnay tusaale ahaan Redis dhibka leh.
  4. Way fududahay in la helo xog aan iswaafaqayn xitaa khaladaad yar yar oo ku jira koodka ka dibna wakhti badan ku bixi qorista koodka si loo hagaajiyo xogtaas.

Waxaan xisaabta ku darnay khasaarooyinka waxaanan ogaannay inaan u baahanahay inaan u dhaqaaqno wax ku habboon, oo leh macaamilo caadi ah iyo ku tiirsanaanta daahitaanka. Waxaan samaynay cilmi-baaris, falanqaynay doorashooyin badan oo aan doorannay PostgreSQL.

Waxaan u guurnay xog cusub muddo 1,5 sano ah waxaanan wareejinnay qayb yar oo ka mid ah xogta, markaa hadda waxaan si isku mid ah ula shaqeyneynaa Redis iyo PostgreSQL. Macluumaad dheeraad ah oo ku saabsan marxaladaha guuritaanka iyo beddelka xogta ee kaydinta macluumaadka ayaa lagu qoray maqaal uu qoray saaxiibkay.

Markii ugu horeysay ee aan dhaqaaqnay, codsigayagu wuxuu si toos ah ula shaqeeyay xogta xogta oo aanu galnay Master Redis iyo PostgreSQL. Kutlada PostgreSQL waxay ka koobnayd sayid iyo nuqul leh ku celcelin aan sinnayn. Tani waa sida socodka shaqadu u ekaatay:
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Fulinta PgBouncer

Intii aan dhaqaaqnay, badeecada ayaa sidoo kale horumarineysay: tirada isticmaaleyaasha iyo tirada adeegayaasha ee la shaqeysa PostgreSQL ayaa kordhay, waxaana bilownay inaan ka baxno isku xirnaanta. PostgreSQL waxay u abuurtaa hannaan gooni ah isku xidh kasta waxayna isticmaashaa agabka. Waxaad kordhin kartaa tirada isku xirka ilaa meel gaar ah, haddii kale waxaa jirta fursad ah in keydka macluumaadka uusan si fiican u shaqeyn doonin. Doorashada ugu habboon ee xaaladdan oo kale waxay noqon doontaa in la doorto maamulaha isku xirka kaas oo hor istaagi doona kaydka.

Waxaan haysanay laba ikhtiyaar oo loogu talagalay maamulaha isku xirka: Pgpool iyo PgBouncer. Laakiin kan ugu horreeya ma taageerayo habka macaamilka ee la shaqeynta xogta, markaa waxaan doorannay PgBouncer.

Waxa aanu habaysanay nidaamka shaqada ee soo socda: Codsigayagu waxa uu gelayaa hal PgBouncer, oo ay ka dambeeyaan sayidyada PostgreSQL, gadaashiisa sayid kastana waxa jira hal nuqul oo leh ku celcelin aan caadi ahayn.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Isla mar ahaantaana, ma kaydin karno dhammaan xogta gudaha PostgreSQL iyo xawaaraha la shaqeynta xogta ayaa muhiim noo ahaa, sidaas darteed waxaan bilownay sharding PostgreSQL heerka codsiga. Nidaamka kor lagu sharraxay ayaa tan ku habboon: marka lagu daro shaar PostgreSQL cusub, way ku filan tahay in la cusboonaysiiyo qaabaynta PgBouncer codsiguna wuxuu isla markiiba la shaqayn karaa shard cusub.

Dulqaadashada Ciladda PgBouncer

Nidaamkani wuxuu shaqeeyay ilaa uu ka dhintay tusaalaha kaliya ee PgBouncer. Waxaan ku jirnaa AWS, halkaas oo dhammaan kiisaska lagu soo bandhigay qalab xilliyada qaar dhinta. Xaaladahan oo kale, tusaale ahaan si fudud ugu guura qalab cusub oo mar kale shaqeeya. Tani waxay ku dhacday PgBouncer, laakiin waxay noqotay mid aan la heli karin. Natiijada shilkan ayaa noqotay in adeegayagu aanu shaqayn 25 daqiiqo. Xaaladahan oo kale, AWS waxay ku talinaysaa isticmaalka dheeraadka ah ee dhinaca isticmaalaha, taas oo aanaan fulin wakhtigaas.

Taas ka dib, waxaan si dhab ah uga fikirnay dulqaadka khaladka ah ee PgBouncer iyo PostgreSQL, sababtoo ah xaalad la mid ah ayaa mar kale ku dhici karta tusaale kasta oo ku jira akoonkeena AWS.

Waxaan u dhisnay nidaamka dulqaadka qaladka ee PgBouncer sida soo socota: dhammaan adeegayaasha codsiyadu waxay galaan Isku-dheelitirka Load Balancer, oo ay ka dambeeyaan laba PgBouncers. Mid kasta oo ka mid ah PgBouncers wuxuu eegayaa isla Master PostgreSQL ee shard kasta. Haddii xaaladda shilka AWS soo noqnoqdo, dhammaan taraafikada waxaa lagu jiheeyaa PgBouncer kale. Dulqaadka qaladka Isku-dheelitirka Isku-xidhka waxaa bixiya AWS.

Nidaamkani wuxuu kuu ogolaanayaa inaad si fudud ugu darto server-yada PgBouncer cusub.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Abuuritaanka Kutlada Fashilka ee PostgreSQL

Markii aan xallinay dhibaatadan, waxaan tixgelinnay doorashooyin kala duwan: is-qorista failure, repmgr, AWS RDS, Patroni.

Qoraallada is-qoritaan

Waxay la socon karaan shaqada sayidkiisa iyo, haddii ay ku guuldareysato, kor u qaadaan nuqulka sayidkiisa oo ay cusbooneysiiyaan qaabeynta PgBouncer.

Faa'iidooyinka habkani waa fududaynta ugu badan, sababtoo ah adiga ayaa qoraya qoraallada oo aad si sax ah u fahmeyso sida ay u shaqeeyaan.

Ogolaansho:

  • Waxaa laga yaabaa in sayidku aanu dhiman, taa beddelkeeda, waxaa jiri kara cillad shabakadeed. Guuldarraysta, oo aan ka warqabin tan, ayaa kor u qaadi doonta nuqulka sayidkii, sayidkii horena wuu sii shaqayn doonaa. Natiijo ahaan, waxaanu heli doonaa laba server oo ku jira doorka sayidkiisa mana ogaan doono midka iyaga ka mid ah ee haysta xogtii ugu dambeysay. Xaaladdan waxaa sidoo kale loo yaqaannaa kala-bax maskaxeed;
  • Wax jawaab ah ayaa naga tagay. Qaabeyntayada waxaa jira sayid iyo hal nuqul, ka dib marka la beddelo nuqulka waxaa loo dalacsiiyay sayidkii oo ma sii haysanno nuqullo, markaa waa inaan gacanta ku darnaa nuqul cusub;
  • Waxaan u baahanahay kormeer dheeri ah oo ku saabsan hawlgalka guuldarreysiga, waxaanan haynaa 12 PostgreSQL shards, taas oo macnaheedu yahay inaan u baahanahay inaan la socono 12 kooxood. Markaad kordhinayso tirada jeexjeexyada, waa inaad sidoo kale xasuusataa inaad cusbooneysiiso fashilka.

Fashilka iskiis u qoran ayaa u muuqda mid aad u adag wuxuuna u baahan yahay taageero aan yarayn. Mid ka mid ah kutlada PostgreSQL, tani waxay noqon doontaa doorashada ugu fudud, laakiin ma cabbirayso, markaa naguma habboona annaga.

Repmr

Maamulaha soo noqnoqda ee kooxaha PostgreSQL, kuwaas oo maareyn kara hawlgalka kooxda PostgreSQL. Isla mar ahaantaana, ma laha guuldarro toos ah oo ka baxsan sanduuqa, markaa si aad u shaqeyso waxaad u baahan doontaa inaad ku qorto "duubka" adiga kuu gaar ah xalka diyaarsan. Markaa wax walbaa way ka sii adkaan karaan marka loo eego qoraallada is-qorista, taas oo ah sababta aan xitaa isku dayin Repmgr.

AWS RDS

Waxay taageertaa wax kasta oo aan u baahanahay, waxay samayn kartaa gurmad waxayna taageertaa barkad isku xidhka. Waxay leedahay beddel toos ah: marka sayidku dhinto, nuqulku wuxuu noqdaa sayid cusub, AWS waxay beddeshaa diiwaanka DNS ee sayid cusub, halka nuquladu ay ku yaalliin AZ kala duwan.

Khasaarooyinka waxaa ka mid ah la'aanta goobaha wanaagsan. Tusaale ahaan hagaajinta wanaagsan: xaaladahayagu waxay leeyihiin xaddidaadyo isku xirka tcp, taas oo, nasiib daro, aan lagu samayn karin RDS:

net.ipv4.tcp_keepalive_time=10
net.ipv4.tcp_keepalive_intvl=1
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_retries2=3

Intaa waxaa dheer, AWS RDS waxay ku dhowdahay labanlaab qaali ah qiimaha caadiga ah, taas oo ahayd sababta ugu weyn ee looga tagayo xalkan.

Batrooni

Kani waa qaab-dhismeedka Python ee lagu maareeyo PostgreSQL oo wata dukumeenti wanaagsan, guuldarraysa toos ah iyo koodhka isha ee github.

Faa'iidooyinka Patroni:

  • Halbeeg kasta oo qaabeynta ayaa lagu tilmaamay, way caddahay sida ay u shaqeyso;
  • Guuldarrooyinka tooska ah ayaa ka shaqeeya meel ka baxsan sanduuqa;
  • Ku qoran Python, iyo maadaama aan nafteena wax badan ku qorno Python, waxay noo fududaan doontaa inaan wax ka qabanno dhibaatooyinka iyo, laga yaabee, xitaa caawinta horumarinta mashruuca;
  • Waxay si buuxda u xakameysaa PostgreSQL, waxay kuu ogolaaneysaa inaad bedesho qaabeynta dhammaan qanjidhada kooxda hal mar, iyo haddii aad codsaneyso qaabeynta cusub waxay u baahan tahay dib u bilaabista kooxda, tan waxaa la samayn karaa mar kale iyadoo la adeegsanayo Patroni.

Ogolaansho:

  • Ma cadda dukumeentiyada sida saxda ah ee loogu shaqeeyo PgBouncer. Inkasta oo ay adag tahay in tan loo yeedho laga jaray, sababtoo ah shaqada Patroni waa in la maareeyo PostgreSQL, iyo sida isku xirka Patroni u shaqeyn doono mar horeba dhibkayaga;
  • Waxaa jira tusaalooyin yar oo ku saabsan hirgelinta Patroni ee miisaannada waaweyn, halka ay jiraan tusaalooyin badan oo hirgelinta laga soo bilaabo eber.

Natiijo ahaan, waxaanu dooranay Patroni si aanu u abuurno koox guuldarraysa.

Hannaanka hirgelinta macaluul

Patroni ka hor, waxaan haysanay 12 PostgreSQL shards oo hal sayid ah iyo hal qaabayn oo nuqul ah oo leh ku celcelin asynchronous ah. Adeegayaasha arjiyada ayaa ka helay xogta macluumaadka iyada oo loo marayo Isku-dheelitirka Load Balancer, oo ay ka dambeeyaan laba xaaladood oo PgBouncer ah, gadaashoodana ay ahaayeen dhammaan adeegayaasha PostgreSQL.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Si loo hirgeliyo Patroni, waxaan u baahanahay inaan doorano kaydinta qaabeynta kooxeed qaybsan. Patroni wuxuu la shaqeeyaa nidaamyada kaydinta qaabeynta qaybsan sida iwm, Zookeeper, Qunsulka. Waxaan leenahay koox qunsuliyadeed oo dhamaystiran oo wax soo saar ah, taas oo la shaqaynaysa Vault oo aan la isticmaalin. Sabab weyn oo lagu bilaabayo isticmaalka Qunsulka ujeeddadii loogu talagalay.

Sida Patroni ula shaqeeyo Qunsulka

Waxaan leenahay koox qunsul ah, oo ka kooban saddex nood, iyo Patroni cluster, kaas oo ka kooban hogaamiye iyo nuqul (Patroni, sayidkii waxaa lagu magacaabaa hogaamiyaha kooxda, iyo addoommada waxaa loo yaqaan replicas). Tusaal kasta oo kutlada Patroni wuxuu si joogto ah u soo diraa macluumaadka ku saabsan xaaladda kooxda Qunsulka. Sidaa darteed, Qunsulka waxaad had iyo jeer ka ogaan kartaa qaabeynta hadda ee kooxda Patroni iyo cidda hoggaamiyaha xilligan.

Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Si aad Patroni ugu xidho Qunsulka, kaliya baro dukumentiga rasmiga ah, kaas oo sheegaya inaad u baahan tahay inaad ku qeexdo martigeliyaha qaabka http ama https, iyadoo ku xidhan sida aanu ula shaqayno Qunsulka, iyo jaantuska xidhiidhka, ikhtiyaar ahaan:

host: the host:port for the Consul endpoint, in format: http(s)://host:port
scheme: (optional) http or https, defaults to http

Waxay u egtahay mid fudud, laakiin tani waa meesha ay ka bilaabmaan dabinnada. Qunsulka waxaanu kula shaqaynaa xidhiidh sugan anagoo adeegsanayna https oo isku xidhkayagu wuxuu u ekaan doonaa sidan:

consul:
  host: https://server.production.consul:8080 
  verify: true
  cacert: {{ consul_cacert }}
  cert: {{ consul_cert }}
  key: {{ consul_key }}

Laakiin sidaas uma shaqeyso. Bilawga, Patroni kuma xidhi karo Qunsulka sababtoo ah wali waxay isku daydaa inay dhex gasho http.

Koodhka isha Patroni ayaa ka caawiyay xallinta dhibaatada. Way fiicantahay in lagu qoro Python. Waxay soo baxday in cabbirka martigeliyaha aan sinaba loo kala saarin, borotokoolka waa in lagu qeexaa nidaamka. Tani waa waxa qaabaynta shaqada ee la shaqaynta Qunsulka ay noogu egtahay:

consul:
  host: server.production.consul:8080
  scheme: https
  verify: true
  cacert: {{ consul_cacert }}
  cert: {{ consul_cert }}
  key: {{ consul_key }}

Qunsulka-Template

Markaa, waxaanu dooranay kaydinta qaabaynta. Hadda waxaan u baahanahay inaan fahanno sida PgBouncer u bedeli doono qaabeynteeda marka hogaamiyaha uu isbedelo kooxda Patroni. Su'aashan wax jawaab ah lagama hayo dukumeentiga, sababtoo ah... Mabda 'ahaan, la shaqeynta PgBouncer laguma qeexin halkaas.

Raadinta xalka, waxaan helnay maqaal (nasiib darro, ma xasuusto magaca), halkaas oo lagu qoray in Consul-template uu aad u caawiyay isku darka PgBouncer iyo Patroni. Tani waxay nagu kalliftay inaan barano shaqada Qunsulka-template.

Waxaa soo baxday in Qunsulka-template-ku uu si joogto ah ula socdo qaabaynta kooxda PostgreSQL ee Qunsulka. Marka hoggaamiyuhu isbeddelo, wuxuu cusbooneysiiyaa qaabeynta PgBouncer wuxuuna soo diraa amar si uu dib ugu soo dejiyo.

Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Faa'iidada ugu weyn ee template waa in loo kaydiyo sida koodka, markaa markaad ku darayso shard cusub, waa ku filan inaad sameyso ballan cusub oo aad si toos ah u cusbooneysiiso template, taageeridda Kaabayaasha sida mabda'a code.

Naqshad cusub oo leh Patroni

Natiijo ahaan, waxaanu helnay nidaamka shaqada ee soo socda:
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Dhammaan adeegayaasha arjiga waxay galaan dheelitirka → gadaashiisa waxaa jira laba xaaladood oo PgBouncer → tusaale kasta oo Qunsul-template ah ayaa socda, kaas oo kormeeraya xaaladda koox kasta oo Patroni ah oo kormeeraya ku habboonaanta isku xirka PgBouncer, kaas oo hagaya codsiyada hoggaamiyaha hadda jira. koox kasta.

Tijaabada gacanta

Ka hor inta aan la bilaabin wax soo saarka, waxaan ku bilownay nidaamkan jawi tijaabo oo yar oo aan hubinay shaqada beddelka tooska ah. Waxay fureen sabuuraddii, dhaqaajiyeen stickerkii waxayna isla markaas "dileen" hoggaamiyihii kooxda. Gudaha AWS, waxa kaliya ee aad u baahan tahay inaad sameyso waa inaad damiso tusaale ahaan console-ka.

Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Istiikarku wuxuu ku soo noqday 10-20 ilbiriqsi gudahood, ka dibna wuxuu bilaabay inuu si caadi ah mar kale u dhaqaaqo. Tani waxay ka dhigan tahay in kooxda Patroni ay si sax ah u shaqeysay: waxay bedeshay hogaamiyaha, waxay u dirtay macluumaadka Qunsulka, Qunsuliyada-template waxay isla markiiba soo qaadatay macluumaadkan, waxay bedeshay qaabeynta PgBouncer waxayna u dirtay amar si dib loogu soo celiyo.

Sida loo noolaado iyadoo lagu hoos jiro culeys sare oo loo ilaaliyo wakhtiga dhimista ee ugu yar?

Wax walba waxay u shaqeeyaan si qumman! Laakiin su'aalo cusub ayaa soo baxaya: Sidee ayay u shaqeyn doontaa culeys sare? Sidee si degdeg ah oo badbaado leh loogu rogaa wax kasta oo ku jira wax soo saarka?

Deegaanka tijaabada ah ee aanu ku samaynayno tijaabinta culayska ayaa naga caawinaysa ka jawaabista su'aasha koowaad. Waxay gebi ahaanba la mid tahay wax-soo-saarka qaab-dhismeedka waxayna soo saartay xog tijaabo ah, taasoo qiyaas ahaan le'eg mugga iyo wax-soosaarka. Waxaan go'aansanay inaan "dilo" mid ka mid ah sayidyada PostgreSQL inta lagu jiro imtixaanka oo aan aragno waxa dhaca. Laakiin ka hor, waxaa muhiim ah in la hubiyo soo-bandhigista tooska ah, sababtoo ah deegaankan waxaan leenahay dhowr PostgreSQL shards, markaa waxaan heli doonaa imtixaan aad u fiican oo ah qoraallada qaabeynta ka hor wax soo saarka.

Labada hawloodba waxay u muuqdaan kuwo hami leh, laakiin waxaan haynaa PostgreSQL 9.6. Ma laga yaabaa inaan isla markaaba u cusboonaysiin karno 11.2?

Waxaan go'aansanay inaan tan ku sameyno 2 marxaladood: marka hore cusbooneysii nooca 11.2, ka dibna bilow Patroni.

Cusboonaysiinta PostgreSQL

Si aad dhaqso u cusbooneysiiso nooca PostgreSQL, waa inaad isticmaashaa ikhtiyaarka -k, kaas oo xiriir adag uu ku abuuray saxanka oo aan loo baahnayn in la koobiyeeyo xogtaada. Xogta xogta ee 300-400 GB, cusbooneysiinta waxay qaadataa 1 ilbiriqsi.

Waxaan haynaa jajabyo badan, markaa cusboonaysiinta waxay u baahan tahay in si toos ah loo sameeyo. Si aan tan u samayno, waxaanu qornay buug-ciyaareed macquul ah kaas oo noo qabanaya dhammaan habka cusboonaysiinta annaga:

/usr/lib/postgresql/11/bin/pg_upgrade 
<b>--link </b>
--old-datadir='' --new-datadir='' 
 --old-bindir=''  --new-bindir='' 
 --old-options=' -c config_file=' 
 --new-options=' -c config_file='

Waxaa muhiim ah in la ogaado in ka hor inta aanad bilaabin casriyeynta, waa inaad ku qabataa qiyaasta --hubisi loo hubiyo in casriyaynta ay suurtogal tahay. Qoraalkeena sidoo kale wuxuu bedelayaa habaynta inta lagu jiro casriyeynta. Qoraalkayagu wuxuu ku dhammaaday 30 ilbiriqsi, taas oo ah natiijo aad u fiican.

Furitaanka Patroni

Si loo xalliyo dhibaatada labaad, kaliya fiiri habka Patroni. Kaydka rasmiga ah wuxuu leeyahay qaabayn tusaale ah oo leh initdb, kaas oo mas'uul ka ah bilaabista xog-ururin cusub marka Patroni marka ugu horeysa la bilaabo. Laakiin maadaama aanu hore u haysanay xog-ururin diyaarsan, waxaanu si fudud uga saarnay qaybtan qaabaynta.

Markii aan bilownay in aan ku rakibno Patroni koox diyaarsan oo PostgreSQL ah oo aan bilownay, waxaan la kulannay dhibaato cusub: labada server waxaa loo bilaabay hogaamiye. Patroni waxba kama garanayo xaaladda hore ee kooxda wuxuuna isku dayaa inuu u maamulo labada adeegayaasha sidii laba koox oo kala duwan oo isku magac ah. Si loo xalliyo dhibaatadan, waxaad u baahan tahay inaad tirtirto hagaha xogta ee addoonka:

rm -rf /var/lib/postgresql/

Tani waa in lagu sameeyaa kaliya addoonka!

Marka la isku xidho nuqul nadiif ah, Patroni wuxuu sameeyaa hogaamiye dib-u-celin ah oo dib ugu soo celiyaa nuqulka, ka dibna la qabsado xaaladda hadda jirta isagoo isticmaalaya wal logs.

Dhibaato kale oo aan la kulannay ayaa ah in dhammaan kutlooyinka PostgreSQL loogu yeero ugu weyn. Marka koox kastaa aysan waxba ka ogeyn tan kale, tani waa caadi. Laakiin marka aad rabto inaad isticmaasho Patroni, dhammaan kooxaha waa inay lahaadaan magac gaar ah. Xalku waa in la beddelo magaca kooxda ee qaabeynta PostgreSQL.

Imtixaanka culeyska

Waxaan bilownay imtixaan u ekaysiinaya sida isticmaalayaashu ugu shaqeeyaan sabuuradaha. Markii culaysku gaadhay celceliskayaga maalinlaha ah, waxaanu ku celinay isla imtixaankii saxda ahaa, waxaanu ku daminay hal tusaale hogaamiye PostgreSQL. Fashilka tooska ah wuxuu u shaqeeyay sidii aan filaynay: Patroni wuxuu bedelay hogaamiyaha, Consul-template wuxuu cusboonaysiiyay qaabaynta PgBouncer wuxuuna u diray amar si uu dib ugu soo dejiyo. Marka loo eego garaafyadayada Grafana, way caddaatay in ay jiraan dib u dhac 20-30 ilbiriqsi ah iyo qadar yar oo khaladaad ah oo ka yimid server-yada la xidhiidha isku xirka xogta. Tani waa xaalad caadi ah, qiyamka noocan oo kale ah waa la aqbali karaa guuldarrooyinkayaga oo hubaal way ka fiican yihiin wakhtiga adeegga.

Soo saarista Patroni wax soo saarka

Natiijo ahaan, waxaan la nimid qorshahan:

  • Geli Consul-template server-ka PgBouncer oo bilow;
  • Dib u cusboonaysiinta PostgreSQL ee nooca 11.2;
  • Beddelidda magaca kooxda;
  • Daahfurka kooxda Patroni

Isla mar ahaantaana, nidaamkayagu wuxuu noo ogolaanayaa inaan samayno meesha ugu horeysa wakhti kasta; waxaan ka saari karnaa PgBouncer kasta shaqada mid mid waxaanan samayn karnaa geyn iyo bilaabida qunsulka-template. Taasi waa waxa aanu samaynay.

Tijaabada degdega ah, waxaanu isticmaalnay macquul, maadaama aanu horeba u tijaabinay buugga ciyaarta oo dhan jawi tijaabo ah, wakhtiga fulinta qoraalka buuxana waxa uu ahaa 1,5 ilaa 2 daqiiqo jeex kasta. Wax kasta waxaan u rogi karnaa mid mid jeex kasta anagoo joojinayn adeegeena, laakiin waa inaan daminaa PostgreSQL kasta dhowr daqiiqo. Xaaladdan oo kale, isticmaalayaasha xogtoodu ay ku jirto jeexan ma awoodi doonaan inay si buuxda u shaqeeyaan wakhtigan, tanina waa wax aan la aqbali karin annaga.

Habka looga baxo xaaladdan ayaa ahaa dayactir qorshaysan, kaas oo aan samayno 3dii biloodba mar. Tani waa daaqada shaqada loo qorsheeyay, marka aan si buuxda u damino adeegeena oo aan cusbooneysiinno tusaalooyinka xogta. Hal usbuuc ayaa ka haray ilaa daaqada xigta, waxaana go'aansanay inaan sugno oo aan sii diyaargarowno. Inta lagu jiro sugidda, waxaan sidoo kale xirnay khamaarkeenna: mid kasta oo PostgreSQL ah waxaan kor u qaadnay nuqul dheeri ah haddii ay dhacdo guuldarro, si loo badbaadiyo xogtii ugu dambeysay, oo aan ku darnay tusaale cusub oo shard kasta ah, kaas oo noqon doona nuqul cusub Patroni kooxdu, si aanay u soo saarin amar lagu tirtirayo xogta . Waxaas oo dhami waxay gacan ka geysteen in la yareeyo khatarta khaladka.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Waxaan dib u bilownay adeegeena, wax walbaa waxay u shaqeeyeen sidii la rabay, isticmaalayaashu waxay sii wadeen shaqada, laakiin garaafyada waxaan ku aragnay culeys aan caadi ahayn oo sarreeya server-yada Qunsulka.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Maxaan tan ugu arki weynay deegaanka imtixaanka? Dhibaatadani waxay si fiican u muujinaysaa inay lagama maarmaan tahay in la raaco Kaabayaasha sida mabda'a xeer-hoosaadka iyo hagaajinta dhammaan kaabayaasha, laga bilaabo jawiga tijaabada ilaa wax soo saarka. Haddii kale, aad bay u fududahay in la helo dhibaatada ina haysata. Maxaa dhacay? Qunsulka markii hore wuxuu ka soo muuqday wax soo saarka, ka dibna jawi tijaabo ah, natiijadu, jawiga tijaabada nooca Qunsulka ayaa ka sarreeyay wax soo saarka. Kaliya mid ka mid ah siidaynta, daadinta CPU markii la shaqaynaysay qaab-dhismeedka qunsulka ayaa la xaliyay. Markaa waxaan si fudud u cusbooneysiinay Qunsulka, sidaas darteed xallinta dhibaatada.

Dib u bilow kooxda Patroni

Si kastaba ha ahaatee, waxaan helnay dhibaato cusub oo aynaan xitaa ka shakin. Marka la cusboonaysiinayo Qunsulka, waxaan si fudud uga saareynaa noodhka Qunsulka kooxda anagoo adeegsanayna amarka fasaxa qunsulka → Patroni wuxuu ku xiraa server-ka Qunsulka → wax walba waa shaqeeyaa. Laakiin markii aan gaadhnay tusaalihii ugu dambeeyay ee kooxda Qunsulka oo aan u dirnay amarka fasaxa qunsulka, dhammaan kooxaha Patroni ayaa si fudud dib u bilaabay, iyo diiwaannada waxaan ku aragnay qaladka soo socda:

ERROR: get_cluster
Traceback (most recent call last):
...
RetryFailedError: 'Exceeded retry deadline'
ERROR: Error communicating with DCS
<b>LOG: database system is shut down</b>

Kooxda Patroni way awoodi wayday inay hesho macluumaadka ku saabsan kooxdeeda oo dib ayay u bilowday.

Si aan xal u helno, waxaan la xiriirnay qorayaasha Patroni anagoo adeegsanayna arrin ku saabsan github. Waxay soo jeediyeen hagaajinta qaabeynta faylashayada:

consul:
 consul.checks: []
bootstrap:
 dcs:
   retry_timeout: 8

Waxaan awoodnay inaan ku celino arrinta jawi tijaabo ah oo aan ku tijaabinay goobahan halkaas, laakiin nasiib darro ma aysan shaqeyn.

Dhibaatadu wali waa mid aan la xalin. Waxaan qorsheyneynaa inaan isku dayno xalalka soo socda:

  • U isticmaal wakiilka qunsulka tusaale kasta oo ka mid ah kooxda Patroni;
  • Ku hagaaji dhibaatada koodka.

Waan fahamsanahay halka uu khaladku ka dhacay: malaha dhibaatadu waxay ku jirtaa adeegsiga wakhtiga kama-dambaysta ah, kaas oo aan lagu xad-gudbin faylka qaabeynta. Marka server-kii ugu dambeeyay ee Qunsulka laga saaro kooxda, dhammaan kooxda Qunsuliyada way barafoobaan, taas oo soconaysa in ka badan ilbiriqsi; Sababtan awgeed, Patroni ma heli karo xaaladda kooxda oo si buuxda ayuu dib u bilaabayaa kooxda oo dhan.

Nasiib wanaag, wax khaladaad ah ma aannu la kulmin.

Natiijooyinka isticmaalka Patroni

Ka dib markii si guul leh loo bilaabay Patroni, waxaan ku darnay nuqul dheeri ah koox kasta. Hadda koox kastaa waxay leedahay u eeg kooram: hal hoggaamiye iyo laba nuqul, si ay uga ilaaliso kala-go'a maskaxda marka la beddelanayo.
Kooxda fashilantay PostgreSQL + Patroni. Waayo-aragnimada fulinta

Patroni waxa uu ka shaqaynayay wax soo saarka in ka badan saddex bilood. Inta lagu jiro wakhtigan, wuxuu mar hore u suurtagashay inuu naga caawiyo. Dhowaan, hogaamiyaha mid ka mid ah kooxaha ayaa ku dhintay AWS, fashilka tooska ah ayaa shaqeeyay isticmaalayaashuna way sii wadeen shaqada. Patroni wuu gutay hawshiisa ugu weyn.

Soo koobid gaaban ee isticmaalka Patroni:

  • Fududeynta isbeddellada qaabeynta Way ku filan tahay inaad beddesho qaabaynta hal tusaale waxayna khusaysaa kooxda oo dhan. Haddii dib-u-kicin loo baahan yahay si loo isticmaalo qaabeynta cusub, Patroni ayaa ku ogeysiin doona tan. Patroni wuxuu dib ugu bilaabi karaa kooxda oo dhan hal amar, kaas oo sidoo kale aad u habboon.
  • Fashilka tooska ah ayaa shaqaynaya oo mar hore naga caawiyay.
  • Cusbooneysiinta PostgreSQL iyada oo aan la helin wakhtiga codsiga. Waa inaad marka hore u cusboonaysiisaa nuqulada nooca cusub, dabadeed bedesho hogaamiyaha kooxda Patroni oo aad cusboonaysiiso hogaamiyihii hore. Xaaladdan oo kale, baaritaanka lagama maarmaanka ah ee fashilka tooska ah ayaa dhacaya.

Source: www.habr.com

Add a comment