Puncte:1

Redirecționați traficul către un container redundant dacă master eșuează în Kubernetes

drapel cn

Am un cluster k8 cu un serviciu backend (BS) și un serviciu de baze de date (DS).

DS are un pod care conține un singur container PgBouncer (un proxy pentru un server Postgres). BS trimite cererile sale de bază de date către DS, care se direcționează înapoi la acest singur pod.

Vreau să am un pod redundant în interiorul DS pentru a ruta cererile bazei de date în cazul în care podul principal a eșuat. Nu vreau să direcționez cererile către acest pod redundant decât dacă podul principal nu reușește. Motivul pentru care încerc să proiectez astfel este să mă asigur că există mai puțin timp de nefuncționare dacă există o eșec.

Este posibil? Ați putea să mă ghidați despre cum să fac acest lucru, oferindu-mi eventual câteva referințe?

Multumesc anticipat!

Mikolaj S. avatar
drapel cn
Ce versiune de Kubernetes ați folosit și cum ați configurat clusterul? Ați folosit instalație bare metal sau vreun furnizor de cloud?
Mikolaj S. avatar
drapel cn
Prin urmare, presupun că căutați o soluție pentru a ruta cererea bazei de date numai atunci când podul principal este oprit. Este corect?
Eranga Heshan avatar
drapel cn
@MikolajS. Folosesc serviciul Azure Kubernetes. Este pe v1.19.11. Da, exact, caut să direcționez cererile bazei de date către podul principal atunci când rulează și numai atunci când nu este, să direcționez cererile către un pod de rezervă.Cunoașteți vreo resursă în care să pot căuta o soluție?
Puncte:1
drapel ng

Datorită faptului că nu am suficiente informații despre arhitectura utilizată și se bazează doar pe un exemplu foarte descriptiv - încarc informațiile obținute din cercetări permițând membrilor comunității să completeze/extinde acest răspuns.

Bazat pe această documentație PgBouncer nu are o configurație internă multi-gazdă. Pentru a echilibra interogările între mai multe servere se pot folosi instrumente externe, cum ar fi:

  1. DNS round-robin. Utilizați mai multe IP-uri în spatele unui nume DNS. PgBouncer nu caută DNS de fiecare dată când este lansată o nouă conexiune. În schimb, memorează în cache toate IP-urile și face round-robin intern. Notă: dacă există mai mult de 8 IP-uri în spatele unui nume, backend-ul DNS trebuie să accepte protocolul EDNS0. Consultați README pentru detalii.

  2. Folosește o Echilibrator de încărcare a conexiunii TCP. Fie EU VERSUS sau HAProxy par a fi alegeri bune. Pe partea PgBouncer, poate fi o idee bună să faci server_lifetime mai mic și, de asemenea, întoarce server_round_robin on: în mod implicit, conexiunile inactive sunt reutilizate de un algoritm LIFO, care poate să nu funcționeze atât de bine atunci când este necesară echilibrarea sarcinii.

Acest blog explică de ce să folosiți un alt mecanism de echilibrare a încărcăturii cu pgBouncer. În conformitate cu acesta, nu ar trebui să utilizați pgBouncer în loc de HAProxy sau alt echilibrator de încărcare.Este evident că pgBouncer are mai multe caracteristici configurabile care abordează ceea ce se adresează un echilibrator de încărcare - dar acest lucru este cel mai frecvent ca mediile de producție să folosească HAProxy sau alt echilibrator de încărcare pentru HA. Motivul pentru aceasta este că HAProxy echilibrează mai bine sarcinile de lucru pe serverele live decât pgbouncer.

Deși pgbouncer este mai bun pentru gruparea conexiunilor postgres, ar putea fi mai bine să folosiți un demon mic care îndeplinește perfect o sarcină, în loc de unul mai mare care face două sarcini, dar mai rău.

De asemenea, este o idee bună să utilizați PgPool. Vezi si acest raspuns.

Aici sunt, de asemenea, un articol care compară PgBouncer și PgPool. O mică parte din asta: | | PGBOUNCER | PGPOOL-II | |--|--|--| | Valabilitate ridicată |Nu este acceptat. |Disponibilitate înaltă PostgreSQL este suportat prin procesele de supraveghere încorporate Pgpool-II. Câştigător! | |Echilibrarea sarcinii|Nu este acceptat - PgBouncer recomandă utilizarea HAProxy pentru disponibilitate ridicată și echilibrarea sarcinii.| Acceptă echilibrarea automată a sarcinii - este chiar suficient de inteligent pentru a redirecționa cererile de citire către standby și pentru a scrie către master. Câştigător! |

Wytrzymały Wiktor avatar
drapel it
Salut @ErangaHeshan. Vre-un progres?
Eranga Heshan avatar
drapel cn
@kkopczak Vă mulțumim pentru înțelegere. Speram că ar putea exista o soluție ieșită din cutie pentru asta. Voi încerca să fac ceea ce mi-ați sugerat când am ceva timp
Eranga Heshan avatar
drapel cn
@WytrzymaÅyWiktor Ne pare rău, nu am avut timp să testez răspunsul.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.