{"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\/hr\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Zdravo, \u010dlanovi Habr. Danas zapo\u010dinju nastave u prvoj grupi kursa <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\"PostgreSQL\"<\/a><\/noindex>. U vezi s tim, \u017eelimo vam ispri\u010dati kako je pro\u0161ao otvoreni vebinar o ovom kursu.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nU <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">na narednoj otvorenoj lekciji<\/a><\/noindex> razgovarali smo o izazovima sa kojima se SQL baze suo\u010davaju u eri oblaka i Kubernetesa. Tako\u0111e smo razmotrili kako se SQL baze podataka prilago\u0111avaju i mutiraju pod uticajem ovih izazova.<\/p>\n<p>Vebinar je vodio <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valerij Bezrukov<\/a><\/noindex>, menad\u017eer za isporuku Google Cloud praksi u EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Kada su drve\u0107e bila mala...<\/h3>\n<p>\nZa po\u010detak, podsetimo se kako je zapo\u010delo biranje DBMS-a krajem pro\u0161log veka. Ipak, to ne\u0107e biti te\u0161ko, jer je izbor DBMS-a u to vreme po\u010dinjao i zavr\u0161avao se <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrajem 90-ih - po\u010detkom 2000-ih, zapravo nije bilo mnogo izbora kada je re\u010d o industrijskim skalabilnim DBMS-ima. Da, postojali su IBM DB2, Sybase i jo\u0161 neki sistemi baza podataka koji su se pojavljivali i nestajali, ali u celini nisu bili tako primetni naspram Oracle-a. U skladu s tim, ve\u0161tine in\u017eenjera tog vremena bile su na ovaj ili onaj na\u010din vezane za jedini izbor koji je postojao.<\/p>\n<p>Oracle DBA je trebao da zna:<\/p>\n<ul>\n<li> instalirati Oracle Server iz distribucije;<\/li>\n<li> konfigurisati 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 kreirati:<\/p>\n<ul>\n<li>tabelarna prostora;<\/li>\n<li>sheme;<\/li>\n<li>korisnike;<\/li>\n<\/ul>\n<p>\u2014 izvoditi rezervne kopije i obnavljanje;<br \/>\n\u2014 vr\u0161iti nadzor;<br \/>\n\u2014 boriti se sa neoptimalnim upitima.<\/p>\n<p>Pri tome, od Oracle DBA se posebno nije zahtevalo:<\/p>\n<ul>\n<li>da zna kako da izabere optimalni DBMS ili drugu tehnologiju za skladi\u0161tenje i obradu podataka;<\/li>\n<li>da obezbedi visoku dostupnost i horizontalnu skalabilnost (to nije uvek bilo pitanje DBA);<\/li>\n<li>da dobro poznaje predmetnu oblast, infrastrukturu, aplikativnu arhitekturu, OS;<\/li>\n<li>da obavlja u\u010ditavanje i ispu\u0161tanje podataka, migraciju podataka izme\u0111u razli\u010ditih DBMS-a.<\/li>\n<\/ul>\n<p>Uop\u0161teno govore\u0107i, ako govorimo o izboru u to vreme, podse\u0107a na izbor u sovjetskoj prodavnici krajem 80-ih:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Na\u0161e vreme<\/h3>\n<p>\nOd tada, naravno, drve\u0107e je odraslo, svet se promenio, i postalo je nekako ovako:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPromenio se i tr\u017ei\u0161te DBMS-a, \u0161to je dobro vidljivo iz sve\u017eeg izve\u0161taja kompanije Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI ovde ne mo\u017eemo a da ne primetimo da su svoju ni\u0161u zauzele oblak, \u010dija popularnost raste. Ako pro\u010ditate isti izve\u0161taj kompanije Gartner, vide\u0107emo slede\u0107e zaklju\u010dke:<\/p>\n<ol>\n<li>Mnogi klijenti su na putu prebacivanja aplikacija u oblak. <\/li>\n<li>Nove tehnologije prvo se pojavljuju u oblaku i nije garantirano da \u0107e se ikada preseliti u neobla\u010dnu infrastrukturu.<\/li>\n<li>Postao je uobi\u010dajen model odre\u0111ivanja cijena prema principu pay-as-you-go. Svi \u017eele pla\u0107ati samo za ono \u0161to koriste, a to vi\u0161e nije trend, ve\u0107 jednostavna konstanta. <\/li>\n<\/ol>\n<p><\/p>\n<h3>\u0160to je sada?<\/h3>\n<p>\nDanas smo svi u oblaku. A pitanja koja se javljaju su pitanja izbora. A izbor je ogroman, \u010dak i kada govorimo samo o odabiru tehnologija DBMS-a u On-premises formatu. Tako\u0111er imamo managed services i SaaS. Na taj na\u010din, izbor postaje sve slo\u017eeniji svake godine.<\/p>\n<p>Osim pitanja izbora, postoje i <b>ograni\u010davaju\u0107i faktori<\/b>:<\/p>\n<ul>\n<li><b>cena<\/b>. Mnoge tehnologije jo\u0161 uvijek ko\u0161taju novac;<\/li>\n<li><b>vje\u0161tine<\/b>. Kada govorimo o slobodnom softveru, postavlja se pitanje vje\u0161tina, jer besplatan softver zahtijeva od ljudi koji ga implementiraju i koriste dovoljnu kompetentnost;<\/li>\n<li><b>funkcionalnosti<\/b>. Nisu sve usluge koje su dostupne u oblaku i izgra\u0111ene, recimo, na bazi Postgresa, opremljene istim karakteristikama kao Postgres On-premises. To je zna\u010dajan faktor koji treba znati i razumjeti. \u0160tovi\u0161e, ovaj faktor dobiva va\u017enije zna\u010denje od poznavanja nekih skrivenih mogu\u0107nosti odre\u0111ene DBMS. <\/li>\n<\/ul>\n<p>\n<b>\u0160to se sada o\u010dekuje od DA\/DE:<\/b><\/p>\n<ul>\n<li>dobro razumijevanje predmetne oblasti i primijenjene arhitekture;<\/li>\n<li>sposobnost pravilnog odabira odgovaraju\u0107e tehnologije DBMS-a s obzirom na zadatak;<\/li>\n<li>sposobnost uskla\u0111ivanja optimalne metode implementacije odabrane tehnologije u kontekstu postoje\u0107ih ograni\u010denja;<\/li>\n<li>sposobnost prijenosa i migracije podataka;<\/li>\n<li>sposobnost realizacije i eksploatacije odabranih rje\u0161enja.<\/li>\n<\/ul>\n<p>\nSlijede\u0107i primjer <b>na bazi GCP<\/b> demonstrira kako se vr\u0161i izbor odre\u0111ene tehnologije rada s podacima ovisno o njihovoj strukturi:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObratite pa\u017enju da u shemi nedostaje PostgreSQL, a sve zbog toga \u0161to se skriva pod terminologijom <b>Cloud SQL<\/b>. I kada u\u0111emo u Cloud SQL, ponovno moramo napraviti izbor:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nValja napomenuti da ovaj izbor nije uvijek jasan, stoga programeri aplikacija \u010desto vode ra\u010duna o intuitivnom pristupu. <\/p>\n<p><b>Ukratko:<\/b><\/p>\n<ol>\n<li>Kako vrijeme prolazi, pitanje izbora postaje sve va\u017enije. \u010cak i kada razmatramo samo GCP, upravljane usluge i SaaS, neko spominjanje RDBMS-a pojavljuje se tek u 4. koraku (a tu je i Spanner). Osim toga, izbor PostgreSQL-a pojavljuje se tek u 5. koraku, a uz njega su tu jo\u0161 MySQL i SQL Server, \u0161to zna\u010di <b>ima mnogo opcija, ali izbor je potreban<\/b>. <\/li>\n<li>Ne mo\u017eemo zaboraviti na ograni\u010denja uz brojne privla\u010dnosti. Uglavnom, svi \u017eele Spanner, ali je on skup. Na kraju, tipi\u010dni zahtjev izgleda otprilike ovako: <i>\u201eMolimo vas, napravite nam Spanner, ali po cijeni Cloud SQL-a, pa vi ste profesionalci!\u201c<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u0160to u\u010diniti?<\/h3>\n<p>\nNe pretvaraju\u0107i se da imamo kona\u010dnu istinu, recimo ovo:<\/p>\n<p><b>Trebamo promijeniti pristup obrazovanju:<\/b><\/p>\n<ul>\n<li>nema smisla u\u010diti kao nekad DBA;<\/li>\n<li>znanje o jednom proizvodu sada ve\u0107 nije dovoljno;<\/li>\n<li>a poznavanje desetaka na razini jednog \u2014 nemogu\u0107e je.<\/li>\n<\/ul>\n<p>\nTrebamo znati ne samo proizvod, ve\u0107 i:<\/p>\n<ul>\n<li>upotrebu za koju se koristi;<\/li>\n<li>razli\u010dite metode implementacije;<\/li>\n<li>prednosti i nedostatke svake metode;<\/li>\n<li>sli\u010dne i alternativne proizvode, kako bismo donijeli svjesne i optimalne izbore, a ne uvijek u korist poznatog proizvoda.<\/li>\n<\/ul>\n<p>\nA tako\u0111er trebamo znati migirati podatke i razumjeti osnovne principe integracije s ETL-om.<\/p>\n<h3>Konkretn slu\u010daj<\/h3>\n<p>\nU nedavnoj pro\u0161losti morao sam raditi backend za mobilnu aplikaciju. U trenutku kada sam zapo\u010deo rad na njemu, backend je ve\u0107 bio razvijen i spreman za implementaciju, a tim programera potro\u0161io je na ovaj projekt gotovo dvije godine. Pri tome su postavljeni sljede\u0107i zadaci:<\/p>\n<ul>\n<li>izraditi CI\/CD;<\/li>\n<li>napraviti pregled arhitekture;<\/li>\n<li>pokrenuti sve to u rad. <\/li>\n<\/ul>\n<p>\nIstra\u017eivana aplikacija bila je mikroslu\u017ebena, a kod na Python\/Django razvijen je ispo\u010detka i odmah u GCP-u. \u0160to se ti\u010de ciljne publike, pretpostavljalo se da \u0107e postojati dva podru\u010dja \u2014 SAD i EU, a promet je raspore\u0111en putem Global Load balancera. Svi workloads i obra\u010dunski teret radili su u Google Kubernetes Engineu. <\/p>\n<p>\u0160to se ti\u010de podataka, bile su 3 strukture:<\/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=\"Kako pre\u017eiveti SQL bazu u 21. veku: oblaci, Kubernetes i PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017ee se postaviti pitanje, za\u0161to je odabran Cloud SQL? Istini za volju, takvo pitanje posljednjih godina izaziva neku nelagodu \u2014 stje\u010de se dojam da se ljudi srame relacijskih baza, no one se i dalje aktivno koriste ;-). <\/p>\n<p>\u0160to se ti\u010de na\u0161eg slu\u010daja, Cloud SQL je odabran iz sljede\u0107ih razloga:<\/p>\n<ol>\n<li>Kao \u0161to je spomenuto, aplikacija je razvijena uz pomo\u0107 Djanga, a u njoj postoji model za prikaz trajnih podataka iz SQL baze u Python objekte (Django ORM).<\/li>\n<li>Sam okvir podr\u017eava prili\u010dno kona\u010dan popis DBMS-a:<\/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>\nStoga je PostgreSQL odabran iz ovog popisa vi\u0161e intuitivno (pa zar \u0107emo stvarno birati Oracle?).<\/p>\n<p><b>\u0160to je nedostajalo:<\/b><\/p>\n<ul>\n<li>aplikacija je implementirana samo u 2 regije, a u planu je bila dodavanje 3. (Azija);<\/li>\n<li>Baza podataka se nalazila u sjevernoameri\u010dkoj regiji (Iowa);<\/li>\n<li>s druge strane, naru\u010ditelj je imao zabrinutosti glede mogu\u0107ih <b>ka\u0161njenja u pristupu<\/b> iz Europe i Azije te <b>prekida <\/b><b>u usluzi<\/b> u slu\u010daju zastoja baze podataka. <\/li>\n<\/ul>\n<p>\nIako sam Django mo\u017ee raditi s nekoliko baza podataka paralelno i dijeliti ih prema \u010ditanju i pisanju, zapisa u aplikaciji nije bilo toliko (vi\u0161e od 90 % \u2014 \u010ditanje). I u cjelini, ako bi se mogla napraviti <b>read-replika glavne baze u Europi i Aziji<\/b>, to bi bio kompromisno rje\u0161enje. No, \u0161to tu ima komplicirano?<\/p>\n<p>A slo\u017eenost je bila u tome \u0161to naru\u010ditelj nije \u017eelio odustati od kori\u0161tenja upravljanih usluga i Cloud SQL-a. A mogu\u0107nosti Cloud SQL-a su u tom trenutku ograni\u010dene. Cloud SQL podr\u017eava visoku dostupnost (HA) i Read Replica (RR), ali ista RR se podr\u017eava samo u jednoj regiji. Stvaranjem baze podataka u ameri\u010dkoj regiji, nije mogu\u0107e napraviti read-repliku u europskoj regiji sredstvima Cloud SQL-a, iako sam PostgreSQL to ne sprje\u010dava. Dopisivanje s zaposlenicima Googlea nije dovelo do ni\u010dega i zavr\u0161ilo je obe\u0107anjima u stilu \u201eznamo za problem i radimo na njemu, jednom \u0107e pitanje biti rije\u0161eno\u201d. <\/p>\n<p>Ako bismo naveli mogu\u0107nosti Cloud SQL-a u tezama, izgledalo bi to otprilike ovako:<\/p>\n<p><b>1. Visoka dostupnost (HA):<\/b><\/p>\n<ul>\n<li>unutar jedne regije;<\/li>\n<li>putem replikacije diska;<\/li>\n<li>ne koriste se mehanizmi PostgreSQL-a;<\/li>\n<li>mogu\u0107e automatsko i ru\u010dno upravljanje \u2014 failover\/failback;<\/li>\n<li>prilikom prebacivanja, baza podataka nije dostupna nekoliko minuta.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>unutar jedne regije;<\/li>\n<li>hot standby;<\/li>\n<li>PostgreSQL streaming replikacija.<\/li>\n<\/ul>\n<p>\nOsim toga, kao \u0161to to obi\u010dno biva, prilikom odabira tehnologije uvijek se susre\u0107e\u0161 s nekim <b>ograni\u010denjima<\/b>:<\/p>\n<ul>\n<li>naru\u010ditelj nije \u017eelio stvarati entitete i koristiti IaaS osim putem GKE-a;<\/li>\n<li>naru\u010ditelj ne bi \u017eelio implementirati self service PostgreSQL\/MySQL;<\/li>\n<li>U stvari, Google Spanner bi bio dobar izbor, da nije njegova cijena. Na\u017ealost, Django ORM ne mo\u017ee raditi s njim, a sve ostalo je dobra stvar.<\/li>\n<\/ul>\n<p>\nS obzirom na situaciju, klijent je postavio zbunjuju\u0107e pitanje: <i>\u00abMo\u017eete li napraviti ne\u0161to sli\u010dno, da bude kao Google Spanner, ali da radi i s Django ORM?\u00bb<\/i><\/p>\n<h3>Opcija rje\u0161enja br. 0<\/h3>\n<p>\nPrvo \u0161to mi je pala na pamet:<\/p>\n<ul>\n<li>ostati unutar CloudSQL;<\/li>\n<li>ugra\u0111ena replikacija izme\u0111u regija ne\u0107e postojati u bilo kojem obliku;<\/li>\n<li>poku\u0161ati povezati replikaciju s postoje\u0107im Cloud SQL by PostgreSQL;<\/li>\n<li>negdje i kako pokrenuti instancu PostgreSQL, ali barem ne dodirivati master.<\/li>\n<\/ul>\n<p>\nNa\u017ealost, ispostavilo se da to ne mo\u017ee funkcionirati, jer nemamo pristup hostu (on je zapravo u drugom projektu) \u2014 pg_hba i sli\u010dno, a jo\u0161 nemamo pristup kao superuser.<\/p>\n<h3>Opcija rje\u0161enja br. 1<\/h3>\n<p>\nNakon dodatnog razmi\u0161ljanja i uzimaju\u0107i u obzir prethodne okolnosti, na\u010din razmi\u0161ljanja se malo promijenio:<\/p>\n<ul>\n<li>i dalje poku\u0161avamo ostati unutar CloudSQL, ali prelazimo na MySQL, jer Cloud SQL by MySQL ima vanjski master koji:<\/li>\n<\/ul>\n<p>\n\u2014 slu\u017ei kao proxy za vanjske MySQL;<br \/>\n\u2014 izgleda kao instanca MySQL;<br \/>\n\u2014 osmi\u0161ljen je za migraciju podataka iz drugih oblaka ili On-premises.<\/p>\n<p>Budu\u0107i da pode\u0161avanje replikacije MySQL ne zahtijeva pristup hostu, na\u010delno je sve to radilo pomalo nestabilno i nezgodno. A kad smo to nastavili dalje, postalo je i potpuno zastra\u0161uju\u0107e, jer smo cijelu strukturu razvijali terraformom, a mo\u017eda bi se pokazalo da vanjski master nije podr\u017ean terraformom. Da, Google ima CLI, ali iz nekog razloga, i tu je sve radilo povremeno \u2014 ponekad se stvara, ponekad ne. Mo\u017eda zato \u0161to je CLI osmi\u0161ljen za migraciju podataka izvana, a ne za replikate.<\/p>\n<p>U biti, postalo je jasno da Cloud SQL potpuno ne odgovara. Kao \u0161to se ka\u017ee, u\u010dinili smo sve \u0161to smo mogli. <\/p>\n<h3>Opcija rje\u0161enja br. 2<\/h3>\n<p>\nBudu\u0107i da nismo mogli ostati unutar Cloud SQL, poku\u0161ali smo formulirati zahtjeve za kompromisno rje\u0161enje. Zahtjevi su se pokazali sljede\u0107ima:<\/p>\n<ul>\n<li>rad s Kubernetesom, maksimalno kori\u0161tenje resursa i mogu\u0107nosti Kubernetes-a (DCS, &#8230;) i GCP-a (LB, &#8230;);<\/li>\n<li>nedostatak balasta od hrpe nepotrebnih stvari u oblaku poput HA proxy;<\/li>\n<li>mogu\u0107nost pokretanja HA PostgreSQL ili MySQL u glavnoj regiji; u ostalim regijama \u2014 HA iz RR glavne regije plus njezina kopija (za pouzdanost);<\/li>\n<li>multi master (nije bilo \u017eelje povezivanja s njim, ali to nije bilo presudno)<\/li>\n<\/ul>\n<p>. <br \/>\nKao rezultat ovih zahtjeva, na horizontu su se napokon pojavile mogu\u0107nosti.<b>odgovaraju\u0107e opcije SDB-a i povezivanja<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>PostgreSQL alati<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nTehnologiju MySQL Galera razvila je firma Codership i predstavlja plugin za InnoDB. Osobitosti:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>sinhrona replikacija;<\/li>\n<li>\u010ditanje s bilo kojeg \u010dvora;<\/li>\n<li>pisanje na bilo koji \u010dvor;<\/li>\n<li>ugra\u0111eni mehanizam HA;<\/li>\n<li>ima Helm chart od Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nPrema opisu, stvar je potpuno fenomenalna i predstavlja open source projekt napisan u Go. Glavni u\u010desnik \u2014 Cockroach Labs (osnovali biv\u0161i radnici Google-a). Ova relacijska SDB prvotno je stvorena da bude distribuirana (s horizontalnim skaliranjem \"iz kutije\") i otporna na gre\u0161ke. Autori iz kompanije postavili su cilj \"spojiti bogatstvo funkcionalnosti SQL-a s horizontalnom dostupno\u0161\u0107u, svojstvenom za NoSQL re\u0161enja.\"<\/p>\n<p>Kao prijatan bonus \u2014 podr\u0161ka za PostgreSQL protokol povezivanja. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nOvo je nadogradnja za PostgreSQL, zapravo nova entitet, koja preuzima sve veze i obra\u0111uje ih. Ima svoj load balancer i parser, licencira se prema BSD licenci. Pru\u017ea \u0161iroke mogu\u0107nosti, ali izgleda pomalo zastra\u0161uju\u0107e, jer postojanje nove entitete mo\u017ee postati izvor dodatnih izazova. <\/p>\n<h3>Patroni<\/h3>\n<p>\nOvo je posljednje na \u0161to sam nai\u0161ao, i ispostavilo se da nije bez razloga. Patroni \u2014 open source alat koji, zapravo, predstavlja demon na Pythonu, koji omogu\u0107ava automatsko odr\u017eavanje klastera PostgreSQL s raznim tipovima replikacije i automatskim prebacivanjem uloga. Stvar se pokazala vrlo zanimljivom, jer se dobro integrira s Kubernetesom i ne nosi nikakve nove entitete. <\/p>\n<h3>\u0160to smo na kraju odabrali<\/h3>\n<p>\nIzbor nije bio lak:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 odli\u010dan, ali pomalo riskantan;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 tako\u0111e nije lo\u0161e, koristi se u mnogim mestima, ali MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 mnogo suvi\u0161nih entiteta, slaba integracija s cloud-om i K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 odli\u010dna integracija s K8s, nema suvi\u0161nih entiteta, dobro se integrira s GCP LB.<\/li>\n<\/ol>\n<p>\nTako da je izbor pao na Patroni. <\/p>\n<h3>Zaklju\u010dci<\/h3>\n<p>\nDo\u0161lo je vreme za kratko sumiranje. Da, svet IT infrastrukture se zna\u010dajno promenio, i ovo je samo po\u010detak. Iako su ranije cloudovi bili samo druga vrsta infrastrukture, sada je sve druga\u010dije. \u0160tavi\u0161e, inovacije u cloud-u se neprestano pojavljuju, nastavi\u0107e se pojavljivati, i mo\u017eda \u0107e se pojavljivati isklju\u010divo u cloud-ima, a zatim, snagom startapa, prenositi na On-premises.<\/p>\n<p>\u0160to se ti\u010de SQL-a, SQL \u0107e opstati. To zna\u010di da trebate poznati PostgreSQL i MySQL te znati raditi s njima, ali je jo\u0161 va\u017enije znati ih pravilno primijeniti.<br \/>\n<br \/>Izvor: <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.4 - 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\/hr\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Kako pre\u017eivjeti SQL bazu u 21. stolje\u0107u: oblaci, Kubernetes i PostgreSQL multimaster | ProHoster","description":"Pozdrav, Habr ov\u010dani. Danas zapo\u010dinju lekcije u prvoj grupi te\u010daja \u201ePostgreSQL\u201c.","canonical_url":"https:\/\/prohoster.info\/hr\/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":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}