Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Ao amin'ny lahatsoratra dia holazaiko aminao ny fomba nanatonanay ny olana momba ny fandeferana ny fahadisoana PostgreSQL, nahoana no nanjary zava-dehibe ho anay izany ary inona no nitranga tamin'ny farany.

Manana serivisy feno entana izahay: mpampiasa 2,5 tapitrisa manerantany, mpampiasa mavitrika 50K+ isan'andro. Ao amin'ny Amazone any amin'ny faritra iray any Irlandy no misy ireo mpizara: mpizara 100+ isan-karazany no miasa tsy tapaka, ka efa ho 50 amin'ireo no misy angona.

Ny backend manontolo dia rindranasa Java monolithic stateful lehibe izay mitazona fifandraisana websocket tsy tapaka amin'ny mpanjifa. Rehefa miasa eo amin'ny solaitrabe iray ny mpampiasa maromaro dia samy mahita ny fiovana amin'ny fotoana tena izy, satria manoratra ny fanovana tsirairay ao amin'ny angon-drakitra izahay. Manana fangatahana 10K isan-tsegondra izahay amin'ny angon-drakitray. Amin'ny entana ambony indrindra ao Redis, manoratra fangatahana 80-100K isan-tsegondra izahay.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Nahoana isika no nifindra avy amin'ny Redis mankany PostgreSQL

Tamin'ny voalohany, ny serivisyy dia niara-niasa tamin'ny Redis, fivarotana manan-danja izay mitahiry ny angona rehetra ao amin'ny RAM an'ny mpizara.

Ny tombony amin'ny Redis:

  1. Hafainganam-pandrenesana avo, satria voatahiry ao anaty fitadidiana ny zavatra rehetra;
  2. Mora ny backup sy replication.

Ny tsy fahampian'ny Redis ho antsika:

  1. Tsy misy fifampiraharahana tena izy. Niezaka nanahaka azy ireo izahay tamin'ny haavon'ny fampiharana anay. Indrisy anefa fa tsy nandeha tsara foana izany ary nitaky fanoratana kaody sarotra be.
  2. Ny habetsaky ny angona dia voafetra amin'ny habetsahan'ny fahatsiarovana. Rehefa mitombo ny habetsaky ny angona dia hitombo ny fitadidiana, ary, amin'ny farany, dia hihazakazaka amin'ny toetran'ny ohatra voafantina isika, izay ao amin'ny AWS dia mitaky ny fampiatoana ny serivisy mba hanovana ny karazana ohatra.
  3. Ilaina ny mitazona tsy tapaka ny haavon'ny latency ambany, satria. be dia be ny fangatahanay. Ny haavon'ny fahatarana tsara indrindra ho antsika dia 17-20 ms. Amin'ny haavon'ny 30-40 ms, mahazo valiny lava amin'ny fangatahana avy amin'ny fampiharana sy ny fahasimban'ny serivisy izahay. Indrisy anefa fa nitranga taminay izany tamin'ny Septambra 2018, rehefa nahazo fahatarana avo roa heny noho ny mahazatra ny iray tamin'ireo tranga niaraka tamin'i Redis noho ny antony sasany. Mba hamahana ilay olana dia natsahatra ny serivisy amin'ny mitataovovonana noho ny fikojakojana tsy voalamina ary nosoloinay ny ohatra Redis misy olana.
  4. Mora ny mahazo ny tsy fitovian'ny angon-drakitra na dia misy hadisoana kely aza ao amin'ny kaody ary avy eo mandany fotoana betsaka amin'ny fanoratana kaody hanitsiana izany data izany.

Noraisinay ny lafy ratsiny ary nahatsapa izahay fa mila mifindra amin'ny zavatra mety kokoa, miaraka amin'ny fifampiraharahana ara-dalàna ary tsy dia miankina amin'ny faharetana. Nanao fikarohana, nandinika safidy maro ary nisafidy ny PostgreSQL.

Efa 1,5 taona izao izahay no nifindra tany amin'ny angon-drakitra vaovao ary ampahany kely amin'ny angon-drakitra no nafindranay, noho izany dia miara-miasa amin'ny Redis sy PostgreSQL izahay ankehitriny. Misy fampahalalana bebe kokoa momba ny dingana amin'ny fifindran'ny angon-drakitra eo amin'ny angona lahatsoratry ny mpiara-miasa amiko.

Raha vao nanomboka nifindra izahay dia niasa mivantana tamin'ny angon-drakitra ny fampiharana anay ary niditra ny Master Redis sy PostgreSQL. Ny kluster PostgreSQL dia misy master sy replica misy replication asynchronous. Toy izao ny endriky ny skema database:
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Fampiharana ny PgBouncer

Nandritra ny fihetsehanay dia nivoatra ihany koa ny vokatra: nitombo ny isan'ny mpampiasa sy ny mpizara niasa tamin'ny PostgreSQL, ary nanomboka tsy nanana fifandraisana izahay. PostgreSQL dia mamorona dingana mitokana ho an'ny fifandraisana tsirairay ary mandany loharanon-karena. Azonao atao ny mampitombo ny isan'ny fifandraisana amin'ny teboka iray, raha tsy izany dia misy ny fahafahana mahazo ny fahombiazan'ny database suboptimal. Ny safidy tsara indrindra amin'ny toe-javatra toy izany dia ny fisafidianana mpitantana fifandraisana izay hijoro eo anoloan'ny fototra.

Nanana safidy roa ho an'ny mpitantana ny fifandraisana izahay: Pgpool sy PgBouncer. Saingy ny voalohany dia tsy manohana ny fomba fiasa miasa amin'ny angon-drakitra, ka nisafidy ny PgBouncer izahay.

Nametraka ity tetik'asa manaraka ity izahay: ny fampiharana anay dia miditra amin'ny PgBouncer iray, ao ambadik'izany dia misy ny tompon'ny PostgreSQL, ary ao ambadiky ny tompony tsirairay dia misy kopia iray misy replication asynchronous.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Nandritra izany fotoana izany, tsy afaka nitahiry ny angon-drakitra manontolo ao amin'ny PostgreSQL izahay ary zava-dehibe ho anay ny hafainganam-pandehan'ny asa miaraka amin'ny angon-drakitra, noho izany dia nanomboka nizara ny PostgreSQL izahay tamin'ny ambaratonga fampiharana. Ny tetika voalaza etsy ambony dia mety amin'izany: rehefa manampy shard PostgreSQL vaovao, dia ampy ny manavao ny config PgBouncer ary ny fampiharana dia afaka miasa avy hatrany amin'ny shard vaovao.

PgBouncer failover

Nandeha ity tetika ity mandra-pahatongan'ny fotoana nahafatesan'ny PgBouncer tokana. Ao amin'ny AWS isika, izay misy ny tranga rehetra mandeha amin'ny fitaovana izay maty tsindraindray. Amin'ny toe-javatra toy izany, ny ohatra dia mifindra amin'ny fitaovana vaovao ary miasa indray. Nitranga tamin'ny PgBouncer izany, saingy nanjary tsy azo. Ny vokatr'ity fahalavoana ity dia ny tsy fisian'ny serivisy nandritra ny 25 minitra. Ny AWS dia manoro hevitra ny fampiasana ny fandroahana amin'ny lafiny mpampiasa amin'ny toe-javatra toy izany, izay tsy nampiharina teto amintsika tamin'izany fotoana izany.

Taorian'izay dia nieritreritra tsara momba ny fandeferana ny PgBouncer sy ny PostgreSQL cluster izahay, satria mety hitranga ny toe-javatra mitovy amin'izany amin'ny tranga rehetra ao amin'ny kaonty AWS.

Namboarinay ny rafitra fandeferana ny fahadisoana PgBouncer toy izao manaraka izao: miditra amin'ny Network Load Balancer ny mpizara fampiharana rehetra, izay misy PgBouncers roa ao ambadika. Ny PgBouncer tsirairay dia mijery ny tompony PostgreSQL mitovy amin'ny shard tsirairay. Raha misy fianjeran'ny ohatra AWS indray, dia alefa amin'ny alalan'ny PgBouncer hafa ny fifamoivoizana rehetra. Ny failover Network Load Balancer dia nomen'ny AWS.

Ity tetika ity dia manamora ny fampidirana mpizara PgBouncer vaovao.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Mamorona Cluster Failover PostgreSQL

Rehefa mamaha ity olana ity dia nihevitra safidy samihafa izahay: failover nosoratan-tena, repmgr, AWS RDS, Patroni.

Skripta nosoratan'ny tena

Azon'izy ireo atao ny manara-maso ny asan'ny tompony ary, raha sendra ny tsy fahombiazany, dia mampiroborobo ny dika mitovy amin'ny tompony ary manavao ny fanamafisana PgBouncer.

Ny tombony amin'ity fomba ity dia ny fahatsorana ambony indrindra, satria ianao ihany no manoratra script ary azonao tsara ny fomba fiasan'izy ireo.

maharatsy ny mifampiresaka:

  • Mety tsy maty ny tompony, fa mety ho tsy fahombiazan'ny tambajotra. Failover, tsy mahafantatra izany, dia hampiroborobo ny dika mitovy amin'ny tompony, raha mbola hanohy ny asany ny tompony taloha. Vokatr'izany dia hahazo mpizara roa isika amin'ny andraikitry ny tompony ary tsy ho fantatsika hoe iza amin'izy ireo no manana angon-drakitra farany indrindra. Ity toe-javatra ity dia antsoina koa hoe split-brain;
  • Navela tsy nisy valiny izahay. Ao amin'ny konfigurasi ataontsika, ny master sy ny kopia iray, rehefa avy mifamadika, dia miakatra mankany amin'ny master ny kopia ary tsy manana kopia intsony isika, noho izany dia tsy maintsy manampy kopia vaovao amin'ny tanana isika;
  • Mila fanaraha-maso fanampiny momba ny fandidiana failover isika, raha manana 12 PostgreSQL shards, izay midika fa tsy maintsy manara-maso 12 clusters. Miaraka amin'ny fitomboan'ny isan'ny shards dia tsy maintsy tsaroanao koa ny manavao ny failover.

Toa sarotra be ny failover nosoratan-tena ary mila fanohanana tsy misy dikany. Miaraka amin'ny kluster PostgreSQL tokana, ity no safidy mora indrindra, saingy tsy mirefy, ka tsy mety amintsika.

Repmgr

Replication Manager ho an'ny kluster PostgreSQL, izay afaka mitantana ny fiasan'ny kluster PostgreSQL. Mandritra izany fotoana izany dia tsy misy failover mandeha ho azy avy ao anaty boaty, noho izany dia mila manoratra ny "wrapper" anao manokana eo an-tampon'ny vahaolana vita ianao. Noho izany, ny zava-drehetra dia mety ho sarotra kokoa noho ny amin'ny script nosoratan'ny tena, ka tsy nanandrana Repmgr akory izahay.

AWS RDS

Manohana izay rehetra ilaintsika, mahay manao backup ary mitazona dobo fifandraisana. Misy famadihana mandeha ho azy: rehefa maty ny tompony dia lasa tompony vaovao ny kopia, ary ny AWS dia manova ny rakitra dns amin'ny tompony vaovao, raha toa ka hita any amin'ny AZ samihafa ny kopia.

Ny tsy fahampiana dia ny tsy fisian'ny fanitsiana tsara. Ohatra amin'ny fanitsiana tsara: ny tranga misy anay dia manana famerana ny fifandraisana tcp, izay, indrisy, tsy azo atao amin'ny 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 fanampin'izany, ny AWS RDS dia saika avo roa heny noho ny vidin'ny ohatra mahazatra, izay no antony lehibe nandaozany ity vahaolana ity.

Patroni

Ity dia maodely python amin'ny fitantanana ny PostgreSQL miaraka amin'ny antontan-taratasy tsara, failover mandeha ho azy ary kaody loharano amin'ny github.

Ny tombony amin'ny Patroni:

  • Ny mari-pamantarana fanamafisana tsirairay dia voafaritra, mazava ny fomba fiasa;
  • Ny failover mandeha ho azy dia miasa ivelan'ny boaty;
  • Nosoratana tamin'ny python, ary satria isika dia manoratra betsaka amin'ny python, dia ho mora kokoa amintsika ny miatrika olana ary, angamba, manampy amin'ny fampandrosoana ny tetikasa;
  • Mitantana tanteraka ny PostgreSQL, mamela anao hanova ny fikandrana amin'ny nodes rehetra amin'ny cluster indray mandeha, ary raha mila averina indray ny cluster mba hampiharana ny fanitsiana vaovao, dia azo atao indray izany amin'ny fampiasana Patroni.

maharatsy ny mifampiresaka:

  • Tsy mazava amin'ny antontan-taratasy ny fomba fiasa tsara amin'ny PgBouncer. Na dia sarotra aza ny miantso azy io ho minus, satria ny andraikitr'i Patroni dia ny mitantana ny PostgreSQL, ary ny fomba handehanan'ny fifandraisana amin'i Patroni dia efa olanay;
  • Misy ohatra vitsivitsy amin'ny fampiharana ny Patroni amin'ny boky be, raha misy ohatra maro amin'ny fampiharana hatramin'ny voalohany.

Vokatr'izany dia nisafidy an'i Patroni izahay hamorona cluster failover.

Fomba fampiharana ny Patroni

Talohan'ny Patroni dia nanana 12 PostgreSQL shards izahay tamin'ny fanamafisana ny master iray ary ny kopia iray misy replication asynchronous. Ny mpizara fampiharana dia niditra tao amin'ny angon-drakitra tamin'ny alàlan'ny Network Load Balancer, tao ambadik'izany dia nisy tranga roa niaraka tamin'ny PgBouncer, ary tao ambadik'izy ireo dia ny mpizara PostgreSQL rehetra.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Mba hampiharana an'i Patroni, dia nila nisafidy firafitry ny cluster fitehirizana voazara izahay. Patroni dia miara-miasa amin'ny rafitra fitehirizana fitehirizana fizarana toy ny etcd, Zookeeper, Consul. Manana cluster Consul feno izahay eny an-tsena, izay miara-miasa amin'ny Vault ary tsy mampiasa azy intsony izahay. Antony lehibe hanombohana mampiasa ny Consul amin'ny tanjona nokasainy.

Ny fomba fiasan'i Patroni miaraka amin'ny Consul

Manana cluster Consul izahay, izay misy node telo, ary cluster Patroni, izay misy mpitarika sy replica (amin'ny Patroni, ny tompony dia antsoina hoe mpitarika cluster, ary ny andevo dia antsoina hoe replicas). Ny tranga tsirairay ao amin'ny cluster Patroni dia mandefa fampahalalana momba ny toetry ny cluster any amin'ny Consul. Noho izany, avy amin'ny Consul dia azonao atao ny mahita ny fanamafisam-peo amin'izao fotoana izao amin'ny cluster Patroni ary iza no mpitarika amin'izao fotoana izao.

Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Mba hampifandraisana an'i Patroni amin'ny Consul, dia ampy ny mianatra ny antontan-taratasy ofisialy, izay milaza fa mila manondro mpampiantrano amin'ny endrika http na https ianao, miankina amin'ny fomba iarahantsika amin'ny Consul, ary ny rafitra fifandraisana, raha tsy izany:

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

Toa tsotra, fa eto no manomboka ny fandrika. Miaraka amin'ny Consul, miasa amin'ny fifandraisana azo antoka amin'ny alàlan'ny https izahay ary ho toy izao ny firafitry ny fifandraisanay:

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

Saingy tsy mandeha izany. Amin'ny fanombohana, tsy afaka mifandray amin'ny Consul i Patroni, satria manandrana mandalo amin'ny http ihany izy.

Ny kaody loharanon'i Patroni dia nanampy tamin'ny fiatrehana ilay olana. Soa ihany fa voasoratra amin'ny python. Hita fa tsy voavaha amin'ny fomba rehetra ny mari-pamantarana mpampiantrano, ary ny protocol dia tsy maintsy voafaritra amin'ny drafitra. Toy izao ny endrik'ilay sakana fandrindrana miasa amin'ny fiaraha-miasa amin'ny Consul amintsika:

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

consul-template

Noho izany, nisafidy ny fitahirizana ho an'ny fanamafisana izahay. Ankehitriny dia mila mahatakatra ny fomba hanovan'i PgBouncer ny firafiny rehefa manova ny mpitarika ao amin'ny cluster Patroni. Tsy misy valiny amin'io fanontaniana io ao amin'ny antontan-taratasy, satria. any, raha ny fitsipika, ny fiaraha-miasa amin'ny PgBouncer dia tsy voalaza.

Mba hitadiavana vahaolana dia nahita lahatsoratra izahay (indrisy fa tsy tadidiko ny lohateny) izay nanoratana fa ny Сonsul-template dia nanampy betsaka tamin'ny fampiarahana an'i PgBouncer sy Patroni. Izany dia nanosika anay hanadihady ny fomba fiasan'ny Consul-template.

Hita fa ny Consul-template dia manara-maso tsy tapaka ny fanamafisana ny kluster PostgreSQL ao amin'ny Consul. Rehefa miova ny mpitarika dia manavao ny fandrindrana PgBouncer izy ary mandefa baiko hamerenana azy.

Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Ny tombony lehibe amin'ny môdely dia ny fitahirizana azy ho code, ka rehefa manampy shard vaovao dia ampy ny manao commit vaovao sy manavao ny môdely ho azy, manohana ny Infrastructure ho fitsipiky ny code.

Architecture vaovao miaraka amin'i Patroni

Vokatr'izany dia nahazo ny drafitry ny asa manaraka izahay:
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Ny mpizara fampiharana rehetra dia miditra amin'ny balancer → misy tranga roa PgBouncer ao ambadik'izany → isaky ny tranga, Consul-template dia natomboka, izay manara-maso ny satan'ny vondrona Patroni tsirairay ary manara-maso ny maha-zava-dehibe ny config PgBouncer, izay mandefa fangatahana amin'ny mpitarika ankehitriny ny cluster tsirairay.

Fitsapana tanana

Nandeha an'io tetika io izahay talohan'ny nanombohana azy tamin'ny tontolon'ny fitsapana kely ary nanamarina ny fiasan'ny fampandehanana mandeha ho azy. Nosokafan'izy ireo ny solaitrabe, nafindrany ny sticker, ary tamin'izay fotoana izay dia "vonony" ny mpitarika ny cluster. Ao amin'ny AWS, tsotra toy ny fanakatonana ny ohatra amin'ny alàlan'ny console izany.

Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Niverina tao anatin'ny 10-20 segondra ilay sticker, ary avy eo dia nanomboka nihetsika ara-dalàna indray. Midika izany fa niasa tsara ny cluster Patroni: nanova ny mpitarika, nandefa ny fampahalalana ho an'i Сonsul, ary ny Сonsul-template dia naka an'io fampahalalana io avy hatrany, nisolo ny config PgBouncer ary nandefa ny baiko hamerina.

Ahoana ny fomba hivelomana amin'ny enta-mavesatra be sy hitazonana ny fotoana fialan-tsasatra kely indrindra?

Miasa tsara ny zava-drehetra! Saingy misy fanontaniana vaovao: Ahoana no fiasan'izy io amin'ny enta-mavesatra be? Ahoana ny fomba haingana sy azo antoka ny famoahana ny zava-drehetra amin'ny famokarana?

Manampy antsika hamaly ny fanontaniana voalohany ny tontolo andrana izay anaovanay fitiliana entana. Mitovy tanteraka amin'ny famokarana amin'ny lafiny maritrano ary niteraka angon-drakitra fitsapana izay mitovy amin'ny habetsaky ny famokarana. Manapa-kevitra izahay fa "hamono" fotsiny ny iray amin'ireo tompon'ny PostgreSQL mandritra ny fitsapana ary hijery izay mitranga. Saingy alohan'izany dia zava-dehibe ny manamarina ny fihodinana mandeha ho azy, satria eto amin'ity tontolo ity dia manana shards PostgreSQL maromaro isika, noho izany dia hahazo fitsapana tsara momba ny script configuration isika alohan'ny famokarana.

Ireo asa roa ireo dia toa fatra-paniry laza, saingy manana PostgreSQL 9.6. Afaka manavao avy hatrany ho 11.2 ve isika?

Manapa-kevitra ny hanao izany amin'ny dingana 2 izahay: fanavaozana voalohany amin'ny 11.2, avy eo manomboka ny Patroni.

PostgreSQL fanavaozana

Mba hanavao haingana ny kinova PostgreSQL dia ampiasao ny safidy -k, izay misy rohy sarotra noforonina amin'ny kapila ary tsy ilaina ny mandika ny angonao. Amin'ny fototra 300-400 GB, ny fanavaozana dia maharitra 1 segondra.

Manana shards be dia be isika, noho izany dia mila atao ho azy ny fanavaozana. Mba hanaovana izany dia nanoratra kilalao Ansible izahay izay mitantana ny fizotran'ny fanavaozana manontolo ho antsika:

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

Zava-dehibe ny manamarika eto fa alohan'ny hanombohana ny fanavaozana dia tsy maintsy manatanteraka izany miaraka amin'ny parameter ianao --taratasim-bolamba hahazoana antoka fa afaka manavao ianao. Ny scripty koa dia manao ny fanoloana ny configs mandritra ny faharetan'ny fanavaozana. Vita tao anatin'ny 30 segondra ny scripty, izay vokatra tena tsara.

Alefaso ny Patroni

Mba hamahana ny olana faharoa dia jereo fotsiny ny fanamboarana Patroni. Ny tahirin-tsarimihetsika ofisialy dia manana ohatra konfigurasi miaraka amin'ny initdb, izay tompon'andraikitra amin'ny fanombohana angona vaovao rehefa manomboka ny Patroni ianao. Saingy satria efa manana tahiry efa vonona izahay dia nesorinay fotsiny ity fizarana ity tamin'ny fanamafisana.

Rehefa nanomboka nametraka an'i Patroni tamin'ny kluster PostgreSQL efa misy izahay ary nampandeha azy, dia nisedra olana vaovao izahay: samy mpitarika ny mpizara roa. Tsy mahalala na inona na inona momba ny toetry ny cluster i Patroni ary miezaka ny manomboka ny mpizara roa ho vondrona roa misaraka mitovy anarana. Mba hamahana ity olana ity dia mila mamafa ny lahatahiry misy data amin'ny andevo ianao:

rm -rf /var/lib/postgresql/

Tsy maintsy atao amin'ny andevo ihany izany!

Rehefa mifamatotra ny kopia madio, dia manao mpitarika basebackup i Patroni ary mamerina izany amin'ny kopia, ary avy eo dia mahatratra ny fanjakana ankehitriny araka ny logs wal.

Ny fahasahiranana iray hafa sendra anay dia ny kluster PostgreSQL rehetra dia nomena anarana ho default. Rehefa tsy mahalala na inona na inona momba ny iray hafa ny cluster tsirairay dia ara-dalàna izany. Fa rehefa te hampiasa Patroni ianao dia tsy maintsy manana anarana tokana ny cluster rehetra. Ny vahaolana dia ny fanovana ny anaran'ny cluster ao amin'ny konfigurasi PostgreSQL.

fitsapana entana

Nandefa fitsapana izahay izay mampitovy ny traikefan'ny mpampiasa amin'ny boards. Rehefa nahatratra ny sandan'ny salan'isa isan'andro ny entana, dia naverinay ny fitsapana mitovy, nesorinay ny ohatra iray niaraka tamin'ny mpitarika PostgreSQL. Niasa araka ny nantenainay ny failover mandeha ho azy: Nanova ny mpitarika i Patroni, nanavao ny fandrindrana PgBouncer ny Consul-template ary nandefa baiko hamerenana indray. Araka ny kisarinay ao amin'ny Grafana, dia mazava fa misy fahatarana 20-30 segondra ary misy lesoka kely avy amin'ireo mpizara mifandray amin'ny fifandraisana amin'ny angon-drakitra. Toe-javatra mahazatra izany, ny soatoavina toy izany dia azo ekena ho an'ny failover antsika ary azo antoka fa tsara kokoa noho ny fotoana fiatoana amin'ny serivisy.

Mitondra an'i Patroni amin'ny famokarana

Vokatr'izany dia tonga tamin'ny drafitra manaraka izahay:

  • Ampidiro ny template Consul amin'ny mpizara PgBouncer ary manomboka;
  • PostgreSQL fanavaozana ny version 11.2;
  • Hanova ny anaran'ny cluster;
  • Manomboka ny Cluster Patroni.

Mandritra izany fotoana izany, ny tetikay dia mamela antsika hanao ny teboka voalohany amin'ny fotoana rehetra, afaka manaisotra ny PgBouncer tsirairay amin'ny asa isika ary mametraka sy mampandeha consul-template amin'izany. Dia nanao izany izahay.

Ho an'ny fametrahana haingana dia nampiasa Ansible izahay, satria efa nanandrana ny playbooks rehetra tamin'ny tontolo fitsapana izahay, ary ny fotoana famonoana ny script feno dia avy amin'ny 1,5 ka hatramin'ny 2 minitra isaky ny shard. Azontsika atao ny manodina ny zava-drehetra amin'ny ampahany tsirairay nefa tsy mitsahatra ny serivisy, fa tsy maintsy mamono ny PostgreSQL tsirairay mandritra ny minitra maromaro. Amin'ity tranga ity, ireo mpampiasa izay manana angona ao amin'ity shard ity dia tsy afaka miasa tanteraka amin'izao fotoana izao, ary tsy azo ekena ho antsika izany.

Ny lalana hivoahana amin’izany toe-javatra izany dia ny fikojakojana nomanina, izay atao isaky ny 3 volana. Ity dia varavarankely ho an'ny asa voalahatra, rehefa manakatona tanteraka ny serivisinay izahay ary manavao ny tranga momba ny database. Herinandro sisa no tavela mandra-pahatongan'ny varavarankely manaraka, ary nanapa-kevitra izahay fa hiandry sy hiomana bebe kokoa. Nandritra ny fotoana fiandrasana, dia niaro ny tenanay ihany koa izahay: ho an'ny ampahany PostgreSQL tsirairay, dia nanangana kopia fanampiny izahay raha sendra tsy nahomby ny fitazonana ny angon-drakitra farany, ary nanampy ohatra vaovao ho an'ny shard tsirairay, izay tokony ho lasa dika vaovao ao amin'ny cluster Patroni, mba tsy hanatanteraka baiko hamafa data . Izany rehetra izany dia nanampy mba hampihenana ny mety hisian'ny fahadisoana.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Naverinay indray ny serivisy, niasa araka ny tokony ho izy ny zava-drehetra, nanohy niasa ny mpampiasa, saingy tamin'ny grafika dia nahatsikaritra enta-mavesatra be loatra teo amin'ireo mpizara Consul izahay.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Nahoana no tsy hitantsika izany tao amin'ny tontolon'ny fitsapana? Ity olana ity dia mampiseho tsara fa ilaina ny manaraka ny fotodrafitrasa ho fitsipiky ny fehezan-dalàna ary manadio ny fotodrafitrasa manontolo, manomboka amin'ny tontolo fitsapana ka hatramin'ny famokarana. Raha tsy izany, dia tena mora ny mahazo ny olana azonay. Inona no nitranga? Ny Consul dia niseho voalohany tamin'ny famokarana, ary avy eo tamin'ny tontolon'ny fitsapana, vokatr'izany, tamin'ny tontolo fitsapana, ny dikan-tenin'ny Consul dia ambony noho ny famokarana. Tao anatin'ny iray amin'ireo famotsorana fotsiny dia voavaha ny leak CPU rehefa niasa tamin'ny consul-template. Noho izany, nohavaozinay fotsiny ny Consul, ka namaha ny olana.

Avereno indray ny cluster Patroni

Na izany aza, nahazo olana vaovao izahay, izay tsy niahiahy akory. Rehefa manavao ny Consul dia esorinay fotsiny ny node Consul amin'ny cluster amin'ny fampiasana ny baikon'ny consul leave → mifandray amin'ny mpizara Consul hafa i Patroni → mandeha ny zava-drehetra. Saingy rehefa tonga tamin'ny tranga farany tamin'ny klioban'ny Consul izahay ary nandefa ny baikon'ny consul leave ho azy, dia nanomboka indray ny clusters Patroni rehetra, ary tao amin'ny diary dia hitanay ity hadisoana manaraka ity:

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>

Tsy afaka naka vaovao momba ny cluster azy ny kluster Patroni ary natomboka indray.

Mba hahitana vahaolana dia nifandray tamin'ireo mpanoratra Patroni izahay tamin'ny alàlan'ny olana iray tao amin'ny github. Nanolo-kevitra ny fanatsarana ny fichier-nao izahay:

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

Afaka namerina ny olana tamin'ny tontolo fitsapana izahay ary nanandrana ireo safidy ireo tao, saingy indrisy fa tsy nandeha izy ireo.

Mbola tsy voavaha ny olana. Mikasa ny hanandrana ireto vahaolana manaraka ireto izahay:

  • Mampiasà Consul-agent isaky ny vondrona Patroni;
  • Amboary ny olana amin'ny kaody.

Azonay hoe taiza no nitrangan'ilay hadisoana: ny olana angamba dia ny fampiasana ny fe-potoana tsy misy fetra, izay tsy voafehin'ny rakitra fikirakirana. Rehefa nesorina tao amin'ny cluster ny mpizara Consul farany dia mihantona iray segondra mahery ny cluster Consul manontolo, noho izany dia tsy afaka mahazo ny satan'ny cluster i Patroni ary mamerina tanteraka ny cluster manontolo.

Soa ihany fa tsy nahita fahadisoana intsony izahay.

Vokatry ny fampiasana Patroni

Taorian'ny fanombohana nahomby an'i Patroni, dia nanampy kopia fanampiny isaky ny cluster izahay. Amin'izao fotoana izao dia misy kôlejy iray ao amin'ny vondrona tsirairay: mpitarika iray sy kopia roa, ho an'ny harato azo antoka raha sendra ny atidoha misaraka rehefa mifamadika.
Failover Cluster PostgreSQL + Patroni. Fampiharana traikefa

Patroni dia niasa tamin'ny famokarana nandritra ny telo volana mahery. Nandritra izany fotoana izany dia efa nahavita nanampy anay izy. Vao haingana, maty tao amin'ny AWS ny mpitarika ny iray amin'ireo cluster, niasa ny failover mandeha ho azy ary nanohy niasa ny mpampiasa. Nanatontosa ny asany fototra i Patroni.

Famintinana kely momba ny fampiasana ny Patroni:

  • Mora ny fanovana fanovana. Ampy ny manova ny fanamafisam-peo amin'ny ohatra iray ary hisintona ho any amin'ny cluster manontolo. Raha ilaina ny reboot hampiharana ny fanovana vaovao, dia hampahafantatra anao i Patroni. Patroni dia afaka mamerina ny cluster manontolo amin'ny baiko tokana, izay tena mety ihany koa.
  • Ny failover mandeha ho azy dia miasa ary efa nahavita nanampy anay.
  • Fanavaozana PostgreSQL tsy misy fiatoana fampiharana. Tsy maintsy manavao aloha ny dika mitovy amin'ny dikan-teny vaovao ianao, avy eo manova ny mpitarika ao amin'ny cluster Patroni ary manavao ny mpitarika taloha. Amin'ity tranga ity, ny fitsapana ilaina amin'ny failover mandeha ho azy dia mitranga.

Source: www.habr.com

Add a comment