{"id":54366,"date":"2019-12-24T00:00:00","date_gmt":"2019-12-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster"},"modified":"2020-02-18T14:02:22","modified_gmt":"2020-02-18T11:02:22","slug":"kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Bun\u0103, habrovcanilor. Ast\u0103zi \u00eencep cursurile pentru primul grup al cursului <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. \u00cen acest context, dorim s\u0103 v\u0103 povestim despre cum a decurs webinarul deschis pe acest curs.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">urm\u0103torului curs deschis<\/a><\/noindex> am discutat despre provoc\u0103rile cu care s-au confruntat bazele de date SQL \u00een era cloud-ului \u0219i Kubernetes. De asemenea, am analizat cum se adapteaz\u0103 \u0219i transform\u0103 bazele de date SQL sub influen\u021ba acestor provoc\u0103ri.<\/p>\n<p>Webinarul a fost sus\u021binut de <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valerii Bezeruk<\/a><\/noindex>, Google Cloud Practice Delivery Manager la EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>C\u00e2nd copacii erau mici...<\/h3>\n<p>\nLa \u00eenceput, hai s\u0103 ne amintim cum a \u00eenceput alegerea SGBD-ului la sf\u00e2r\u0219itul secolului trecut. De fapt, nu va fi greu, deoarece alegerea SGBD-ului \u00een acele vremuri \u00eencepea \u0219i se termina <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa sf\u00e2r\u0219itul anilor '90 \u2014 \u00eenceputul anilor 2000, nu existau multe op\u021biuni, \u00een esen\u021b\u0103, \u00een ceea ce prive\u0219te SGBD-urile scalabile industrial. Da, existau IBM DB2, Sybase \u0219i alte baze de date care ap\u0103reau \u0219i disp\u0103reau, dar, \u00een general, ele nu erau at\u00e2t de vizibile \u00een compara\u021bie cu Oracle. Prin urmare, abilit\u0103\u021bile inginerilor din acele vremuri erau, \u00eentr-o oarecare m\u0103sur\u0103, legate de acel singur aspect existent.<\/p>\n<p>Un DBA Oracle trebuia s\u0103 \u0219tie:<\/p>\n<ul>\n<li> s\u0103 instaleze Oracle Server din distribu\u021bie;<\/li>\n<li> s\u0103 configureze Oracle Server:<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>init.ora;<\/li>\n<li>listener.ora;<\/li>\n<\/ul>\n<p>\n\u2014 s\u0103 creeze:<\/p>\n<ul>\n<li>spa\u021bii de tabele;<\/li>\n<li>scheme;<\/li>\n<li>utilizatori;<\/li>\n<\/ul>\n<p>\u2014 s\u0103 efectueze backup \u0219i restaurare;<br \/>\n\u2014 s\u0103 monitorizeze;<br \/>\n\u2014 s\u0103 combat\u0103 interog\u0103rile neoptimizate.<\/p>\n<p>\u00cen acela\u0219i timp, nu era necesar de la un DBA Oracle:<\/p>\n<ul>\n<li>s\u0103 \u0219tie s\u0103 aleag\u0103 SGBD-ul optim sau o alt\u0103 tehnologie de stocare \u0219i procesare a datelor;<\/li>\n<li>s\u0103 asigure disponibilitate ridicat\u0103 \u0219i scalabilitate orizontal\u0103 (acesta nu era \u00eentotdeauna un domeniu de competen\u021b\u0103 al DBA-ului);<\/li>\n<li>s\u0103 aib\u0103 cuno\u0219tin\u021be solide despre domeniul de aplicare, infrastructur\u0103, arhitectura aplica\u021biilor, sistemul de operare;<\/li>\n<li>s\u0103 efectueze \u00eenc\u0103rcarea \u0219i desc\u0103rcarea datelor, migrarea datelor \u00eentre diferite SGBD-uri.<\/li>\n<\/ul>\n<p>\u00cen general, dac\u0103 discut\u0103m despre alegere \u00een acele vremuri, se aseam\u0103n\u0103 cu alegerea dintr-un magazin sovietic la sf\u00e2r\u0219itul anilor '80:<\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Timpul nostru<\/h3>\n<p>\nDe atunci, desigur, copacii au crescut, lumea s-a schimbat, \u0219i a devenit a\u0219a:<\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS-a schimbat \u0219i pia\u021ba SGBD-urilor, lucru care este evident \u00een raportul recent al companiei Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0218i aici trebuie men\u021bionat c\u0103 ni\u0219a lor a fost ocupat\u0103 de servicii cloud, a c\u0103ror popularitate cre\u0219te. Dac\u0103 citim acela\u0219i raport al companiei Gartner, vom observa urm\u0103toarele concluzii:<\/p>\n<ol>\n<li>Multe companii se afl\u0103 pe calea de a migra aplica\u021biile \u00een cloud. <\/li>\n<li>Noile tehnologii apar ini\u021bial \u00een cloud \u0219i nu este un fapt sigur c\u0103 acestea vor fi mutate vreodat\u0103 \u00eentr-o infrastructur\u0103 on-premises.<\/li>\n<li>Modelul de stabilire a pre\u021burilor pe principiul pay-as-you-go a devenit obi\u0219nuit. Toat\u0103 lumea dore\u0219te s\u0103 pl\u0103teasc\u0103 doar pentru ceea ce folose\u0219te, \u0219i acesta este deja mai mult dec\u00e2t o tendin\u021b\u0103, ci pur \u0219i simplu o constatare a realit\u0103\u021bii. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Ce se \u00eent\u00e2mpl\u0103 acum?<\/h3>\n<p>\nAst\u0103zi suntem cu to\u021bii \u00een cloud. \u00centreb\u0103rile care ne apar sunt \u00eentreb\u0103ri de alegere. Iar acestea sunt foarte multe, chiar dac\u0103 vorbim doar despre alegerea tehnologiilor de SGBD \u00een format On-premises. De asemenea, avem servicii gestionate \u0219i SaaS. Astfel, alegerea devine tot mai complicat\u0103 de la an la an.<\/p>\n<p>Pe l\u00e2ng\u0103 \u00eentreb\u0103rile de alegere, exist\u0103 \u0219i <b>factori restrictivi<\/b>:<\/p>\n<ul>\n<li><b>pre\u021bul<\/b>. Multe tehnologii continu\u0103 s\u0103 coste bani;<\/li>\n<li><b>abilit\u0103\u021bi<\/b>. Dac\u0103 vorbim despre software-ul liber, apare \u00eentrebarea abilit\u0103\u021bilor, deoarece software-ul gratuit necesit\u0103 de la persoanele care \u00eel desf\u0103\u0219oar\u0103 \u0219i \u00eel exploateaz\u0103 un anumit nivel de competen\u021b\u0103;<\/li>\n<li><b>func\u021bionalitate<\/b>. Nu toate serviciile disponibile \u00een cloud, chiar \u0219i cele construite pe baza aceluia\u0219i Postgres, dispun de acelea\u0219i caracteristici ca \u0219i Postgres On-premises. Acesta este un factor important de \u0219tiut \u0219i \u00een\u021beles. Mai mult, acest factor devine din ce \u00een ce mai important dec\u00e2t cunoa\u0219terea unor posibilit\u0103\u021bi ascunse ale fiec\u0103rui SGBD \u00een parte. <\/li>\n<\/ul>\n<p>\n<b>Ce a\u0219teapt\u0103 acum de la DA\/DE:<\/b><\/p>\n<ul>\n<li>o bun\u0103 \u00een\u021belegere a domeniului \u0219i a arhitecturii aplicate;<\/li>\n<li>capacitatea de a alege tehnologia SGBD corespunz\u0103toare \u00een func\u021bie de sarcina stabilit\u0103;<\/li>\n<li>abilitatea de a selecta metoda optim\u0103 de realizare a tehnologiei alese \u00een contextul restric\u021biilor existente;<\/li>\n<li>capacitatea de a efectua transferul \u0219i migrarea datelor;<\/li>\n<li>abilitatea de a implementa \u0219i exploata solu\u021biile alese.<\/li>\n<\/ul>\n<p>\nExemplul de mai jos <b>bazat pe GCP<\/b> arat\u0103 cum se face alegerea unei tehnologii de gestionare a datelor \u00een func\u021bie de structura acestora:<\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAten\u021bie, \u00een schem\u0103 nu se reg\u0103se\u0219te PostgreSQL, iar acest lucru se datoreaz\u0103 faptului c\u0103 el este ascuns sub terminologia <b>Cloud SQL<\/b>. \u0218i atunci c\u00e2nd ajungem \u00een Cloud SQL, trebuie din nou s\u0103 facem o alegere:<\/p>\n<p><img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste de remarcat c\u0103 aceast\u0103 alegere nu este \u00eentotdeauna clar\u0103, iar dezvoltatorii aplica\u021biei \u00ee\u0219i ghideaz\u0103 adesea intui\u021bia. <\/p>\n<p><b>\u00cen total:<\/b><\/p>\n<ol>\n<li>Pe m\u0103sur\u0103 ce avans\u0103m, \u00eentrebarea alegerii devine din ce \u00een ce mai actual\u0103. Chiar \u0219i atunci c\u00e2nd ne uit\u0103m doar la GCP, serviciile gestionate \u0219i SaaS, men\u021biunea despre RDBMS apare abia la pasul 4 (iar acolo Spanner este foarte aproape). \u00cen plus, alegerea PostgreSQL apare abia la pasul 5, al\u0103turi de MySQL \u0219i SQL Server. <b>Exist\u0103 mult, dar trebuie s\u0103 alegem<\/b>. <\/li>\n<li>Nu trebuie s\u0103 uit\u0103m de limit\u0103rile \u00een fa\u021ba ispitei. \u00cen general, toat\u0103 lumea vrea Spanner, dar este scump. A\u0219adar, o cerere tipic\u0103 arat\u0103 aproximativ a\u0219a: <i>\u201eFace\u021bi-ne, v\u0103 rug\u0103m, Spanner, dar la pre\u021bul Cloud SQL, sunte\u021bi profesioni\u0219ti, nu-i a\u0219a?\u201d<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u0218i ce ar trebui s\u0103 facem?<\/h3>\n<p>\nF\u0103r\u0103 a pretinde c\u0103 de\u021bin adev\u0103rul absolut, s\u0103 spunem urm\u0103toarele:<\/p>\n<p><b>Trebuie s\u0103 schimb\u0103m abordarea \u00een \u00eenv\u0103\u021bare:<\/b><\/p>\n<ul>\n<li>s\u0103 \u00eenv\u0103\u021b\u0103m cum s-a predat anterior DBA nu are sens;<\/li>\n<li>cuno\u0219tin\u021bele despre un singur produs nu mai sunt suficiente;<\/li>\n<li>iar a cunoa\u0219te zeci la nivel de unu este imposibil.<\/li>\n<\/ul>\n<p>\nTrebuie s\u0103 \u0219tim nu doar produsul, ci \u0219i:<\/p>\n<ul>\n<li>cazul de utilizare al aplic\u0103rii acestuia;<\/li>\n<li>diverse metode de implementare;<\/li>\n<li>avantajele \u0219i dezavantajele fiec\u0103rei metode;<\/li>\n<li>produse similare \u0219i alternative, pentru a face o alegere con\u0219tient\u0103 \u0219i optim\u0103 \u0219i nu \u00eentotdeauna \u00een favoarea produsului cunoscut.<\/li>\n<\/ul>\n<p>\n\u0218i trebuie s\u0103 \u0219tim, de asemenea, cum s\u0103 migram datele \u0219i s\u0103 \u00een\u021belegem principiile de baz\u0103 ale integr\u0103rii cu ETL.<\/p>\n<h3>Caz real<\/h3>\n<p>\nRecent, a fost necesar s\u0103 se dezvolte backend-ul pentru o aplica\u021bie mobil\u0103. La momentul \u00eenceperii lucrului la aceasta, backend-ul era deja dezvoltat \u0219i gata de implementare, iar echipa de dezvoltare a petrecut aproximativ doi ani pe acest proiect. \u00cen acest context, au fost stabilite urm\u0103toarele sarcini:<\/p>\n<ul>\n<li>s\u0103 construim CI\/CD;<\/li>\n<li>s\u0103 facem revizuirea arhitecturii;<\/li>\n<li>s\u0103 lans\u0103m totul \u00een exploatare. <\/li>\n<\/ul>\n<p>\nAplica\u021bia \u00een sine era microservizat\u0103, iar codul pe Python\/Django a fost dezvoltat de la zero \u0219i direct \u00een GCP. \u00cen ceea ce prive\u0219te publicul \u021bint\u0103, s-a presupus c\u0103 vor fi dou\u0103 regiuni - SUA \u0219i UE, iar traficul era distribuit prin Global Load Balancer. Toate Workloads \u0219i sarcinile de calcul func\u021bionau \u00een Google Kubernetes Engine. <\/p>\n<p>\u00cen ceea ce prive\u0219te datele, erau 3 structuri:<\/p>\n<ul>\n<li>Cloud Storage;<\/li>\n<li>Datastore;<\/li>\n<li>Cloud SQL (PostgreSQL).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPoate c\u0103 se va pune \u00eentrebarea de ce a fost ales Cloud SQL? Sincer, o astfel de \u00eentrebare provoac\u0103 o oarecare jen\u0103 \u00een ultimii ani - exist\u0103 senza\u021bia c\u0103 oamenii au \u00eenceput s\u0103 se ru\u0219ineze de bazele de date rela\u021bionale, dar, cu toate acestea, continu\u0103 s\u0103 le foloseasc\u0103 activ ;-). <\/p>\n<p>\u00cen cazul nostru, Cloud SQL a fost ales din urm\u0103toarele motive:<\/p>\n<ol>\n<li>A\u0219a cum a fost men\u021bionat, aplica\u021bia a fost dezvoltat\u0103 folosind Django, iar acesta are un model de mapare a datelor persistente din baza de date SQL \u00een obiecte Python (Django ORM).<\/li>\n<li>Framework-ul \u00een sine suporta o list\u0103 final\u0103 suficient\u0103 de DBMS-uri:<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>PostgreSQL;<\/li>\n<li>MariaDB;<\/li>\n<li>MySQL;<\/li>\n<li>Oracle;<\/li>\n<li>SQLite.<\/li>\n<\/ul>\n<p>\nPrin urmare, PostgreSQL a fost ales din aceast\u0103 list\u0103 mai degrab\u0103 intuitiv (nu vom alege Oracle, \u00eentr-adev\u0103r).<\/p>\n<p><b>Ce a lipsit:<\/b><\/p>\n<ul>\n<li>aplica\u021bia a fost desf\u0103\u0219urat\u0103 doar \u00een 2 regiuni, iar \u00een planuri a ap\u0103rut a 3-a (Asia);<\/li>\n<li>BD-ul se afla \u00een regiunea nord-american\u0103 (Iowa);<\/li>\n<li>din partea clientului au existat temeri legate de posibilele <b>\u00eent\u00e2rzieri de acces<\/b> din Europa \u0219i Asia \u0219i <b>interferen\u021be <\/b><b>\u00een servicii<\/b> \u00een cazul inactivit\u0103\u021bii SGBD-ului. <\/li>\n<\/ul>\n<p>\nAv\u00e2nd \u00een vedere c\u0103 Django poate lucra cu mai multe BD-uri simultan \u0219i poate \u00eemp\u0103r\u021bi \u00eentre citire \u0219i scriere, \u00een aplica\u021bie nu erau at\u00e2t de multe scrieri (peste 90% \u2013 citire). \u00cen general, dac\u0103 s-ar fi putut face <b>o replica pentru citire a bazei principale \u00een Europa \u0219i Asia<\/b>, asta ar fi fost o variant\u0103 de compromis. Dar ce este at\u00e2t de complicat aici?<\/p>\n<p>Complica\u021bia consta \u00een faptul c\u0103 clientul nu dorea s\u0103 renun\u021be la utilizarea serviciilor gestionate \u0219i Cloud SQL. Iar posibilit\u0103\u021bile Cloud SQL, \u00een acest moment, sunt limitate. Cloud SQL suport\u0103 disponibilitate ridicat\u0103 (HA) \u0219i Replica pentru citire (RR), dar aceea\u0219i RR este sus\u021binut\u0103 doar \u00eentr-o singur\u0103 regiune. Cre\u00e2nd BD \u00een regiunea american\u0103, nu se poate face o replic\u0103 pentru citire \u00een regiunea european\u0103 prin Cloud SQL, de\u0219i PostgreSQL nu \u00eempiedic\u0103 aceasta. Corespondenta cu angaja\u021bii Google nu a dus la nimic \u0219i s-a \u00eencheiat cu promisiuni de genul \u201e\u0219tim problema \u0219i lucr\u0103m la ea, \u00eentr-o zi va fi rezolvat\u0103\u201d. <\/p>\n<p>Dac\u0103 enumer\u0103m posibilit\u0103\u021bile Cloud SQL tezaic, ar ar\u0103ta aproximativ a\u0219a:<\/p>\n<p><b>1. Disponibilitate ridicat\u0103 (HA):<\/b><\/p>\n<ul>\n<li>\u00een cadrul unei singure regiuni;<\/li>\n<li>prin replicarea discurilor;<\/li>\n<li>nu se folosesc mecanisme PostgreSQL;<\/li>\n<li>posibilitate de gestionare automat\u0103 \u0219i manual\u0103 \u2013 failover\/failback;<\/li>\n<li>\u00een timpul comut\u0103rii SGBD-ul nu este disponibil timp de c\u00e2teva minute.<\/li>\n<\/ul>\n<p>\n<b>2. Replica pentru citire (RR):<\/b><\/p>\n<ul>\n<li>\u00een cadrul unei singure regiuni;<\/li>\n<li>standby activ;<\/li>\n<li>replicare prin streaming PostgreSQL.<\/li>\n<\/ul>\n<p>\n\u00cen plus, a\u0219a cum este de obicei, atunci c\u00e2nd alegi tehnologia \u00eent\u00e2lne\u0219ti tot felul de <b>limiteri<\/b>:<\/p>\n<ul>\n<li>clientul nu dorea s\u0103 creeze entit\u0103\u021bi \u0219i s\u0103 foloseasc\u0103 IaaS, dec\u00e2t prin GKE;<\/li>\n<li>clientul nu dorea s\u0103 desf\u0103\u0219oare un PostgreSQL\/MySQL self service;<\/li>\n<li>\u00een general, Google Spanner ar fi fost destul de potrivit, dac\u0103 nu ar fi pre\u021bul s\u0103u, totu\u0219i cu acesta Django ORM nu poate lucra, dar \u00een rest este o solu\u021bie bun\u0103.<\/li>\n<\/ul>\n<p>\nAv\u00e2nd \u00een vedere situa\u021bia, clientul a pus o \u00eentrebare capcan\u0103: <i>\u201ePute\u021bi s\u0103 face\u021bi ceva similar, care s\u0103 fie ca Google Spanner, dar s\u0103 func\u021bioneze \u0219i cu Django ORM?\u201d<\/i><\/p>\n<h3>Variant\u0103 de solu\u021bie nr. 0<\/h3>\n<p>\nPrimul lucru care mi-a venit \u00een minte:<\/p>\n<ul>\n<li>a r\u0103m\u00e2ne \u00een cadrul CloudSQL;<\/li>\n<li>replicarea \u00eencorporat\u0103 \u00eentre regiuni nu va exista \u00een niciun fel;<\/li>\n<li>\u00eencercarea de a conecta o replic\u0103 la Cloud SQL existent by PostgreSQL;<\/li>\n<li>\u00eentr-un fel sau altul, s\u0103 lans\u0103m o instan\u021b\u0103 PostgreSQL, dar s\u0103 nu intervenim \u00een master.<\/li>\n<\/ul>\n<p>\nDin p\u0103cate, s-a dovedit c\u0103 nu se poate face acest lucru, deoarece nu exist\u0103 acces la host (el este \u00een general \u00eentr-un alt proiect) - pg_hba \u0219i a\u0219a mai departe, \u0219i de asemenea nu exist\u0103 acces sub superuser.<\/p>\n<h3>Varianta de solu\u021bie nr. 1<\/h3>\n<p>\nDup\u0103 noi reflec\u021bii \u0219i av\u00e2nd \u00een vedere circumstan\u021bele anterioare, g\u00e2ndirea s-a schimbat pu\u021bin:<\/p>\n<ul>\n<li>\u00eencerc\u0103m s\u0103 r\u0103m\u00e2nem \u00een CloudSQL, dar trecem la MySQL, deoarece Cloud SQL by MySQL are un master extern, care:<\/li>\n<\/ul>\n<p>\n\u2014 este un proxy pentru MySQL extern;<br \/>\n\u2014 arat\u0103 ca o instan\u021b\u0103 MySQL;<br \/>\n\u2014 a fost creat pentru migrarea datelor din alte clouduri sau on-premises.<\/p>\n<p>Av\u00e2nd \u00een vedere c\u0103 setarea replic\u0103rii MySQL nu necesit\u0103 acces la host, \u00een principiu totul a func\u021bionat, dar foarte instabil \u0219i inconfortabil. Iar c\u00e2nd am mers mai departe, a devenit chiar \u00eenfrico\u0219\u0103tor, deoarece am desf\u0103\u0219urat \u00eentreaga structur\u0103 cu terraform, iar brusc s-a dovedit c\u0103 masterul extern nu este suportat de terraform. Da, Google are CLI, dar dintr-un motiv oarecare, aici totul a func\u021bionat sporadic - uneori se creeaz\u0103, alteori nu. Posibil din cauza c\u0103 CLI a fost g\u00e2ndit pentru migrarea datelor din exterior, nu pentru replici.<\/p>\n<p>Practic, a devenit clar c\u0103 Cloud SQL nu este potrivit sub nicio form\u0103. Cum se spune, am f\u0103cut tot ce am putut. <\/p>\n<h3>Varianta de solu\u021bie nr. 2<\/h3>\n<p>\nDeoarece nu am reu\u0219it s\u0103 r\u0103m\u00e2nem \u00een Cloud SQL, am \u00eencercat s\u0103 formul\u0103m cerin\u021bele pentru o solu\u021bie de compromis. Cerin\u021bele s-au dovedit a fi urm\u0103toarele:<\/p>\n<ul>\n<li>lucrul \u00een Kubernetes, utilizarea maxim\u0103 a resurselor \u0219i capabilit\u0103\u021bilor Kubernetes (DCS, &#8230;) \u0219i GCP (LB, &#8230;);<\/li>\n<li>eliminarea balastului dintr-o mul\u021bime de lucruri inutile \u00een cloud, precum HA proxy;<\/li>\n<li>posibilitatea de a rula HA PostgreSQL sau MySQL \u00een regiunile principale; \u00een celelalte regiuni - HA din RR-ul regiunii principale plus copia acesteia (pentru fiabilitate);<\/li>\n<li>multi master (nu ne-am dorit s\u0103 ne conect\u0103m cu el, dar nu era o problem\u0103 foarte principial\u0103)<\/li>\n<\/ul>\n<p>. <br \/>\nCa urmare a acestor cerin\u021be, pe orizont au ap\u0103rut \u00een sf\u00e2r\u0219it p<b>op\u021biuni potrivite pentru SGBD \u0219i interfa\u021ba<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>PostgreSQL tools<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nTehnologia MySQL Galera a fost dezvoltat\u0103 de compania Codership \u0219i reprezint\u0103 un plugin pentru InnoDB. Caracteristici:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>replicare sincron\u0103;<\/li>\n<li>citire de pe orice nod;<\/li>\n<li>scriere pe orice nod;<\/li>\n<li>mecanism HA \u00eencorporat;<\/li>\n<li>exist\u0103 un Helm chart de la Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nConform descrierii, acest lucru este cu adev\u0103rat impresionant \u0219i reprezint\u0103 un proiect open source, scris \u00een Go. Principalul participant este Cockroach Labs (fondat\u0103 de fo\u0219ti angaja\u021bi ai Google). Aceast\u0103 baz\u0103 de date rela\u021bional\u0103 a fost creat\u0103 ini\u021bial pentru a fi distribuit\u0103 (cu scalare orizontal\u0103 \u201edin cutie\u201d) \u0219i tolerant\u0103 la erori. Autorii s\u0103i din companie au subliniat obiectivul de a \u201ecombin\u0103 bog\u0103\u021bia func\u021bionalit\u0103\u021bii SQL cu disponibilitatea orizontal\u0103, obi\u0219nuit\u0103 \u00een solu\u021biile NoSQL\u201d.<\/p>\n<p>Un bonus pl\u0103cut este suportul pentru protocolul de conectare PostgreSQL. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nAceasta este o suprastructur\u0103 peste PostgreSQL, de fapt, o nou\u0103 entitate care preia toate conexiunile \u0219i le proceseaz\u0103. Are un load balancer \u0219i un parser proprii, fiind licen\u021biat\u0103 sub licen\u021ba BSD. Ofer\u0103 oportunit\u0103\u021bi vaste, dar arat\u0103 oarecum \u00eenfrico\u0219\u0103tor, deoarece prezen\u021ba unei noi entit\u0103\u021bi ar putea constitui o surs\u0103 de aventuri suplimentare. <\/p>\n<h3>Patroni<\/h3>\n<p>\nAcesta a fost ultimul lucru pe care l-am observat \u0219i, dup\u0103 cum s-a dovedit, nu a fost \u00een zadar. Patroni \u2013 o unealt\u0103 open source, care, \u00een esen\u021b\u0103, reprezint\u0103 un daemon pe Python, permi\u021b\u00e2nd gestionarea automat\u0103 a clusterelor PostgreSQL cu diverse tipuri de replicare \u0219i schimbarea automat\u0103 a rolurilor. A fost foarte interesant, deoarece se integreaz\u0103 bine cu Kubernetes \u0219i nu implic\u0103 entit\u0103\u021bi noi. <\/p>\n<h3>Ce am ales \u00een final<\/h3>\n<p>\nAlegerea nu a fost u\u0219oar\u0103:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 minunat, dar riscant;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 de asemenea decent, folosit pe scar\u0103 larg\u0103, dar MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 multe entit\u0103\u021bi suplimentare, integrarea cu cloud-ul \u0219i K8s nu este ideal\u0103;<\/li>\n<li><b>Patroni <\/b>\u2014 integrare excelent\u0103 cu K8s, f\u0103r\u0103 entit\u0103\u021bi suplimentare, se integreaz\u0103 bine cu GCP LB.<\/li>\n<\/ol>\n<p>\nAstfel, alegerea a fost f\u0103cut\u0103 pentru Patroni. <\/p>\n<h3>Conclusions<\/h3>\n<p>\nA venit vremea s\u0103 tragem c\u00e2teva concluzii. Da, lumea infrastructurii IT s-a schimbat considerabil \u0219i aceasta este doar \u00eenceputul. Dac\u0103 anterior, cloud-urile erau doar un alt tip de infrastructur\u0103, acum totul este diferit. Mai mult, inova\u021biile \u00een cloud-uri apar constant, vor continua s\u0103 apar\u0103 \u0219i, poate, vor ap\u0103rea doar \u00een cloud-uri \u0219i vor fi apoi transferate \u00een On-premises prin eforturile startup-urilor.<\/p>\n<p>\u00cen ceea ce prive\u0219te SQL, SQL va continua s\u0103 existe. Asta \u00eenseamn\u0103 c\u0103 trebuie s\u0103 cunoa\u0219tem PostgreSQL \u0219i MySQL \u0219i s\u0103 \u0219tim cum s\u0103 lucr\u0103m cu ele, dar este \u0219i mai important s\u0103 \u0219tim s\u0103 le aplic\u0103m corect.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/481644\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c, \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c SQL-\u0431\u0430\u0437\u044b \u0432 \u044d\u0440\u0443 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0438 Kubernetes. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQL \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u0430\u0431\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54366","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Cum s\u0103 supravie\u021buie\u0219ti unei baze de date SQL \u00een secolul 21: cloud-uri, Kubernetes \u0219i PostgreSQL multimaster | ProHoster","description":"Salutare, Habraci. Ast\u0103zi \u00eencep cursurile pentru primul grup al cursului \u201ePostgreSQL\u201d.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54366","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:06:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:30:12","updated":"2026-01-24 11:06:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}