Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

N'isiokwu a, m ga-agwa gị otú anyị si bịaruo okwu nke PostgreSQL kpatara ndidi, ihe mere o ji dị anyị mkpa, na ihe mere na njedebe.

Anyị nwere ọrụ dị oke ibu: ndị ọrụ nde 2,5 n'ụwa niile, ndị ọrụ 50K+ na-arụsi ọrụ ike kwa ụbọchị. Sava dị na Amazone n'otu mpaghara Ireland: 100+ sava dị iche iche na-arụ ọrụ mgbe niile, ihe fọrọ nke nta ka ọ bụrụ 50 n'ime ha nwere ọdụ data.

Azụ azụ niile bụ ngwa Java steeti nwere monolithic nke na-ejigide njikọ webụsaịtị na onye ahịa ya. Mgbe ọtụtụ ndị ọrụ na-arụ ọrụ n'otu oge na otu osisi, ha niile na-ahụ mgbanwe ozugbo, n'ihi na anyị na-edekọ mgbanwe ọ bụla na nchekwa data. Anyị nwere ihe dị ka 10K arịrịọ kwa sekọnd na ọdụ data anyị. Na nnukwu ibu na Redis anyị na-ede arịrịọ 80-100K kwa nkeji.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Ihe mere anyị ji si na Redis gbanwee gaa PostgreSQL

Na mbụ, ọrụ anyị na Redis rụkọrọ ọrụ, nchekwa uru bara uru nke na-echekwa data niile na RAM nke ihe nkesa.

Uru nke Redis:

  1. Ọsọ nzaghachi dị elu, n'ihi na a na-echekwa ihe niile na ebe nchekwa;
  2. Ndabere na mweghachi dị mma.

Cons nke Redis maka anyị:

  1. Enweghị ezigbo azụmahịa. Anyị gbalịrị iṅomi ha n'ọkwa ngwa anyị. N'ụzọ dị mwute, nke a anaghị arụ ọrụ nke ọma mgbe niile ma chọọ ide koodu mgbagwoju anya.
  2. Ọnụ ego nke data na-ejedebe site na oke ebe nchekwa. Ka ọnụọgụ data na-abawanye, ebe nchekwa ga-eto eto, na, n'ikpeazụ, anyị ga-agbaba na njirimara nke ihe atụ ahọpụtara, nke na AWS chọrọ ịkwụsị ọrụ anyị iji gbanwee ụdị ihe atụ.
  3. Ọ dị mkpa iji nọgide na-enwe ọkwa dị ala mgbe niile, n'ihi na Anyị nwere ọnụ ọgụgụ dị ukwuu nke arịrịọ. Ọkwa latency kacha mma maka anyị bụ 17-20 ms. N'ọkwa nke 30-40 ms, anyị na-enweta azịza dị ogologo maka arịrịọ ngwa anyị na mmebi iwu. N'ụzọ dị mwute, nke a mere anyị na Septemba 2018, mgbe otu n'ime ikpe na Redis n'ihi ihe ụfọdụ nwetara nkwụsị nke dị okpukpu abụọ karịa ka ọ dị na mbụ. Iji dozie nsogbu ahụ, anyị kwụsịrị ọrụ ahụ n'etiti ụbọchị ọrụ maka mmezi na-akwadoghị ma dochie ihe atụ Redis nwere nsogbu.
  4. Ọ dị mfe ịnweta data na-ekwekọghị ekwekọ ọbụlagodi na obere mperi na koodu ahụ wee nọrọ ogologo oge ide koodu iji dozie data ahụ.

Anyị na-eburu n'uche ọghọm ndị ahụ wee chọpụta na anyị kwesịrị ịkwaga na ihe dị mma karị, na azụmahịa nkịtị na obere ịdabere na latency. Anyị mere nyocha anyị, nyochaa ọtụtụ nhọrọ wee họrọ PostgreSQL.

Anyị na-akwaga na nchekwa data ọhụrụ maka afọ 1,5 ugbu a ma nyefee obere akụkụ nke data ahụ, yabụ ugbu a anyị na-arụ ọrụ n'otu oge na Redis na PostgreSQL. Edere ozi ndị ọzọ gbasara usoro mbugharị na ịtụgharị data n'etiti ọdụ data akụkọ sitere n'aka onye ọrụ ibe m.

Mgbe mbụ anyị malitere ịkwaga, ngwa anyị na-arụ ọrụ ozugbo na nchekwa data wee nweta onye isi Redis na PostgreSQL. Ụyọkọ PostgreSQL nwere nna ukwu na oyiri nwere ntugharị asynchronous. Nke a bụ usoro ọrụ nchekwa data dị ka:
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Na-eme PgBouncer

Mgbe anyị na-agagharị, ngwaahịa ahụ na-etolitekwa: ọnụ ọgụgụ ndị ọrụ na ọnụ ọgụgụ nke sava ndị na-arụ ọrụ na PostgreSQL mụbara, anyị malitere ịpụ na njikọ. PostgreSQL na-emepụta usoro dị iche iche maka njikọ ọ bụla ma na-eri ihe. Ị nwere ike ịbawanye ọnụ ọgụgụ nke njikọ ruo otu ebe, ma ọ bụghị na enwere ohere na nchekwa data agaghị arụ ọrụ nke ọma. Nhọrọ kacha mma n'ọnọdụ dị otú ahụ ga-abụ ịhọrọ njikwa njikọ nke ga-eguzo n'ihu nchekwa data.

Anyị nwere nhọrọ abụọ maka njikwa njikọ: Pgpool na PgBouncer. Mana nke mbụ anaghị akwado ụdị azụmahịa nke ịrụ ọrụ na nchekwa data, yabụ anyị họọrọ PgBouncer.

Anyị ahaziela atụmatụ ọrụ ndị a: ngwa anyị na-enweta otu PgBouncer, n'azụ ya enwere ndị isi PostgreSQL, na n'azụ nna ukwu ọ bụla enwere otu oyiri nwere mmegharị asynchronous.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

N'otu oge ahụ, anyị enweghị ike ịchekwa data niile na PostgreSQL na ọsọ nke ịrụ ọrụ na nchekwa data dị anyị mkpa, ya mere anyị malitere sharding PostgreSQL na ọkwa ngwa. Atụmatụ akọwara n'elu dabara adaba maka nke a: mgbe ị na-agbakwunye shard PostgreSQL ọhụrụ, ọ ga-ezuru imelite nhazi PgBouncer na ngwa ahụ nwere ike ịrụ ọrụ ozugbo na shard ọhụrụ.

PgBouncer anabataghị mmejọ

Atụmatụ a rụrụ ọrụ ruo mgbe naanị ihe atụ PgBouncer nwụrụ. Anyị nọ na AWS, ebe ewepụtara oge niile na ngwaike na-anwụ kwa oge. N'ọnọdụ ndị dị otú ahụ, ihe atụ na-akwaga na ngwaike ọhụrụ wee rụọ ọrụ ọzọ. Nke a mere na PgBouncer, mana ọ dịghị ya. Ihe si n'ihe mberede a pụta bụ na ọrụ anyị adịghị maka nkeji iri abụọ na ise. Maka ọnọdụ ndị dị otú ahụ, AWS na-atụ aro iji redundancy n'akụkụ onye ọrụ, nke anyị emeghị n'oge ahụ.

Mgbe nke ahụ gachara, anyị chere echiche nke ọma maka mmejọ nnabata nke ụyọkọ PgBouncer na PostgreSQL, n'ihi na ọnọdụ yiri nke ahụ nwere ike ime ọzọ na ihe ọ bụla na akaụntụ AWS anyị.

Anyị wuru atụmatụ nnabata mmejọ PgBouncer dị ka ndị a: sava ngwa niile na-enweta Balancer Load Network, n'azụ nke enwere PgBouncers abụọ. Onye ọ bụla n'ime PgBouncers na-ele anya otu nna ukwu PostgreSQL nke shard ọ bụla. Ọ bụrụ na ọnọdụ ihe mberede ihe atụ AWS na-emeghachi, a na-ebugharị okporo ụzọ niile site na PgBouncer ọzọ. Network Load Balancer anabataghị mmejọ nke AWS.

Atụmatụ a na-enye gị ohere ịgbakwunye sava PgBouncer ọhụrụ n'ụzọ dị mfe.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Ịmepụta ụyọkọ Failover PostgreSQL

Mgbe anyị na-edozi nsogbu a, anyị tụlere nhọrọ dị iche iche: ọdịda onwe-dere, repmgr, AWS RDS, Patroni.

Edemede nke onwe ya

Ha nwere ike nyochaa ọrụ nke nna ukwu na, ọ bụrụ na ọ daa, kwalite oyiri na nna ukwu ma melite nhazi PgBouncer.

Uru nke usoro a bụ ihe kachasị mfe, n'ihi na ị na-ede ederede n'onwe gị ma ghọta kpọmkwem otú ha si arụ ọrụ.

Cons:

  • Onye nwe ya nwere ike ọ gaghị anwụ anwụ, kama, enwere ike ịnwe ọdịda netwọk. Failover, na-amaghị nke a, ga-akwalite oyiri na nna ukwu, na ochie nna ukwu ga-anọgide na-arụ ọrụ. N'ihi ya, anyị ga-enweta sava abụọ na ọrụ nna ukwu ma ghara ịma onye n'ime ha nwere data kachasị ọhụrụ ugbu a. A na-akpọkwa ọnọdụ a gbawara-ụbụrụ;
  • Anyị hapụrụ enweghị nzaghachi. Na nhazi anyị enwere nna ukwu na otu oyiri, mgbe ịgbanwere oyiri a na-akwalite nna ukwu ma anyị enwekwaghị ihe oyiri, yabụ anyị ga-eji aka tinye ihe ọhụrụ;
  • Anyị chọrọ nleba anya ọzọ nke arụmọrụ ọdịda, anyị nwekwara 12 PostgreSQL shards, nke pụtara na anyị kwesịrị inyocha ụyọkọ iri na abụọ. Mgbe ị na-abawanye ọnụ ọgụgụ nke shards, ị ga-echetakwa imelite ọdịda ahụ.

Ihe ọdịda nke edere onwe ya na-adị mgbagwoju anya ma chọọ nkwado na-enweghị isi. Site na otu ụyọkọ PostgreSQL, nke a ga-abụ nhọrọ kachasị mfe, mana ọ naghị abawanye, yabụ na ọ dabaraghị anyị.

Repmgr

Onye njikwa mmegharị maka ụyọkọ PostgreSQL, nke nwere ike ijikwa ọrụ nke ụyọkọ PostgreSQL. N'otu oge ahụ, ọ nweghị nkwụsị nke akpaaka site na igbe ahụ, ya mere, iji rụọ ọrụ, ị ga-achọ ide "wrapper" nke gị n'elu ihe ngwọta dị njikere. Ya mere, ihe niile nwere ike ịpụta ọbụna mgbagwoju anya karịa na ederede onwe ya, nke mere na anyị anaghị anwale Repmgr.

AWS RDS

Ọ na-akwado ihe niile anyị chọrọ, nwere ike ime nkwado ndabere na mpaghara na-akwado ọdọ mmiri njikọ. Ọ nwere mgbanwe na-akpaghị aka: mgbe nna ukwu ahụ nwụrụ, oyiri ahụ na-aghọ nna ukwu ọhụrụ, na AWS na-agbanwe ndekọ DNS na nna ukwu ọhụrụ, ebe enwere ike ịchọta ihe ndị ahụ na AZ dị iche iche.

Ọdịmma ndị ahụ gụnyere enweghị ezigbo ntọala. Dịka ọmụmaatụ nke nlegharị anya nke ọma: ọnọdụ anyị nwere mgbochi maka njikọ tcp, nke, ọ dị nwute, enweghị ike ime na RDS:

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

Na mgbakwunye, AWS RDS fọrọ nke nta ka ọ bụrụ okpukpu abụọ ka ọnụ ahịa ihe atụ mgbe niile, nke bụ isi ihe kpatara ịhapụ ngwọta a.

Onye nkwado

Nke a bụ ndebiri Python maka ijikwa PostgreSQL nwere ezigbo akwụkwọ, ọdịda akpaaka na koodu isi na github.

Uru nke Patroni:

  • A na-akọwa nhazi nhazi ọ bụla, o doro anya ka o si arụ ọrụ;
  • Akpata ọdịda na-arụ ọrụ site na igbe;
  • Edere ya na Python, na ebe ọ bụ na anyị onwe anyị na-ede ọtụtụ ihe na Python, ọ ga-adịrị anyị mfe ịnagide nsogbu na, ikekwe, ọbụna na-enyere aka mmepe nke ọrụ ahụ;
  • Na-achịkwa PostgreSQL zuru oke, na-enye gị ohere ịgbanwe nhazi na ọnụ ọgụgụ niile nke ụyọkọ ahụ n'otu oge, ma ọ bụrụ na itinye nhazi ọhụrụ ahụ chọrọ ịmalitegharị ụyọkọ ahụ, enwere ike ime nke a ọzọ site na iji Patroni.

Cons:

  • O doghị anya site na akwụkwọ ahụ ka esi arụ ọrụ nke ọma na PgBouncer. Ọ bụ ezie na ọ siri ike ịkpọ nke a mwepu, n'ihi na ọrụ Patroni bụ ijikwa PostgreSQL, na otú njikọ na Patroni ga-esi arụ ọrụ bụbu nsogbu anyị;
  • Enwere ihe atụ ole na ole nke mmejuputa Patroni na nnukwu ọnụ ọgụgụ, ebe enwere ọtụtụ ihe atụ nke mmejuputa site na ọkọ.

N'ihi ya, anyị họọrọ Patroni ka ọ mepụta ụyọkọ nke na-agaghị emeli.

Usoro mmejuputa patroni

Tupu Patroni, anyị nwere 12 PostgreSQL shards na otu nna ukwu na otu nhazi oyiri nwere mmegharị asynchronous. Sava ngwa ahụ nwetara ọdụ data site na Network Load Balancer, n'azụ nke e nwere oge abụọ na PgBouncer, na n'azụ ha niile bụ ihe nkesa PostgreSQL.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Iji mejuputa Patroni, anyị kwesịrị ịhọrọ nchekwa nhazi ụyọkọ kesara. Patroni na-arụ ọrụ na sistemụ nchekwa nhazi nkesa dị ka wdgd, Zookeeper, Consul. Anyị nwere ụyọkọ Consul zuru oke na mmepụta, nke na-arụkọ ọrụ na Vault na anyị anaghị eji ya ọzọ. Nnukwu ihe kpatara ịmalite iji Consul maka ebumnuche ya.

Kedu ka Patroni si arụ ọrụ na Consul

Anyị nwere ụyọkọ Consul, nke nwere ọnụ atọ, yana ụyọkọ Patroni, nke nwere onye ndu na oyiri (na Patroni, a na-akpọ nna ukwu onye ndu ụyọkọ, a na-akpọkwa ndị ohu replicas). Ụyọkọ Patroni ọ bụla na-ezigara Consul ozi gbasara ọnọdụ ụyọkọ ahụ mgbe niile. Ya mere, site na Consul ị nwere ike ịchọpụta nhazi ugbu a nke ụyọkọ Patroni na onye bụ onye ndu n'oge ahụ.

Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Iji jikọọ Patroni na Consul, mụọ naanị akwụkwọ gọọmentị, nke na-ekwu na ịkwesịrị ịkọwapụta onye ọbịa na ụdị http ma ọ bụ https, dabere na otu anyị si arụ ọrụ na Consul, yana eserese njikọ, nhọrọ:

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

Ọ dị ka ọ dị mfe, mana nke a bụ ebe ọnyà na-amalite. Na Consul anyị na-arụ ọrụ na njikọ echekwara site na https na njikọ njikọ anyị ga-adị ka nke a:

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

Mana ọ naghị arụ ọrụ otu ahụ. Na mmalite, Patroni enweghị ike jikọọ na Consul n'ihi na ọ ka na-agbalị ịga site na http.

Koodu isi mmalite Patroni nyere aka dozie nsogbu ahụ. Ọ dị mma na e dere ya na Python. Ọ na-apụta na a naghị atụgharị paramita nnabata n'ụzọ ọ bụla, a ghaghị ịkọwapụta usoro ahụ na atụmatụ ahụ. Nke a bụ ihe ngọngọ nhazi ọrụ maka ịrụ ọrụ na Consul dị ka anyị:

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

Consul-ndụmọdụ

Yabụ, anyị ahọrọla nchekwa nchekwa. Ugbu a, anyị kwesịrị ịghọta otú PgBouncer ga-esi gbanwee nhazi ya mgbe onye ndu gbanwere na ụyọkọ Patroni. Enweghị azịza nye ajụjụ a na akwụkwọ ahụ, n'ihi na ... Na ụkpụrụ, ịrụ ọrụ na PgBouncer adịghị akọwa ebe ahụ.

N'ịchọ ihe ngwọta, anyị chọtara otu isiokwu (ọ dị nwute, anaghị m echeta aha ahụ), ebe e dere na Consul-template na-enyere aka na ijikọta PgBouncer na Patroni. Nke a kpaliri anyị ịmụ ọrụ nke Consul-template.

Ọ tụgharịrị na Consul-template na-enyocha nhazi nke ụyọkọ PostgreSQL na Consul. Mgbe onye ndu gbanwere, ọ na-emelite nhazi PgBouncer wee zipụ iwu ka ibugharịa ya.

Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Nnukwu uru nke template bụ na a na-echekwa ya dị ka koodu, ya mere, mgbe ị na-agbakwunye shard ọhụrụ, ọ ga-ezuru ịme ihe ọhụrụ na imelite template ahụ na-akpaghị aka, na-akwado Akụrụngwa dị ka ụkpụrụ koodu.

Ihe owuwu ọhụrụ nwere Patroni

N'ihi ya, anyị nwetara atụmatụ ọrụ ndị a:
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Ihe nkesa ngwa niile na-enweta ihe nkwụnye ego → n'azụ ya, e nwere ihe atụ abụọ nke PgBouncer → na oge ọ bụla a Consul-template na-agba ọsọ, nke na-enyocha ọnọdụ nke ụyọkọ Patroni ọ bụla ma na-enyocha mkpa PgBouncer config, nke na-eduzi arịrịọ onye ndu ugbu a. nke ụyọkọ nke ọ bụla.

Nnwale ntuziaka

Tupu ịmalite ya n'ime mmepụta, anyị malitere atụmatụ a na obere ule nyocha ma lelee ọrụ nke ịgbanwee akpaka. Ha meghere bọọdụ ahụ, kpalie ihe mmado ahụ ma n'oge ahụ "gburu" onye ndu nke ụyọkọ ahụ. Na AWS, naanị ihe ị ga - eme bụ gbanyụọ ihe atụ site na njikwa.

Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Ihe mmado ahụ laghachiri n'ime sekọnd 10-20, wee malite ịkwagharị nke ọma ọzọ. Nke a pụtara na ụyọkọ Patroni rụrụ ọrụ nke ọma: ọ gbanwere onye ndu, ziga ozi na Consul, na Consul-template welitere ozi a ozugbo, dochie nhazi PgBouncer wee ziga iwu ka ibugharịa.

Kedu ka esi adị ndụ n'okpuru ibu dị elu ma nọgide na-enwe obere oge nkwụsịtụ?

Ihe niile na-arụ ọrụ nke ọma! Ma ajụjụ ọhụrụ na-ebilite: Olee otú ọ ga-esi arụ ọrụ n'okpuru nnukwu ibu? Kedu ka esi eme ngwa ngwa na n'enweghị nsogbu wepụta ihe niile na mmepụta?

Ebe ule nke anyị na-eduzi ule ibu na-enyere anyị aka ịza ajụjụ mbụ. Ọ bụ otu ihe kpamkpam na mmepụta na ụkpụrụ ụlọ ma mepụta data nnwale, nke ruru nha nha nhata na mmepụta. Anyị na-ekpebi naanị "igbu" otu n'ime ndị nna ukwu PostgreSQL n'oge ule wee hụ ihe na-eme. Ma tupu nke ahụ, ọ dị mkpa ịlele ntinye aka na-akpaghị aka, n'ihi na na gburugburu ebe a anyị nwere ọtụtụ PostgreSQL shards, n'ihi ya, anyị ga-enweta ezigbo ule nke nhazi nhazi tupu mmepụta.

Ọrụ abụọ a na-ele anya dị oke egwu, mana anyị nwere PostgreSQL 9.6. Enwere ike anyị nwere ike imelite na 11.2 ozugbo?

Anyị na-ekpebi ime nke a na nkebi abụọ: buru ụzọ melite ụdị ahụ na 2, wee malite Patroni.

Mmelite PostgreSQL

Ka iwelite ụdị PostgreSQL ngwa ngwa, ị ga-eji nhọrọ ahụ -k, nke a na-emepụta njikọ siri ike na diski na ọ dịghị mkpa iṅomi data gị. Na ọdụ data nke 300-400 GB, mmelite na-ewe 1 sekọnd.

Anyị nwere ọtụtụ shards, ya mere mmelite ahụ kwesịrị ime ya na-akpaghị aka. Iji mee nke a, anyị dere akwụkwọ egwuregwu nwere ike ịrụrụ anyị usoro mmelite niile:

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

Ọ dị mkpa iburu n'obi ebe a na tupu ịmalite nkwalite ahụ, ị ​​ga-emerịrị ya na paramita --eleleiji jide n'aka na nkwalite ahụ ga-ekwe omume. Edemede anyị na-edochikwa nhazi n'oge nkwalite. Ederede anyị dechara na sekọnd 30, nke bụ ezigbo nsonaazụ.

Mwepụta nke Patroni

Iji dozie nsogbu nke abụọ, naanị lelee nhazi Patroni. Ebe nchekwa gọọmentị nwere nhazi ihe atụ na initdb, nke na-ahụ maka ịmalite nchekwa data ọhụrụ mgbe ewepụtara Patroni na mbụ. Mana ebe ọ bụ na anyị enweelarị nchekwa data emebere, anyị wepụrụ ngalaba a na nhazi ahụ.

Mgbe anyị malitere ịwụnye Patroni na ụyọkọ PostgreSQL dị njikere ma malite ya, anyị zutere nsogbu ọhụrụ: a na-ewepụta sava abụọ ahụ dị ka onye ndu. Patroni amaghị ihe ọ bụla gbasara ọnọdụ mmalite nke ụyọkọ ahụ ma gbalịa ịmegharị sava abụọ ahụ dị ka ụyọkọ abụọ dị iche iche nwere otu aha. Iji dozie nsogbu a, ịkwesịrị ihichapụ ndekọ data na ohu ahụ:

rm -rf /var/lib/postgresql/

A ghaghị ime nke a nanị na ohu ahụ!

Mgbe ị na-ejikọta oyiri dị ọcha, Patroni na-eme onye ndu ndabere ma weghachite ya na oyiri ahụ, wee jide ọnọdụ dị ugbu a site na iji wal logs.

Ihe isi ike ọzọ anyị zutere bụ na a na-akpọ ụyọkọ PostgreSQL niile na ndabara. Mgbe ụyọkọ nke ọ bụla amaghị ihe ọ bụla gbasara ibe ya, nke a bụ ihe nkịtị. Mana mgbe ịchọrọ iji Patroni, ụyọkọ niile ga-enwerịrị aha pụrụ iche. Ihe ngwọta bụ ịgbanwe aha ụyọkọ na nhazi PostgreSQL.

Nnwale ibu

Anyị malitere nnwale na-egosipụta ka ndị ọrụ si arụ ọrụ na bọọdụ. Mgbe ibu ahụ ruru nkezi anyị kwa ụbọchị, anyị megharịrị otu ule ahụ, anyị na onye ndu PostgreSQL gbanyụrụ otu ihe atụ. Ihe nkwụsị nke akpaaka na-arụ ọrụ dị ka anyị tụrụ anya: Patroni gbanwere onye ndu, Consul-template emelitere nhazi PgBouncer ma zipụ iwu ka ọ bugharịa. Dị ka eserese anyị na Grafana, o doro anya na e nwere igbu oge nke 20-30 sekọnd na obere njehie sitere na sava ndị metụtara njikọ na nchekwa data. Nke a bụ ọnọdụ nkịtị, a na-anabata ụkpụrụ ndị dị otú ahụ maka ọdịda anyị ma dị mma karịa oge nkwụsị ọrụ.

Mwepụta nke Patroni n'ime mmepụta

N’ihi ya, anyị chepụtara atụmatụ a:

  • Nyefee Consul-template na ihe nkesa PgBouncer wee malite;
  • Mmelite PostgreSQL na ụdị 11.2;
  • Ịgbanwe aha ụyọkọ;
  • Mwepụta ụyọkọ Patroni.

N'otu oge ahụ, atụmatụ anyị na-enye anyị ohere ịme isi ihe mbụ ọ fọrọ nke nta ka ọ bụrụ oge ọ bụla; anyị nwere ike wepụ PgBouncer ọ bụla n'ọrụ n'otu n'otu ma rụọ ọrụ na mwepụta na mwepụta nke consul-template na ya. Nke ahụ bụ ihe anyị mere.

Maka ule ngwa ngwa, anyị na-eji ike eme ihe, ebe ọ bụ na anyị anwalela akwụkwọ egwuregwu ahụ dum na gburugburu ule, na oge igbu oge maka edemede zuru ezu bụ site na 1,5 ruo 2 nkeji maka shard ọ bụla. Anyị nwere ike ibugharị ihe niile n'otu n'otu na shard ọ bụla na-akwụsịghị ọrụ anyị, mana anyị ga-agbanyụọ PostgreSQL ọ bụla ruo ọtụtụ nkeji. N'okwu a, ndị ọrụ nke data dị na shard a agaghị enwe ike ịrụ ọrụ nke ọma n'oge a, nke a anabataghịkwa anyị.

Ụzọ nke ọnọdụ a e mere atụmatụ mmezi, nke anyị na-eme kwa ọnwa 3. Nke a bụ windo maka ọrụ ahaziri, mgbe anyị kwụsịrị ọrụ anyị kpamkpam wee melite ọnọdụ nchekwa data. Otu izu fọdụụrụ windo na-esote, ma anyị kpebiri ichere naanị maka ịkwadebekwu. N'oge a na-echere, anyị na-agbakọkwa nzọ anyị: maka PostgreSQL shard ọ bụla, anyị welitere ihe atụ mapụtara ma ọ bụrụ na ọdịda, iji chekwaa data kachasị ọhụrụ, wee gbakwunye ihe atụ ọhụrụ maka shard ọ bụla, nke kwesịrị ịghọ ihe ọhụrụ na Patroni. ụyọkọ, ka ọ ghara inye iwu ka ihichapụ data . Ihe a niile nyere aka belata ihe ize ndụ nke njehie.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Anyị maliteghachiri ọrụ anyị, ihe niile na-arụ ọrụ dị ka o kwesịrị, ndị ọrụ nọgidere na-arụ ọrụ, ma na eserese ndị anyị hụrụ ibu dị oke elu na sava Consul.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Gịnị kpatara na anyị ahụghị nke a na gburugburu ule? Nsogbu a na-egosi nke ọma na ọ dị mkpa ịgbaso Akụrụngwa dị ka ụkpụrụ koodu ma melite akụrụngwa niile, site na gburugburu ule ruo na mmepụta. Ma ọ bụghị ya, ọ dị mfe ịnweta nsogbu anyị nwetara. Kedu ihe mere? Consul pụtara na mbụ na mmepụta, wee na gburugburu ule; N'ihi ya, na gburugburu ule ụdị nke Consul dị elu karịa na mmepụta. Naanị n'otu n'ime mwepụta ndị a, edozila ihichapụ CPU mgbe ya na consul-template na-arụ ọrụ. Yabụ na anyị emelitere Consul, wee dozie nsogbu ahụ.

Malitegharịa ụyọkọ Patroni

Agbanyeghị, anyị nwetara nsogbu ọhụrụ nke anyị na-atụghị anya ya. Mgbe ị na-emelite Consul, anyị na-ewepụ ọnụ Consul site na ụyọkọ ahụ site na iji iwu ezumike consul → Patroni na-ejikọ na sava Consul ọzọ → ihe niile na-arụ ọrụ. Mana mgbe anyị rutere na nke ikpeazụ nke ụyọkọ Consul wee ziga ya iwu ikike ịhapụ ndị nnọchi anya, ụyọkọ Patroni niile maliteghachiri, na n'ime ndekọ ahụ, anyị hụrụ njehie a:

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>

Ụyọkọ Patroni enweghị ike ịnweta ozi gbasara ụyọkọ ya wee malitegharịa.

Iji chọta ngwọta, anyị kpọtụụrụ ndị dere Patroni site na okwu na github. Ha tụrụ aro ndozi na faịlụ nhazi anyị:

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

Anyị nwere ike ịmegharị okwu ahụ na gburugburu ule wee nwalee ntọala ndị a ebe ahụ, mana ọ dị nwute na ha arụghị ọrụ.

Nsogbu a ka edozibeghị. Anyị na-eme atụmatụ ịnwale azịza ndị a:

  • Jiri onye nnọchi anya Consul na ihe atụ nke ụyọkọ Patroni;
  • Dozie nsogbu na koodu.

Anyị na-aghọta ebe njehie ahụ mere: eleghị anya, nsogbu dị na iji oge nkwụsị nke ndabara, nke na-adịghị agafe na faịlụ nhazi. Mgbe e wepụrụ ihe nkesa Consul ikpeazụ na ụyọkọ ahụ, ụyọkọ Consul dum na-ajụ oyi, nke na-adịru ogologo oge karịa otu sekọnd; n'ihi nke a, Patroni enweghị ike ịnweta ọnọdụ nke ụyọkọ ahụ wee malitegharịa ụyọkọ ahụ kpamkpam.

Ọ dabara nke ọma, anyị ahụghị mperi ọzọ.

Nsonaazụ nke iji Patroni

Mgbe mmalite nke Patroni gachara nke ọma, anyị gbakwunyere ihe oyiri ọzọ na ụyọkọ ọ bụla. Ugbu a ụyọkọ nke ọ bụla nwere ụdị nke quorum: otu onye ndu na oyiri abụọ, iji chebe megide ụbụrụ gbawara agbawa mgbe ọ na-agbanwe.
Ụyọkọ Failover PostgreSQL + Onye enyemaka. Ahụmahụ mmejuputa

Patroni na-arụ ọrụ na mmepụta ihe karịrị ọnwa atọ. N'oge a, o jisiri ike nyere anyị aka. N'oge na-adịbeghị anya, onye ndu nke otu n'ime ụyọkọ ahụ nwụrụ na AWS, nkwụsị na-akpaghị aka na-arụ ọrụ na ndị ọrụ nọgidere na-arụ ọrụ. Patroni emezuola isi ọrụ ya.

Nchịkọta dị mkpirikpi nke iji Patroni:

  • Mfe nke mgbanwe nhazi. O zuru ezu ịgbanwe nhazi ahụ n'otu oge ma ọ ga-emetụta ụyọkọ dum. Ọ bụrụ na achọrọ nrụgharị iji tinye nhazi ọhụrụ ahụ, Patroni ga-agwa gị nke a. Patroni nwere ike iji otu iwu malitegharịa ụyọkọ ahụ dum, nke dịkwa mma nke ukwuu.
  • The akpaka failover na-arụ ọrụ na ugbua enyerela anyị aka pụta.
  • Na-emelite PostgreSQL na-enweghị oge nkwụsị ngwa. Ị ga-ebu ụzọ melite ụdịdị ọhụrụ ahụ, wee gbanwee onye ndu na ụyọkọ Patroni ma melite onye ndu ochie. N'okwu a, ule dị mkpa nke ọdịda akpaaka na-eme.

isi: www.habr.com

Tinye a comment