Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Sehloohong seo ke tla u bolella hore na re ile ra atamela joang taba ea PostgreSQL ea ho mamella liphoso, hore na ke hobane'ng ha e ile ea e-ba ea bohlokoa ho rona le se ileng sa etsahala qetellong.

Re na le ts'ebeletso e laetsoeng haholo: basebelisi ba limilione tse 2,5 lefatšeng ka bophara, basebelisi ba mafolofolo ba 50K+ letsatsi le letsatsi. Li-server li fumaneha Amazone sebakeng se le seng sa Ireland: 100+ li-server tse fapaneng li lula li sebetsa, tseo tse ka bang 50 tsa tsona li nang le li-database.

Karolo e ka morao ke sesebelisoa se seholo sa Java sa monolithic se bolokang khokahano ea kamehla ea websocket le moreki. Ha basebelisi ba 'maloa ba sebetsa ka boto e le' ngoe ka nako e le 'ngoe, kaofela ba bona liphetoho ka nako ea sebele, hobane re ngola phetoho e' ngoe le e 'ngoe ho database. Re na le likopo tse ka bang 10K motsotsoana ho database tsa rona. Ha re le tlhōrōng ea Redis, re ngola likopo tsa 80-100K motsotsoana.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Hobaneng re tlohile ho Redis ho ea PostgreSQL

Qalong, tšebeletso ea rona e ne e sebetsa le Redis, lebenkele la bohlokoa la bohlokoa le bolokang lintlha tsohle ho RAM ea seva.

Melemo ea Redis:

  1. Lebelo le phahameng la karabo, hobane ntho e 'ngoe le e' ngoe e bolokiloe mohopolong;
  2. Bonolo ba ho boloka le ho pheta-pheta.

Mathata a Redis bakeng sa rona:

  1. Ha ho na litšebelisano tsa 'nete. Re ile ra leka ho li etsisa boemong ba kopo ea rona. Ka bomalimabe, sena ha se kamehla se sebetsang hantle mme se hloka ho ngola khoutu e rarahaneng haholo.
  2. Bongata ba data bo lekantsoe ke boholo ba memori. Ha palo ea data e ntse e eketseha, mohopolo o tla hola, 'me, qetellong, re tla kena ho litšobotsi tsa mohlala o khethiloeng, oo ho AWS o hlokang ho emisa tšebeletso ea rona ho fetola mofuta oa mohlala.
  3. Hoa hlokahala ho lula u boloka boemo bo tlaase ba latency, hobane. re na le palo e kholo haholo ea likopo. Boemo bo nepahetseng ba ho lieha ho rona ke 17-20 ms. Boemong ba 30-40 ms, re fumana likarabo tse telele tsa likopo ho tsoa ho kopo ea rona le ho theoloa ha litšebeletso. Ka bomalimabe, sena se ile sa re etsahalla ka September 2018, ha e 'ngoe ea liketsahalo tse nang le Redis ka lebaka le itseng e fumana latency makhetlo a 2 ho feta tloaelo. Ho rarolla bothata, re ile ra emisa ts'ebeletso har'a mots'eare bakeng sa tokiso e sa reroang mme ra nkela sebaka sa mathata sa Redis.
  4. Ho bonolo ho fumana ho se lumellane ha data esita le ka liphoso tse nyenyane ka khoutu ebe o qeta nako e ngata o ngola khoutu ho lokisa lintlha tsena.

Re ile ra nahanela mathata 'me ra hlokomela hore re lokela ho fallela nthong e bonolo haholoanyane, ka litšebelisano tse tloaelehileng le ho se itšetlehe haholo ka latency. E entsoe lipatlisiso, e hlahlobile likhetho tse ngata mme ea khetha PostgreSQL.

Re 'nile ra fallela polokelong e ncha ka lilemo tse 1,5 'me re tsamaisitse karolo e nyenyane feela ea data, kahoo hona joale re sebetsa ka nako e le' ngoe le Redis le PostgreSQL. Lintlha tse ling mabapi le mekhahlelo ea ho tsamaisa le ho fetola data lipakeng tsa li-database li ngotsoe ho sengoloa sa mosebetsi-'moho le 'na.

Ha re qala ho falla, kopo ea rona e ile ea sebetsa ka kotloloho le database mme ea fihlella master Redis le PostgreSQL. Sehlopha sa PostgreSQL se ne se e-na le master le replica e nang le phetisetso ea asynchronous. Ena ke tsela eo morero oa database o neng o shebahala ka eona:
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Ho kenya tshebetsong PgBouncer

Ha re ntse re falla, sehlahisoa se ne se ntse se tsoela pele: palo ea basebelisi le palo ea li-server tse sebetsang le PostgreSQL e ile ea eketseha, 'me ra qala ho hloka likhokahano. PostgreSQL e theha ts'ebetso e arohaneng bakeng sa khokahano ka 'ngoe mme e sebelisa lisebelisoa. O ka eketsa palo ea likhokahano ho fihlela ntlheng e itseng, ho seng joalo ho na le monyetla oa ho fumana ts'ebetso e tlase ea database. Khetho e nepahetseng boemong bo joalo e ka ba ho khetha mookameli oa khokahanyo ea tla ema ka pel'a setsi.

Re ne re e-na le likhetho tse peli bakeng sa mookameli oa khokahano: Pgpool le PgBouncer. Empa ea pele ha e tšehetse mokhoa oa ho sebetsa le database, kahoo re khethile PgBouncer.

Re thehile leano le latelang la mosebetsi: kopo ea rona e fihlella PgBouncer e le 'ngoe, ka mor'a eona ho na le masters a PostgreSQL,' me ka mor'a mong'a e mong ho na le setšoantšo se le seng se nang le phetisetso e sa tšoaneng.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Ka nako e ts'oanang, re ne re sitoa ho boloka palo eohle ea data ho PostgreSQL mme lebelo la ho sebetsa le database le ne le le bohlokoa ho rona, kahoo re ile ra qala ho sharding PostgreSQL boemong ba kopo. Morero o hlalositsoeng ka holimo o batla o le bonolo bakeng sa sena: ha o eketsa shard e ncha ea PostgreSQL, ho lekane ho ntlafatsa tlhophiso ea PgBouncer mme kopo e ka sebetsa hang-hang ka shard e ncha.

PgBouncer e hloleha

Morero ona o ile oa sebetsa ho fihlela motsotso oa ha mohlala o le mong oa PgBouncer o hlokahala. Re ho AWS, moo maemo ohle a sebetsang ho hardware e shoang nako le nako. Maemong a joalo, mohlala o fetela ho hardware e ncha ebe o sebetsa hape. Sena se etsahetse ka PgBouncer, empa ha ea ka ea fumaneha. Sephetho sa hoetla hona e bile ho se fumanehe ha tšebeletso ea rona ka metsotso e 25. AWS e khothaletsa tšebeliso ea khaello ea basebelisi maemong a joalo, e neng e sa kengoa tšebetsong naheng ea rona ka nako eo.

Ka mor'a moo, re ile ra nahana ka botebo ka mamello ea phoso ea lihlopha tsa PgBouncer le PostgreSQL, hobane boemo bo tšoanang bo ka etsahala ka mohlala ofe kapa ofe akhaonteng ea rona ea AWS.

Re thehile leano la ho mamella liphoso tsa PgBouncer ka tsela e latelang: li-server tsohle tsa kopo li fihlella Network Load Balancer, ka morao ho na le PgBouncers tse peli. PgBouncer e 'ngoe le e' ngoe e shebana le mong'a PostgreSQL ea shard ka 'ngoe. Haeba kotsi ea ketsahalo ea AWS e etsahala hape, sephethephethe kaofela se fetisetsoa ho PgBouncer e 'ngoe. Network Load Balancer failover e fanoa ke AWS.

Morero ona o etsa hore ho be bonolo ho eketsa li-server tse ncha tsa PgBouncer.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Theha Sehlopha sa PostgreSQL sa Failover

Ha re rarolla bothata bona, re ile ra nahana ka likhetho tse fapaneng: feilover e ngotseng, repmgr, AWS RDS, Patroni.

Lingoliloeng tse ngotseng

Ba ka beha leihlo mosebetsi oa monghali, 'me, haeba e hloleha, ba phahamiselitse setšoantšo ho mong'a sona le ho ntlafatsa tlhophiso ea PgBouncer.

Melemo ea mokhoa ona ke ho nolofatsa ho hoholo, hobane u ngola mangolo 'me u utloisisa hantle hore na a sebetsa joang.

Chelete:

  • E ka 'na eaba monghali ha aa shoa, ho e-na le hoo, ho ka 'na ha e-ba le ho hlōleha ha marang-rang. Failover, a sa tsebe sena, o tla ntšetsa pele setšoantšo ho monghali, ha monghali oa khale a ntse a tsoela pele ho sebetsa. Ka lebaka leo, re tla fumana li-server tse peli sebakeng sa master mme re ke ke ra tseba hore na ke ofe ho bona ea nang le lintlha tsa morao-rao tsa morao-rao. Boemo bona bo boetse bo bitsoa boko bo arohaneng;
  • Re ile ra sala re se na karabo. Ka tlhophiso ea rona, master le replica e le 'ngoe, ka mor'a ho chencha, replica e nyolohela ho master' me ha re sa na likopi, kahoo re tlameha ho eketsa replica e ncha ka letsoho;
  • Re hloka tlhahlobo e eketsehileng ea ts'ebetso ea failover, ha re ntse re e-na le li-shards tse 12 tsa PostgreSQL, ho bolelang hore re tlameha ho shebella lihlopha tse 12. Ha o eketsa palo ea li-shards, o tlameha hape ho hopola ho nchafatsa failover.

Faleover e ingoletseng e shebahala e rarahane haholo mme e hloka tšehetso e sa reng letho. Ka sehlopha se le seng sa PostgreSQL, ena e ka ba khetho e bonolo ka ho fetesisa, empa ha e lekane, ka hona ha ea re tšoanela.

Repmgr

Motsamaisi oa Replication bakeng sa lihlopha tsa PostgreSQL, tse ka laolang ts'ebetso ea sehlopha sa PostgreSQL. Ka nako e ts'oanang, ha e na phoso e ikemetseng ka ntle ho lebokose, kahoo bakeng sa mosebetsi o tla hloka ho ngola "wrapper" ea hau holim'a tharollo e felileng. Kahoo ntho e 'ngoe le e' ngoe e ka fetoha e rarahane le ho feta ka mangolo a ngotseng, kahoo ha rea ​​​​ka ra leka Repmgr.

AWS RDS

E ts'ehetsa tsohle tseo re li hlokang, e tseba ho etsa li-backups le ho boloka letamo la likhokahano. E na le phetoho e iketsang: ha monghali a e-shoa, setšoantšo se fetoha monghali e mocha, 'me AWS e fetola rekoto ea dns ho mong'a e mocha, ha likopi li ka fumaneha li-AZ tse fapaneng.

Mathata a kenyelletsa khaello ea liphetoho tse ntle. E le mohlala oa tokiso e ntle: maemo a rona a na le lithibelo bakeng sa likhokahano tsa tcp, tseo, ka bomalimabe, li ke keng tsa etsoa ka RDS:

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

Ho feta moo, AWS RDS e batla e le theko e boima habeli ho feta theko ea mohlala e tloaelehileng, e leng lebaka le ka sehloohong la ho lahla tharollo ena.

Patroni

Ena ke template ea python bakeng sa ho laola PostgreSQL ka litokomane tse ntle, failover e ikemetseng le khoutu ea mohloli ho github.

Melemo ea Patroni:

  • E 'ngoe le e' ngoe ea parameter ea tlhophiso e hlalosoa, ho hlakile hore na e sebetsa joang;
  • Automatic failover sebetsa ka ntle ho lebokose;
  • E ngotsoe ka python, 'me kaha rona ka borona re ngola haholo ka python, ho tla ba bonolo hore re sebetsane le mathata, mohlomong, esita le ho thusa nts'etsopele ea morero;
  • E laola PostgreSQL ka botlalo, e u lumella ho fetola tlhophiso ho li-node tsohle tsa sehlopha hang-hang, 'me haeba sehlopha se hloka ho qalisoa hape ho sebelisa tlhophiso e ncha, joale sena se ka etsoa hape ka Patroni.

Chelete:

  • Ha ho hlake ho tsoa litokomaneng hore na u ka sebetsa joang le PgBouncer ka nepo. Le hoja ho le thata ho e bitsa minus, hobane mosebetsi oa Patroni ke ho laola PostgreSQL, le hore na likamano le Patroni li tla tsamaea joang e se e ntse e le bothata ba rona;
  • Ho na le mehlala e seng mekae ea ts'ebetsong ea Patroni ka bongata bo boholo, athe ho na le mehlala e mengata ea ts'ebetsong ho tloha qalong.

Ka lebaka leo, re khethile Patroni ho theha sehlopha sa failover.

Ts'ebetso ea Ts'ebetso ea Patroni

Pele ho Patroni, re ne re e-na le li-shards tse 12 tsa PostgreSQL ka tlhophiso ea monghali a le mong le setšoantšo se le seng se nang le phetisetso ea asynchronous. Li-server tsa kopo li fihletse li-database ka Network Load Balancer, ka mor'a moo ho neng ho e-na le liketsahalo tse peli le PgBouncer, 'me ka mor'a tsona ho ne ho e-na le li-server tsohle tsa PostgreSQL.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Ho kenya ts'ebetsong Patroni, re ne re hloka ho khetha tlhophiso ea sehlopha sa polokelo e abuoang. Patroni e sebetsa le lits'ebetso tsa polokelo ea litlhophiso tse ajoang joalo ka etcd, Zookeeper, Consul. Re na le sehlopha se felletseng sa Consul 'marakeng, se sebetsang 'moho le Vault mme ha re sa e sebelisa. Lebaka le letle la ho qala ho sebelisa Consul molemong oa eona.

Kamoo Patroni a sebetsang le Consul

Re na le sehlopha sa Consul, se nang le li-node tse tharo, le sehlopha sa Patroni, se nang le moetapele le setšoantšo (ho Patroni, monghali o bitsoa moetapele oa lihlopha, 'me makhoba a bitsoa replicas). Mohlala o mong le o mong oa sehlopha sa Patroni o lula o romella tlhahisoleseling mabapi le boemo ba sehlopha ho Consul. Ka hona, ho tsoa ho Consul u ka lula u fumana tlhophiso ea hajoale ea sehlopha sa Patroni le hore na moetapele ke mang hajoale.

Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Ho hokahanya Patroni le Consul, ho lekane ho ithuta litokomane tsa molao, tse reng o hloka ho hlakisa moeti ka sebopeho sa http kapa https, ho latela hore na re sebetsa joang le Consul, le leano la khokahano, ka boikhethelo:

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

E shebahala e le bonolo, empa mona maraba a qala. Re na le Consul, re sebetsana le khokahano e sireletsehileng ka https mme khokahano ea rona ea khokahano e tla shebahala tjena:

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

Empa seo ha se sebetse. Ha a qala, Patroni ha a khone ho hokahanya le Consul, hobane e leka ho feta http leha ho le joalo.

Khoutu ea mohloli oa Patroni e thusitse ho sebetsana le bothata. Ntho e ntle e ngotsoe ka python. Hoa etsahala hore parameter ea moeti ha e aroloe ka tsela leha e le efe, 'me protocol e tlameha ho hlalosoa ka morero. Ena ke tsela eo tlhophiso e sebetsang ea ho sebetsa le Consul e shebahalang ka eona ho rona:

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

consul-template

Kahoo, re khethile polokelo bakeng sa tlhophiso. Hona joale re hloka ho utloisisa hore na PgBouncer e tla fetola tlhophiso ea eona joang ha e fetola moetapele sehlopheng sa Patroni. Ha ho karabo ea potso ena litokomaneng, hobane. moo, ha e le hantle, ho sebetsa le PgBouncer ha ho hlalosoe.

Ha re batla tharollo, re fumane sehlooho (ka bomalimabe ha ke hopole sehlooho) moo ho neng ho ngotsoe hore Сonsul-template e thusitse haholo ho kopanya PgBouncer le Patroni. Sena se ile sa re susumelletsa ho batlisisa hore na Consul-template e sebetsa joang.

Ho ile ha fumaneha hore Consul-template e lula e lekola tlhophiso ea sehlopha sa PostgreSQL ho Consul. Ha moetapele a fetoha, e ntlafatsa tlhophiso ea PgBouncer mme e romela taelo ea ho e kenya hape.

Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Ntho e kholo ea template ke hore e bolokiloe e le khoutu, kahoo ha u eketsa shard e ncha, ho lekane ho etsa boitlamo bo bocha le ho ntlafatsa template ka ho toba, ho tšehetsa Infrastructure e le molao-motheo oa khoutu.

Mehaho e mecha le Patroni

Ka lebaka leo, re ile ra fumana moralo o latelang oa mosebetsi:
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Li-server tsohle tsa kopo li fihlella ho leka-lekana → ho na le maemo a mabeli a PgBouncer ka mor'a eona → ketsahalong e 'ngoe le e' ngoe, Consul-template e hlahisoa, e lekola boemo ba sehlopha se seng le se seng sa Patroni le ho lekola bohlokoa ba tlhophiso ea PgBouncer, e romellang likopo ho moetapele oa hajoale. ea sehlopha ka seng.

Tlhahlobo ea matsoho

Re ile ra tsamaisa morero ona pele re o qala tikolohong e nyane ea liteko mme ra hlahloba ts'ebetso ea switching ea othomathiki. Ba ile ba bula letlapa, ba tsamaisa setikara, ’me ka eona nako eo ba “bolaea” moeta-pele oa sehlopha seo. Ho AWS, sena se bonolo joalo ka ho koala mohlala ka console.

Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Setikara se ile sa khutla nakong ea metsotsoana e 10-20, 'me sa qala ho tsamaea ka mokhoa o tloaelehileng. Sena se bolela hore sehlopha sa Patroni se sebelitse ka nepo: se fetotse moeta-pele, sa romela tlhahisoleseding ho Сonsul, 'me Сonsul-template hang-hang e ile ea nka tlhahisoleseding ena, ea nkela sebaka sa PgBouncer sebaka mme ea romela taelo ea ho kenya hape.

Joang ho phela tlas'a mojaro o phahameng le ho boloka nako ea ho phomola e le nyane?

Tsohle di sebetsa hantle! Empa ho na le lipotso tse ncha: E tla sebetsa joang tlas'a mojaro o phahameng? Joang ho potlakisa le ka mokhoa o sireletsehileng ntho e 'ngoe le e' ngoe e hlahisoang?

Tikoloho ea teko eo re etsang tlhahlobo ea mojaro ho eona e re thusa ho araba potso ea pele. E ts'oana ka ho felletseng le tlhahiso ho latela meaho mme e hlahisitse data ea tlhahlobo e batlang e lekana ka bongata le tlhahiso. Re etsa qeto ea ho "bolaea" e mong oa masters a PostgreSQL nakong ea tlhahlobo mme re bone se etsahalang. Empa pele ho moo, ho bohlokoa ho hlahloba ho roala ka mokhoa o itekanetseng, hobane tikolohong ena re na le li-shards tse 'maloa tsa PostgreSQL, kahoo re tla fumana tlhahlobo e babatsehang ea mangolo a tlhophiso pele ho tlhahiso.

Mesebetsi ka bobeli e shebahala e le takatso e matla, empa re na le PostgreSQL 9.6. Na re ka ntlafatsa hang-hang ho 11.2?

Re etsa qeto ea ho e etsa ka mehato e 'meli: ho ntlafatsa pele ho 2, ebe u qala Patroni.

Ntlafatso ea PostgreSQL

Ho nchafatsa mofuta oa PostgreSQL kapele, sebelisa khetho -k, moo lihokelo tse thata li entsoeng ho disk mme ha ho hlokahale hore u kopitse data ea hau. Motheong oa 300-400 GB, ntlafatso e nka motsotso o le mong.

Re na le li-shards tse ngata, kahoo ntjhafatso e hloka ho etsoa ka bo eona. Ho etsa sena, re ngotse buka ea ho bapala ea Ansible e sebetsanang le ts'ebetso eohle ea ntlafatso bakeng sa rona:

/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='

Ho bohlokoa ho hlokomela mona hore pele o qala ntlafatso, o tlameha ho e etsa ka paramente -- hlahlobaho etsa bonnete ba hore o ka ntlafatsa. Script ea rona e boetse e etsa phetoho ea li-configs bakeng sa nako ea ntlafatso. Script ea rona e phethiloe ka metsotsoana e 30, e leng sephetho se setle haholo.

Qala Patroni

Ho rarolla bothata ba bobeli, sheba feela tlhophiso ea Patroni. Sebaka sa polokelo ea molao se na le mohlala oa tlhophiso le initdb, e ikarabellang bakeng sa ho qala database e ncha ha u qala Patroni. Empa kaha re se re ntse re e-na le database e lokiselitsoeng, re mpa re tlosa karolo ena ho tloha ho tlhophiso.

Ha re qala ho kenya Patroni ho sehlopha se seng se ntse se le teng sa PostgreSQL le ho se tsamaisa, re ile ra kena bothateng bo bocha: li-server ka bobeli li qalile e le moetapele. Patroni ha a tsebe letho ka boemo ba pele ba sehlopha mme o leka ho qala li-server ka bobeli e le lihlopha tse peli tse arohaneng tse nang le lebitso le le leng. Ho rarolla bothata bona, o hloka ho hlakola bukana e nang le data ho lekhoba:

rm -rf /var/lib/postgresql/

Sena se lokela ho etsoa feela ho lekhoba!

Ha replica e hloekileng e hokahane, Patroni o etsa moetapele oa baseback ebe o e khutlisetsa ho replica, ebe o ts'oara boemo ba hona joale ho latela marako a marako.

Bothata bo bong boo re kopaneng le bona ke hore lihlopha tsohle tsa PostgreSQL li rehiloe mabitso a mantlha ka ho sa feleng. Ha sehlopha ka seng se sa tsebe letho ka se seng, sena se tloaelehile. Empa ha u batla ho sebelisa Patroni, lihlopha tsohle li tlameha ho ba le lebitso le ikhethang. Tharollo ke ho fetola lebitso la sehlopha ho tlhophiso ea PostgreSQL.

teko ea mojaro

Re thakhotse tlhahlobo e etsisang boiphihlelo ba basebelisi libotong. Ha mojaro o fihla boleng ba rona ba letsatsi le letsatsi, re pheta tlhahlobo e ts'oanang hantle, re ile ra tima mohlala o le mong le moetapele oa PostgreSQL. Ho feila ka mokhoa o itekanetseng ho ile ha sebetsa kamoo re neng re lebeletse kateng: Patroni o ile a fetola moetapele, Consul-template e nchafalitse tlhophiso ea PgBouncer mme a romela taelo ea ho kenya hape. Ho ea ka lirafshoa tsa rona tsa Grafana, ho ne ho hlakile hore ho na le ho lieha ha metsotsoana ea 20-30 le liphoso tse fokolang tse tsoang ho li-server tse amanang le khokahanyo ho database. Bona ke boemo bo tloaelehileng, litekanyetso tse joalo lia amoheleha bakeng sa mofeilo oa rona mme ka sebele li betere ho feta nako ea ts'ebeletso.

Ho tlisa Patroni tlhahiso

Ka lebaka leo, re ile ra tla le moralo o latelang:

  • Tsamaisa template ea Consul ho li-server tsa PgBouncer le ho qala;
  • Lintlafatso tsa PostgreSQL ho mofuta oa 11.2;
  • Fetola lebitso la sehlopha;
  • Ho qala Sehlopha sa Patroni.

Ka nako e ts'oanang, morero oa rona o re lumella ho etsa ntlha ea pele hoo e ka bang ka nako leha e le efe, re ka tlosa PgBouncer e 'ngoe le e' ngoe mosebetsing le ho tsamaisa le ho tsamaisa consul-template ho eona. Kahoo re ile ra etsa joalo.

Bakeng sa ho romelloa ka potlako, re sebelisitse Ansible, kaha re se re lekile libuka tsohle tsa ho bapala tikolohong ea teko, 'me nako ea ho phethahatsa script e feletseng e ne e le ho tloha ho 1,5 ho ea ho metsotso ea 2 bakeng sa shard ka' ngoe. Re ka tsamaisa ntho e 'ngoe le e' ngoe ka lehlakoreng le leng ntle le ho emisa tšebeletso ea rona, empa re ne re tla tlameha ho tima PostgreSQL ka 'ngoe ka metsotso e mengata. Tabeng ena, basebelisi bao data ea bona e leng ho shard ena ba ne ba ke ke ba sebetsa ka botlalo ka nako ena, 'me sena ha se amohelehe ho rona.

Tsela ea ho tsoa boemong bona e ne e le tlhokomelo e reriloeng, e etsoang likhoeli tse ling le tse ling tse 3. Ena ke fensetere bakeng sa mosebetsi o hlophisitsoeng, ha re koala litšebeletso tsa rona ka ho feletseng le ho ntlafatsa maemo a rona a polokelo ea boitsebiso. Ho ne ho setse beke e le 'ngoe ho fihlela fensetere e latelang, 'me re ile ra etsa qeto ea ho ema feela le ho itokisetsa ho ea pele. Ka nako ea ho leta, re ile ra boela ra itšireletsa: bakeng sa shard e 'ngoe le e' ngoe ea PostgreSQL, re ile ra phahamisa setšoantšo sa polokelo haeba re ka hlōleha ho boloka lintlha tsa morao-rao, 'me ra eketsa mohlala o mocha bakeng sa shard e' ngoe le e 'ngoe, e lokelang ho fetoha setšoantšo se secha sehlopheng sa Patroni, e le hore u se ke ua phethahatsa taelo ea ho hlakola data. Sena sohle se ile sa thusa ho fokotsa kotsi ea phoso.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Re ile ra qala ts'ebeletso ea rona, ntho e 'ngoe le e' ngoe e sebetsa kamoo e neng e lokela ho sebetsa kateng, basebelisi ba tsoela pele ho sebetsa, empa lirapeng re ile ra hlokomela mojaro o phahameng ka mokhoa o sa tloaelehang ho li-server tsa Consul.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Ke hobane'ng ha re sa ka ra bona see sebakeng sa liteko? Bothata bona bo bontša hantle hore hoa hlokahala ho latela Infrastructure e le molao-motheo oa khoutu le ho hloekisa lisebelisoa tsohle, ho tloha libakeng tsa liteko ho ea ho tlhahiso. Ho seng joalo, ho bonolo haholo ho fumana bothata boo re nang le bona. Ho etsahetse eng? Consul e ile ea hlaha ka lekhetlo la pele ka tlhahiso, 'me joale libakeng tsa liteko, ka lebaka leo, libakeng tsa liteko, phetolelo ea Consul e ne e phahame ho feta tlhahiso. Ho e 'ngoe ea likhatiso, ho lutla ha CPU ho ile ha rarolloa ha ho sebetsa le consul-template. Ka hona, re sa tsoa nchafatsa Consul, kahoo ra rarolla bothata.

Qala hape sehlopha sa Patroni

Leha ho le joalo, re ile ra fumana bothata bo bocha, boo re sa kang ra bo belaella le ho bo belaella. Ha re ntlafatsa Consul, re mpa re tlosa node ea Consul ho tloha sehlopheng ho sebelisa taelo ea consul leave → Patroni o hokela ho seva se seng sa Consul → ntho e 'ngoe le e' ngoe e sebetsa. Empa ha re fihla ketsahalong ea ho qetela ea sehlopha sa Consul mme re romela taelo ea tumello ea consul ho eona, lihlopha tsohle tsa Patroni li ile tsa qala hape, 'me ka har'a lifate re bone phoso e latelang:

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>

Sehlopha sa Patroni ha se sa khona ho fumana leseli mabapi le sehlopha sa sona mme sa qala bocha.

Ho fumana tharollo, re ile ra ikopanya le bangoli ba Patroni ka taba e mabapi le github. Ba khothalelitse lintlafatso ho lifaele tsa rona tsa tlhophiso:

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

Re khonne ho pheta bothata sebakeng sa liteko mme ra leka likhetho tsena moo, empa ka bomalimabe ha lia sebetsa.

Bothata bo ntse bo e-s'o rarolloe. Re rera ho leka litharollo tse latelang:

  • Sebelisa moemeli oa moemeli molemong o mong le o mong oa sehlopha sa Patroni;
  • Lokisa bothata khoutu.

Re utloisisa hore na phoso e etsahetse hokae: mohlomong bothata ke tšebeliso ea nako e sa lekanyetsoang, e sa hlakoloeng ka faele ea tlhophiso. Ha seva sa ho qetela sa Consul se tlosoa sehlopheng, sehlopha sohle sa Consul se leketla nako e fetang motsotsoana, ka lebaka la sena, Patroni a ke ke a fumana boemo ba sehlopha mme a tsosolosa sehlopha sohle ka ho feletseng.

Ka lehlohonolo, ha rea ​​ka ra hlola re kopana le liphoso.

Liphetho tsa ho sebelisa Patroni

Kamora ho qala ka katleho ha Patroni, re kentse setšoantšo se seng sehlopheng ka seng. Hona joale sehlopheng se seng le se seng ho na le sets'oants'o sa quorum: moetapele a le mong le likopi tse peli, bakeng sa letlooa la polokeho haeba boko bo arohaneng ha bo fetoha.
Failover Cluster PostgreSQL + Patroni. Boiphihlelo ba ho kenya tshebetsong

Patroni o 'nile a sebetsa tlhahiso ka nako e fetang likhoeli tse tharo. Nakong ena, o se a khonne ho re thusa. Haufinyane tjena, moeta-pele oa e 'ngoe ea lihlopha o shoele AWS, othomathike o ile a sebetsa mme basebelisi ba tsoela pele ho sebetsa. Patroni o ile a phethahatsa mosebetsi oa eona oa sehlooho.

Kakaretso e nyane ea tšebeliso ea Patroni:

  • Bonolo ba liphetoho tsa tlhophiso. Ho lekane ho fetola tlhophiso ketsahalong e le 'ngoe mme e tla huleloa ho sehlopha sohle. Haeba ho qala bocha ho hlokahala ho sebelisa tlhophiso e ncha, joale Patroni o tla u tsebisa. Patroni e ka qala sehlopha kaofela ka taelo e le 'ngoe, eo hape e leng bonolo haholo.
  • Automatic failover ea sebetsa 'me e se e khona ho re thusa ho tsoa.
  • Nchafatso ea PostgreSQL ntle le nako ea ts'ebeliso. O tlameha ho qala ho ntlafatsa likopi tsa mofuta o mocha, ebe o fetola moetapele sehlopheng sa Patroni mme o ntlafatse moetapele oa khale. Tabeng ena, tlhahlobo e hlokahalang ea failover e itekanetseng e etsahala.

Source: www.habr.com

Eketsa ka tlhaloso