Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

I le tusiga o le a ou taʻuina atu ia te oe le auala na matou faʻafeiloaʻi ai le mataupu o le PostgreSQL faʻapalepale faʻaletonu, aisea na taua ai mo i matou ma le mea na tupu i le faaiuga.

O lo'o i ai la matou auaunaga fa'atumuina tele: 2,5 miliona tagata fa'aoga i le lalolagi atoa, 50K+ tagata fa'aogaina i aso uma. O loʻo iai 'auʻaunaga i Amazone i le tasi itulagi o Aialani: 100+ 'auʻaunaga eseese o loʻo faʻaogaina pea, lea e toetoe lava 50 o loʻo i ai faʻamaumauga.

O le pito i tua atoa o se talosaga Java tele monolithic stateful lea e faʻamautu ai se fesoʻotaʻiga websocket faifai pea ma le kalani. Pe a galulue le tele o tagata faʻaoga i luga o le laupapa e tasi i le taimi e tasi, latou te vaʻaia uma suiga i le taimi moni, aua matou te tusia suiga taʻitasi i le database. E tusa ma le 10K talosaga i le sekone i a matou faʻamaumauga. I le uta maualuga i Redis, matou te tusia 80-100K talosaga i le sekone.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Aisea na matou sui ai mai Redis i PostgreSQL

I le taimi muamua, o la matou 'auʻaunaga sa galulue faʻatasi ma Redis, o se faleoloa autu-taua e teu uma faʻamaumauga i le RAM a le server.

Tulaga lelei o Redis:

  1. Saosaoa tali maualuga, aua o mea uma e teuina i le manatua;
  2. Faigofie o le faaleoleo ma le toe faia.

Le lelei o Redis mo i matou:

  1. E leai ni fefa'atauaiga moni. Sa matou taumafai e faʻataʻitaʻiina i latou i le tulaga o la matou talosaga. Ae paga lea, e le'i galue lelei i taimi uma ma e mana'omia ai le tusiaina o tulafono lavelave.
  2. Ole aofa'i o fa'amaumauga e fa'atapula'aina ile aofa'i ole manatua. A o faʻateleina le aofaʻi o faʻamaumauga, o le a tupu le manatua, ma, i le faaiuga, o le a tatou taufetuli i uiga o le faʻataʻitaʻiga filifilia, lea i le AWS e manaʻomia ai le taofi o la tatou auaunaga e sui ai le ituaiga o faʻataʻitaʻiga.
  3. E manaʻomia le tausia pea o se tulaga maualalo maualalo, aua. e matua tele naua a matou talosaga. Ole maualuga ole tuai ole tulaga ole 17-20ms. I le maualuga o le 30-40 ms, matou te maua tali uumi i talosaga mai la matou talosaga ma le faʻaleagaina o le auaunaga. O le mea e leaga ai, na tupu lenei mea ia i matou ia Setema 2018, ina ua maua e se tasi o faʻataʻitaʻiga ma Redis mo nisi mafuaʻaga le tumau 2 taimi sili atu nai lo le masani. Ina ia foia le mataupu, na matou taofia le auaunaga i le aoauli mo le tausiga e leʻi faʻatulagaina ma suia le faʻafitauli Redis faʻataʻitaʻiga.
  4. E faigofie lava ona maua fa'amaumauga e le tutusa e tusa lava pe i ai ni mea sese laiti i le code ona fa'aalu lea o le tele o le taimi e tusi ai le code e fa'asa'o ai nei fa'amaumauga.

Na matou amanaʻia mea leaga ma iloa e manaʻomia ona matou siitia atu i se mea e sili atu ona faigofie, faʻatasi ai ma fefaʻatauaiga masani ma faʻaitiitia le faʻalagolago i le latency. Faia suʻesuʻega, suʻesuʻeina le tele o filifiliga ma filifili PostgreSQL.

Ua matou siitia atu i se database fou mo le 1,5 tausaga ua maeʻa ma ua na o sina vaega itiiti o faʻamaumauga, o lea o loʻo matou galulue faʻatasi ma Redis ma PostgreSQL. E tele fa'amatalaga e uiga i la'asaga o le fe'avea'i ma le fesuia'i o fa'amaumauga i le va o fa'amaumauga o lo'o tusia i totonu tala a la'u uo faigaluega.

Ina ua amata ona matou siitia, o la matou talosaga na galue saʻo ma le database ma maua le master Redis ma PostgreSQL. O le PostgreSQL cluster e aofia ai se matai ma se faʻataʻitaʻiga faʻatasi ai ma faʻasologa faʻasolosolo. O le ala lea e foliga mai ai le polokalame database:
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Fa'atinoina o le PgBouncer

A o matou feoai, o loʻo faʻatupulaia foi le oloa: o le numera o tagata faʻaoga ma le numera o sapalai na galulue ma PostgreSQL ua faʻateleina, ma ua amata ona leai ni fesoʻotaʻiga. PostgreSQL fa'atupuina se fa'agasologa ese'ese mo so'oga ta'itasi ma fa'aaoga punaoa. E mafai ona e faʻateleina le numera o fesoʻotaʻiga e oʻo atu i se tulaga patino, a leai o loʻo i ai se avanoa e maua ai le faʻatinoga o faʻamaumauga faʻamaumauga suboptimal. O le filifiliga sili i se tulaga faapena o le filifilia lea o se pule fesoʻotaʻiga o le a tu i luma o le faʻavae.

E lua a matou filifiliga mo le pule o fesoʻotaʻiga: Pgpool ma PgBouncer. Ae o le mea muamua e le lagolagoina le faiga fefaʻatauaʻiga o le galue ma le database, o lea na matou filifilia ai PgBouncer.

Ua uma ona matou fa'atulagaina le faiga o galuega nei: o la matou talosaga e maua ai le tasi PgBouncer, i tua o lo'o i ai matai PostgreSQL, ma tua atu o matai ta'itasi o lo'o i ai le fa'atusa e tasi ma le fa'asologa fa'atasi.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

I le taimi lava e tasi, e le mafai ona matou teuina le aofaʻi atoa o faʻamatalaga i PostgreSQL ma o le saoasaoa o le galue ma le database e taua mo i matou, o lea na matou amata ai le faʻasoaina o PostgreSQL i le tulaga o talosaga. O le polokalame o loʻo faʻamatalaina i luga e faigofie tele mo lenei mea: pe a faʻaopoopoina se PostgreSQL shard fou, ua lava le faʻafouina o le PgBouncer configuration ma e mafai ona vave galue le talosaga ma le shard fou.

PgBouncer failover

O lenei polokalame na aoga seia oo i le taimi na maliu ai na o le PgBouncer instance. O loʻo matou i ai i le AWS, lea o loʻo faʻaogaina uma tulaga i luga o meafaigaluega e mate i lea taimi ma lea taimi. I ia tulaga, o le faʻataʻitaʻiga naʻo le alu i meafaigaluega fou ma toe galue. Na tupu lenei mea i le PgBouncer, ae na le avanoa. O le taunuuga o lenei pa'ū o le le avanoa o la matou auaunaga mo le 25 minute. E fautuaina e le AWS le faʻaogaina o le faʻaogaina o tagata faʻaoga mo ia tulaga, e leʻi faʻatinoina i lo tatou atunuu i lena taimi.

Ina ua uma lena, sa matou mafaufau loloto e uiga i le faapalepale sese o PgBouncer ma PostgreSQL fuifui, ona o se tulaga faapena e mafai ona tupu i soo se tulaga i totonu o la matou AWS account.

Na matou fausia le PgBouncer fault tolerance scheme e pei ona taua i lalo: o lo'o maua uma e 'au'aunaga talosaga le Network Load Balancer, i tua atu e lua PgBouncers. O PgBouncer ta'itasi e va'ava'ai i le matai PostgreSQL e tasi o fasi ta'itasi. Afai e toe tupu se fa'alavelave fa'afuase'i o le AWS, e toe fa'asaga uma fe'avea'i i le isi PgBouncer. Network Load Balancer failover ua saunia e le AWS.

O lenei polokalame e faigofie ai ona faʻaopoopo PgBouncer servers fou.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Fausia se PostgreSQL Failover Cluster

Ina ua foia lenei faafitauli, sa matou mafaufau i filifiliga eseese: failover tusi-tusia, repmgr, AWS RDS, Patroni.

Fa'amatalaga tusitusia e le tagata lava ia

E mafai ona latou mataʻituina le galuega a le matai ma, afai e le manuia, faʻalauiloa le faʻataʻitaʻiga i le matai ma faʻafouina le faʻatulagaga PgBouncer.

O le lelei o lenei auala e sili ona faigofie, aua e te tusia tusitusiga oe lava ma malamalama lelei i le auala latou te galulue ai.

Cons:

  • Atonu e le'i oti le matai, nai lo le faaletonu o feso'otaiga. Failover, le iloa lenei mea, o le a faʻalauiloaina le kopi i le matai, aʻo faʻaauau pea ona galue le matai tuai. O le iʻuga, o le a matou mauaina ni 'auʻaunaga se lua i le matafaioi o le matai ma matou te le iloa poʻo ai oi latou o loʻo i ai faʻamatalaga lata mai. O lenei tulaga e taʻua foi o le faiʻai vaeluaina;
  • Na tuua i matou e aunoa ma se tali. I la matou faʻatulagaga, o le matai ma le tasi faʻataʻitaʻiga, pe a uma ona fesuiaʻi, o le faʻataʻitaʻiga e alu i luga i le matai ma e le toe i ai ni a matou faʻataʻitaʻiga, o lea e tatau ai ona matou faʻaopoopo ma le lima se faʻataʻitaʻiga fou;
  • Matou te manaʻomia le mataʻituina atili o le gaioiga failover, aʻo matou 12 PostgreSQL shards, o lona uiga e tatau ona matou mataʻituina 12 fuifui. Faatasi ai ma le faateleina o le numera o shards, e tatau foi ona e manatua e faafou le failover.

Failover tusitusia e le tagata lava ia e foliga faigata tele ma e manaʻomia le lagolago e le taua. Faatasi ai ma se vaega PostgreSQL tasi, o le a sili ona faigofie le filifiliga, ae e le fuaina, o lea e le talafeagai mo i tatou.

Repmgr

Replication Manager mo PostgreSQL fuifui, lea e mafai ona pulea le faagaoioiga o se vaega PostgreSQL. I le taimi lava e tasi, e leai se faʻaogaina otometi mai le pusa, o lea mo le galuega e te manaʻomia e tusi ai lau lava "afifi" i luga o le fofo maeʻa. O lea la, o mea uma lava e mafai ona sili atu ona faigata nai lo tusitusiga a le tagata lava ia, o lea matou te leʻi taumafai ai Repmgr.

AWS RDS

Lagolago mea uma tatou te manaʻomia, iloa le auala e fai ai faʻamaumauga ma tausia se vaitaele o fesoʻotaʻiga. E i ai le suiga otometi: pe a maliu le matai, e avea le kopi ma matai fou, ma suia e le AWS le dns faamaumauga i le matai fou, ae o le kopi e mafai ona maua i AZ eseese.

O mea le lelei e aofia ai le leai o ni fetuunaiga lelei. Mo se faʻataʻitaʻiga o le faʻalogo lelei: o matou faʻataʻitaʻiga e iai tapulaʻa mo fesoʻotaʻiga tcp, lea, o le mea e leaga ai, e le mafai ona faia i le RDS:

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

E le gata i lea, o le AWS RDS e toetoe lava faaluaina le taugata nai lo le tau masani, o le mafuaaga autu lea o le lafoaia o lenei fofo.

Patroni

Ole faʻataʻitaʻiga lea o le python mo le puleaina o le PostgreSQL ma faʻamaumauga lelei, faʻaogaina otometi ma le faʻailoga autu ile github.

Tulaga lelei o Patroni:

  • O lo'o fa'amatalaina ta'iala ta'itasi, e manino lava pe fa'apefea ona galue;
  • Otometi failover galue i fafo o le pusa;
  • Tusia i le python, ma talu ai tatou te tusia le tele i le python, o le a sili atu ona faigofie mo i tatou ona taulimaina faafitauli ma, atonu, e fesoasoani foi i le atinaʻeina o le poloketi;
  • Pulea atoatoa PostgreSQL, faʻatagaina oe e suia le faʻatulagaga i luga o nodes uma o le fuifui i le taimi e tasi, ma afai e manaʻomia le toe faʻafouina o le fuifui e faʻaoga le faʻatulagaga fou, ona mafai lea ona toe faia lenei mea e faʻaaoga ai le Patroni.

Cons:

  • E le o manino mai faʻamaumauga pe faʻapefea ona galue saʻo ma PgBouncer. E ui lava e faigata ona taʻua o se minus, aua o le galuega a Patroni o le pulea lea o PostgreSQL, ma pe faʻafefea ona alu fesoʻotaʻiga ma Patroni ua uma ona tatou faʻafitauli;
  • E i ai ni nai faʻataʻitaʻiga o le faʻatinoina o le Patroni i luga o fua tetele, ae o loʻo i ai le tele o faʻataʻitaʻiga o le faʻatinoga mai le sasa.

O le i'uga, na matou filifilia Patroni e fai se fuifui failover.

Patroni Fa'atinoga Fa'agasologa

I luma o Patroni, sa i ai a matou 12 PostgreSQL shards i se faʻatulagaga o le tasi matai ma le tasi faʻataʻitaʻiga faʻatasi ai ma le faʻaogaina o le asynchronous. Na maua e le 'au'aunaga talosaga ia fa'amaumauga e ala i le Network Load Balancer, i tua atu e lua fa'atasi ma le PgBouncer, ma tua atu ia i latou sa i ai uma sa'u PostgreSQL.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Ina ia faʻatinoina le Patroni, matou te manaʻomia le filifilia o se faʻasalalauga tuʻufaʻatasiga tuʻufaʻatasia. E galue Patroni ma fa'asoa fa'apipi'i fa'apipi'i e pei ole etcd, Zookeeper, Consul. E na'o le matou vaega o le Konesula atoa i luga o le maketi, lea e galulue fa'atasi ma Vault ma matou te le toe fa'aaogaina. Ose mafuaaga lelei e amata ai ona fa'aaoga le Konesula mo lona fa'amoemoe.

E faapefea ona galulue Patroni ma Konesula

E iai la matou vaega o le Konesula, lea e tolu nodes, ma le Patroni cluster, lea e aofia ai se taʻitaʻi ma se faʻataʻitaʻiga (i le Patroni, o le matai e taʻua o le taʻitaʻi faʻapipiʻi, ma o pologa e taʻua o kopi). O fa'ata'ita'iga ta'itasi o le fuifui Patroni e tu'uina atu i taimi uma fa'amatalaga e uiga i le tulaga o le fuifui i le Konesula. O le mea lea, mai le Konesula e mafai ona e suʻeina i taimi uma le faʻatulagaina o le vaega o Patroni ma o ai le taʻitaʻi i le taimi nei.

Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Ina ia faʻafesoʻotaʻi Patroni i le Konesula, ua lava le suʻesuʻeina o faʻamaumauga aloaia, lea e fai mai e tatau ona e faʻamaonia se talimalo i le http poʻo le https format, e faʻatatau i le auala matou te galulue ai ma le Konesula, ma le fesoʻotaʻiga polokalame, filifiliga:

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

E foliga faigofie, ae o iinei e amata ai mailei. Faatasi ai ma le Konesula, matou te galulue i luga o se fesoʻotaʻiga malupuipuia e ala i le https ma o le matou fesoʻotaʻiga config o le a pei o lenei:

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

Ae e le aoga lena mea. I le amataga, e le mafai e Patroni ona faʻafesoʻotaʻi i le Konesula, aua e taumafai lava e alu i le http.

O le source code a Patroni na fesoasoani i le taulimaina o le faafitauli. Le mea lelei e tusia i le python. E foliga mai e le o faʻasalalau le faʻamaufaʻailoga talimalo i soʻo se auala, ma e tatau ona faʻamaonia le protocol i le polokalame. E fa'apea le fa'atusa o le poloka fa'atulagaina faigaluega mo le galulue ma le Konesula mo i matou:

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

consul-template

O lea, ua matou filifilia le teuina mo le faʻatulagaina. Ole taimi nei e manaʻomia ona tatou malamalama pe faʻafefea ona sui e le PgBouncer lona faʻatulagaina pe a suia le taʻitaʻi ile vaega ole Patroni. E leai se tali i lenei fesili i totonu o faʻamaumauga, aua. iina, i le mataupu faavae, galue ma PgBouncer e le o faamatalaina.

I le sailiga o se fofo, na matou maua ai se tusiga (Ou te faanoanoa e le manatua le ulutala) lea na tusia ai o le Сonsul-template na fesoasoani tele i le fetaui PgBouncer ma Patroni. O lea na fa'aosofia ai i matou e su'esu'e pe fa'apefea ona galue le Consul-template.

Na aliali mai o le Consul-template e mataʻituina pea le faʻatulagaina o le PostgreSQL cluster i le Consul. A sui le taʻitaʻi, e faʻafouina le faʻatulagaina o le PgBouncer ma tuʻuina atu se poloaiga e toe faʻaleleia.

Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

O se faʻaopoopoga tele o faʻataʻitaʻiga o loʻo teuina e pei o le code, o lea pe a faʻaopoopoina se faʻailoga fou, ua lava le faia o se tautinoga fou ma faʻafouina le faʻataʻitaʻiga otometi, lagolagoina le Atinaʻe e avea ma tulafono faʻavae.

Fa'ailoga fou ma Patroni

O le iʻuga, ua matou maua le polokalame lenei o galuega:
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

O lo'o maua uma e 'au'aunaga talosaga le paleni → e lua fa'ata'ita'iga o le PgBouncer i tua atu → i fa'ata'ita'iga ta'itasi, o le Consul-template ua fa'alauiloa, lea e mata'ituina le tulaga o vaega ta'itasi Patroni ma mata'ituina le talafeagai o le PgBouncer config, lea e tu'uina atu talosaga i le ta'ita'i o lo'o iai nei. o fuifui taitasi.

Su'ega tusilima

Na matou fa'atautaia lenei polokalame a'o le'i fa'alauiloa i luga o se si'osi'omaga fa'ata'ita'i la'ititi ma siaki le fa'agaioiga o le suiga otometi. Sa latou tatalaina le laupapa, aveese le fasi pepa, ma o le taimi lena na latou "fasiotia" ai le taitai o le fuifui. I le AWS, e faigofie lava e pei o le tapunia o le faʻataʻitaʻiga e ala i le faʻamafanafanaga.

Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Na toe foʻi le fasi pepa i totonu ole 10-20 sekone, ona toe amata ai lea ona gaoioi masani. O lona uiga o le Patroni cluster na galue saʻo: na suia le taʻitaʻi, auina atu le faʻamatalaga i Сonsul, ma Сonsul-template na vave ona pikiina lenei faʻamatalaga, suia le PgBouncer configuration ma auina atu le poloaiga e toe faʻaleleia.

E fa'afefea ona ola i lalo o le uta maualuga ma fa'aitiitia le taimi fa'aletonu?

E lelei atoatoa mea uma! Ae o loʻo i ai ni fesili fou: E faʻafefea ona galue i lalo o le uta maualuga? E faʻafefea ona vave ma saogalemu le taʻavale mea uma i le gaosiga?

Ole siosiomaga ole su'ega lea tatou te faia ai su'ega uta e fesoasoani ia i tatou e tali le fesili muamua. E tutusa lelei ma le gaosiga i tulaga o le fausaga ma ua maua ai faʻamaumauga o suʻega e tutusa lelei ile voluma ile gaosiga. Matou te filifili e "fasioti" se tasi o matai PostgreSQL i le taimi o le suʻega ma vaʻai pe o le a le mea e tupu. Ae i luma o lena, e taua le siakiina o le taʻavale otometi, aua i luga o lenei siʻosiʻomaga o loʻo i ai le tele o PostgreSQL shards, o lea o le a matou maua ai suʻega sili ona lelei o faʻasologa o tusitusiga aʻo leʻi faia.

O galuega uma e lua e foliga faʻapitoa, ae o loʻo ia i matou PostgreSQL 9.6. E mafai ona vave faʻaleleia i le 11.2?

Matou te filifili e fai i laasaga e 2: faʻaleleia muamua i le 11.2, ona faʻalauiloa lea o le Patroni.

PostgreSQL fa'afouga

Ina ia vave faʻafouina le PostgreSQL version, faʻaoga le filifiliga -k, lea e fausia ai sootaga faigata i luga o le disk ma e leai se manaʻoga e kopiina au faʻamatalaga. I luga o faʻavae o le 300-400 GB, o le faʻafouga e 1 sekone.

E tele a matou shards, o lea e manaʻomia ai le faʻafouina otometi. Ina ia faia lenei mea, matou te tusia se tusi taʻavale Ansible e faʻatautaia le faagasologa atoa o faʻafouga mo i matou:

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

E taua le maitauina iinei aʻo leʻi amataina le faʻaleleia, e tatau ona e faia i le parakalafa --siakiia mautinoa e mafai ona e faʻaleleia. O la matou tusitusiga e faia ai foi le sui o configs mo le umi o le faʻaleleia. Na maeʻa le matou tusitusiga i le 30 sekone, o se taunuuga sili ona lelei.

Tatala Patroni

Ina ia foia le faʻafitauli lona lua, naʻo le vaʻai i le faʻatulagaina o Patroni. O le faleteuoloa aloaia o loʻo i ai se faʻataʻitaʻiga faʻataʻitaʻiga ma initdb, lea e nafa ma le amataina o se database fou pe ae amata muamua Patroni. Ae talu ai ua uma ona i ai se faʻamaumauga tuʻufaʻatasia, ua na ona matou aveese lenei vaega mai le faʻatulagaga.

Ina ua amata ona matou faʻapipiʻi Patroni i luga o le PostgreSQL cluster ua leva ona i ai ma faʻatautaia, na matou taufetuli i se faʻafitauli fou: na amata uma 'auʻaunaga o se taʻitaʻi. E le iloa e Patroni se mea e uiga i le amataga o le fuifui ma taumafai e amata ia sapalai e lua o ni fuifui eseese se lua ma le igoa e tasi. Ina ia foia lenei faafitauli, e tatau ona e tapeina le lisi ma faʻamatalaga i luga o le pologa:

rm -rf /var/lib/postgresql/

E tatau ona faia lenei mea i luga o le pologa!

Pe a faʻafesoʻotaʻi se faʻataʻitaʻiga mama, e faia e Patroni se taʻitaʻi faʻavae backup ma toe faʻafoʻi i le faʻataʻitaʻiga, ona puʻeina lea o le tulaga o loʻo i ai nei e tusa ai ma ogalaau puipui.

O le isi fa'afitauli na matou feagai, o fa'aputuga PostgreSQL uma e fa'aigoaina autu e ala i le le mafai. A leai se mea e iloa e fuifui taitasi e uiga i le isi, o se mea masani lea. Ae a e manaʻo e faʻaaoga Patroni, ona tatau lea ona i ai i fuifui uma se igoa tulaga ese. O le fofo o le suia lea o le igoa fuifui i le PostgreSQL configuration.

suega uta

Ua matou faʻalauiloaina se suʻega e faʻataʻitaʻia ai le poto masani o tagata i luga o laupapa. Ina ua oʻo le uta i le averesi o aso taʻitasi, matou te toe faia le suʻega tutusa, matou tapeina le tasi faʻatasi ma le taʻitaʻi PostgreSQL. O le failover otometi na galue e pei ona matou faʻamoemoeina: Na suia e Patroni le taʻitaʻi, Consul-template faʻafouina le PgBouncer configuration ma auina atu se poloaiga e toe uta. E tusa ai ma a matou kalafi i Grafana, na manino lava o loʻo i ai le tuai o 20-30 sekone ma se vaega itiiti o mea sese mai 'auʻaunaga e fesoʻotaʻi ma le fesoʻotaʻiga i le database. O se tulaga masani lea, o ia tulaga taua e talia mo a tatou fa'aletonu ma e mautinoa lava e sili atu nai lo le taimi ole auaunaga.

Aumai Patroni i le gaosiga

O se taunuuga, na matou o mai ma le fuafuaga lenei:

  • Tu'u le Consul-template i PgBouncer servers ma fa'alauiloa;
  • PostgreSQL fa'afouga ile version 11.2;
  • Suia le igoa o le fuifui;
  • Amataina le Patroni Cluster.

I le taimi lava e tasi, o la matou polokalame e mafai ai ona matou faia le mea muamua toetoe lava i soo se taimi, e mafai ona matou aveesea PgBouncer taʻitasi mai le galuega ma faʻapipiʻi ma faʻatautaia le consul-template i luga. O lea na matou faia ai.

Mo le faʻapipiʻiina vave, matou te faʻaaogaina le Ansible, talu ai ua uma ona matou faʻataʻitaʻiina tusi taʻaloga uma i luga o se siosiomaga faʻataʻitaʻiga, ma o le taimi o le faʻatinoina o le tusitusiga atoa e mai le 1,5 i le 2 minute mo taʻitasi taʻitasi. E mafai ona matou fa'asolo atu mea uma i vaega taitasi e aunoa ma le taofia o la matou tautua, ae e tatau ona matou tapeina PostgreSQL taitasi mo ni nai minute. I lenei tulaga, o tagata faʻaoga o latou faʻamaumauga i luga o lenei shard e le mafai ona galue atoatoa i le taimi nei, ma e le taliaina mo i matou.

O le auala e alu ese ai mai lenei tulaga o le tausiga fuafuaina, lea e faia i le 3 masina. Ole fa'amalama lea mo galuega fa'atulagaina, pe a tatou tapunia atoa la tatou auaunaga ma fa'aleleia a tatou fa'amaumauga fa'amaumauga. E tasi le vaiaso o totoe i le isi faamalama, ma na matou filifili e faatali ma sauni atili. I le taimi faʻatali, sa matou faʻamautinoaina foi i matou lava: mo PostgreSQL shard taʻitasi, matou te faʻatupuina se kopi faʻapitoa i le tulaga o le le mafai ona tausia faʻamatalaga lata mai, ma faʻaopoopo se faʻataʻitaʻiga fou mo shard taʻitasi, lea e tatau ona avea ma faʻataʻitaʻiga fou i le vaega o Patroni, ina ia le faia se poloaiga e tape faʻamaumauga . O nei mea uma na fesoasoani e faʻaitiitia le lamatiaga o mea sese.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Na matou toe amataina le matou auaunaga, sa lelei mea uma e pei ona tatau ai, sa faʻaauau pea ona galulue tagata faʻaoga, ae i luga o kalafi na matou matauina ai se uta maualuga le masani i luga o sapalai a le Konesula.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Aisea na matou le vaaia ai lenei mea i le siosiomaga o su'ega? O lenei faʻafitauli o loʻo faʻaalia lelei ai e tatau ona mulimulitaʻia le Atinaʻe e avea ma tulafono faʻavae ma faʻaleleia le atinaʻe atoa, mai siosiomaga suʻega i le gaosiga. A leai, e matua faigofie lava ona maua le faafitauli na matou maua. O le a le mea ua tupu? Na fa'aalia muamua le Konesula i luga o le gaosiga, ona sosoo ai lea ma luga o siosiomaga o su'ega, o se taunuuga, i luga o siosiomaga su'ega, o le lomiga a le Konesula na maualuga atu nai lo le gaosiga. Na'o se tasi o fa'asalalauga, na fo'ia ai le le'o o le CPU pe a galue ma le consul-template. O le mea lea, na o le faʻafouina o le Konesula, ma foia ai le faʻafitauli.

Toe amata le fuifui Patroni

Ae ui i lea, na matou maua se faʻafitauli fou, lea matou te leʻi masalomia. Pe a faʻafouina le Konesula, matou te aveese le node o le Konesula mai le fuifui e faʻaaoga ai le faʻatonuga o le consul leave → Patroni e fesoʻotaʻi i le isi Consul server → e aoga mea uma. Ae ina ua matou oʻo i le faʻataʻitaʻiga mulimuli o le vaega o le Konesula ma auina atu le faʻatonuga o le faʻatagaina o le Konesula, na toe amata uma vaega Patroni, ma i totonu o ogalaau na matou iloa ai le mea sese:

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>

Ua le mafai e le vaega o Patroni ona toe maua mai faamatalaga e uiga i lana fuifui ma toe amata.

Ina ia maua se fofo, matou faʻafesoʻotaʻi le tusitala Patroni e ala i se faʻafitauli ile github. Na latou fautuaina le faʻaleleia o a matou faila faila:

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

Na mafai ona matou toe faia le faʻafitauli i luga o se siosiomaga suʻega ma faʻataʻitaʻiina nei filifiliga iina, ae paga lea e leʻi aoga.

O le faafitauli o loʻo tumau pea e leʻi foia. Matou te fuafua e faʻataʻitaʻi fofo nei:

  • Fa'aaoga le Konesula-sui i fa'ata'ita'iga ta'itasi ta'itasi Patroni;
  • Fa'asa'o le mataupu i le code.

Matou te malamalama i le mea na tupu ai le mea sese: o le faʻafitauli atonu o le faʻaaogaina o le taimi faʻaletonu, lea e le faʻaaogaina e ala i le faila faila. Pe a aveese le server Konesula mulimuli mai le fuifui, o le vaega atoa o le Konesula e tautau mo le sili atu ma le sekone, ona o lenei mea, e le mafai e Patroni ona maua le tulaga o le fuifui ma toe amata atoa le fuifui atoa.

O le mea e lelei ai, matou te leʻi toe feagai ma ni mea sese.

I'uga o le fa'aaogaina o Patroni

Ina ua maeʻa le faʻalauiloaina manuia o Patroni, matou faʻaopoopoina se faʻataʻitaʻiga faʻaopoopo i fuifui taʻitasi. I le taimi nei i fuifui taitasi o loo i ai se foliga o se korama: tasi le taitai ma le lua kopi, mo le upega saogalemu i le tulaga o le vaelua-faiai pe a fesuiai.
Failover Cluster PostgreSQL + Patroni. Fa'atinoina le poto masani

Ua silia ma le tolu masina o galue Patoni i le gaosiga. I le taimi lea, ua uma ona ia fesoasoani ia i matou. Talu ai nei, na maliu ai le taʻitaʻi o se tasi o fuifui i le AWS, otometi failover galue ma faʻaauau pea ona galulue tagata faʻaoga. Na faataunuuina e Patoni lana galuega autu.

O se otootoga laʻititi o le faʻaaogaina o Patroni:

  • Faigofie o suiga fetuutuunai. Ua lava le suia o le faʻatulagaga i se tasi faʻataʻitaʻiga ma o le a tosoina i luga i le fuifui atoa. Afai e manaʻomia le toe faʻafouina e faʻaoga ai le faʻatulagaga fou, ona faʻailoa atu lea e Patroni ia oe. E mafai e Patroni ona toe amata le fuifui atoa i se poloaiga e tasi, lea e faigofie tele.
  • Otometi failover galue ma ua uma ona mafai ona fesoasoani ia i matou i fafo.
  • PostgreSQL faʻafouina e aunoa ma le faʻaogaina o le taimi. E tatau ona e fa'afou muamua le fa'atusa i le fa'afou fou, ona sui lea o le ta'ita'i ile vaega ole Patroni ma fa'afou le ta'ita'i tuai. I lenei tulaga, o le suʻega manaʻomia o le failover otometi e tupu.

puna: www.habr.com

Faaopoopo i ai se faamatalaga