{"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\/sl\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Pozdravljeni, \u010dlani Habr. Danes se za\u010dnejo predavanja v prvi skupini te\u010daja. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. V skladu s tem vam \u017eelimo predstaviti, kako je potekal odprti spletni seminar o tem te\u010daju.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">naslednjem odprtem predavanju<\/a><\/noindex> smo se pogovarjali o izzivih, s katerimi se sre\u010dujejo SQL baze v dobi oblakov in Kubernetes. Ob tem smo obravnavali, kako se SQL baze prilagajajo in mutirajo pod vplivom teh izzivov.<\/p>\n<p>Spletni seminar je vodil <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valerij Bezrukov<\/a><\/noindex>, vodja izvedbe Googlovih re\u0161itev v EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Ko so bila drevesa majhna...<\/h3>\n<p>\nNajprej se spomnimo, kako se je za\u010dela izbira DBMS na koncu prej\u0161njega stoletja. Vendar to ne bo te\u017eko, saj je bila izbira DBMS v tistih \u010dasih enostavna in se je zaklju\u010devala <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKonec 90-ih in za\u010detek 2000-ih ni dejansko ponujal posebne izbire, \u010de govorimo o industrijskih raz\u0161irljivih bazah podatkov. Da, obstajali so IBM DB2, Sybase in \u0161e nekatere druge baze podatkov, ki so se pojavljale in izginjale, a na splo\u0161no so bile manj opazne ob ozadju Oracle. Zato so bile ve\u0161\u010dine in\u017eenirjev tistega \u010dasa nekako odvisne od edine izbire, ki je bila na voljo.<\/p>\n<p>Oracle DBA je moral znati:<\/p>\n<ul>\n<li> namestiti Oracle Server iz distribucijskega paketa;<\/li>\n<li> konfigurirati 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 ustvarjati:<\/p>\n<ul>\n<li>tabele prostorov;<\/li>\n<li>sheme;<\/li>\n<li>uporabnike;<\/li>\n<\/ul>\n<p>\u2014 izvajati varnostno kopiranje in obnovo;<br \/>\n\u2014 izvajati spremljanje;<br \/>\n\u2014 se boriti proti neoptimalnim poizvedbam.<\/p>\n<p>Pri tem ni bilo posebej zahtevano od Oracle DBA:<\/p>\n<ul>\n<li>da bi znal izbrati optimalni DBMS ali druge tehnologije za shranjevanje in obdelavo podatkov;<\/li>\n<li>da bi zagotovil visoko razpolo\u017eljivost in horizontalno raz\u0161irljivost (to ni vedno bila naloga DBA);<\/li>\n<li>dobro poznati predmetno podro\u010dje, infrastrukturo, aplikativno arhitekturo, operacijski sistem;<\/li>\n<li>izvajanju nalaganja in nalaganja podatkov, migraciji podatkov med razli\u010dnimi DBMS.<\/li>\n<\/ul>\n<p>Na splo\u0161no, \u010de govorimo o izbiri v tistih \u010dasih, je ta spominjala na izbiro v sovjetski trgovini konec 80-ih:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in 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 takrat so se seveda drevesa pove\u010dala, svet se je spremenil in sedaj je stanje tak\u0161no:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSpremeni se je tudi trg DBMS, kar je jasno razvidno iz nedavne poro\u010dila podjetja Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn tukaj ne moremo spregledati, da so svojo ni\u0161o zasedli oblaki, katerih priljubljenost nara\u0161\u010da. \u010ce preberemo isto poro\u010dilo podjetja Gartner, bomo videli naslednje zaklju\u010dke:<\/p>\n<ol>\n<li>Mnogi naro\u010dniki so na poti k prenosi aplikacij v oblak. <\/li>\n<li>Nove tehnologije se najpre pojavljuju u oblaku, a nije sigurno da \u0107e se ikada preseliti u neobla\u010dnu infrastrukturu.<\/li>\n<li>Model formiranja cena prema principu pay-as-you-go postao je uobi\u010dajen. Svi \u017eele da pla\u0107aju samo za ono \u0161to koriste, i to vi\u0161e nije trend, ve\u0107 jednostavna konstatacija. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Kaj zdaj?<\/h3>\n<p>\nDanas smo svi u oblaku. Pitanja koja se postavljaju odnose se na izbor. A izbor je ogroman, \u010dak i kada govorimo samo o odabiru tehnologija DBMS u On-premises formatu. Pored toga, tu su i managed services i SaaS. Dakle, izbor postaje sve slo\u017eeniji.<\/p>\n<p>Pored pitanja izbora, postoje i <b>ograni\u010davaju\u0107i faktori<\/b>:<\/p>\n<ul>\n<li><b>cena<\/b>. Mnoge tehnologije i dalje ko\u0161taju novac;<\/li>\n<li><b>ve\u0161tine<\/b>. Kada govorimo o slobodnom softveru, postavlja se pitanje ve\u0161tina, jer besplatan softver zahteva od ljudi koji ga implementiraju i koriste dovoljnu kompetenciju;<\/li>\n<li><b>funkcionalnosti<\/b>. Nisu sve usluge koje su dostupne u oblaku, \u010dak i one koje su mo\u017eda zasnovane na Postgresu, opremljene istim funkcijama kao Postgres On-premises. To je su\u0161tinski faktor koji je potrebno znati i razumeti. \u0160tavi\u0161e, ovaj faktor postaje jo\u0161 va\u017eniji od poznavanja nekih skrivene mogu\u0107nosti odre\u0111enog DBMS-a. <\/li>\n<\/ul>\n<p>\n<b>\u0160ta se sada o\u010dekuje od DA\/DE:<\/b><\/p>\n<ul>\n<li>dobrog razumevanja tematske oblasti i primenjene arhitekture;<\/li>\n<li>sposobnosti ispravnog odabira prikladne DBMS tehnologije u skladu s postavljenim zadatkom;<\/li>\n<li>sposobnosti odabira optimalne metode implementacije odabrane tehnologije u kontekstu postoje\u0107ih ograni\u010denja;<\/li>\n<li>sposobnosti izvo\u0111enja prenosa i migracije podataka;<\/li>\n<li>sposobnosti implementacije i eksploatacije odabranih re\u0161enja.<\/li>\n<\/ul>\n<p>\nSlede\u0107i primer <b>na bazi GCP<\/b> demonstrira kako izgleda izbor odre\u0111ene tehnologije rada s podacima u zavisnosti od njihove strukture:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObratite pa\u017enju da shema ne sadr\u017ei PostgreSQL, jer se on krije iza terminologije <b>Obla\u010dna SQL<\/b>. I kada u\u0111emo u Cloud SQL, opet moramo doneti odluku:<\/p>\n<p><img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTreba napomenuti da ova odluka nije uvek jasna, pa se programeri aplikacija \u010desto vode intuicijom. <\/p>\n<p><b>Skupaj:<\/b><\/p>\n<ol>\n<li>\u010cim dalje, to je pitanje izbora sve aktuelnije. I \u010dak i ako se fokusiramo samo na GCP, upravljane usluge i SaaS, neki pomen RDBMS-a pojavljuje se tek na 4. koraku (a tu je i Spanner). Plus, izbor PostgreSQL-a se pojavljuje tek na 5. koraku, a pored njega su jo\u0161 MySQL i SQL Server, \u0161to zna\u010di <b>da je svega mnogo, a treba izabrati<\/b>. <\/li>\n<li>Ne treba zaboraviti ni na ograni\u010denja u svetlu isku\u0161enja. Uglavnom, svi \u017eele Spanner, ali on je skup. Na kraju, tipi\u010dni zahtev izgleda otprilike ovako: <i>\u201eMolimo vas da nam napravite Spanner, ali po ceni Cloud SQL-a, pa vi ste profesionalci!\u201d<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Kako pre\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>A \u0161ta raditi?<\/h3>\n<p>\nNe pretenduju\u0107i na istinu u poslednjoj instanci, recimo slede\u0107e:<\/p>\n<p><b>Potrebno je promeniti pristup obuci:<\/b><\/p>\n<ul>\n<li>u\u010diti kao \u0161to su nekada u\u010dili DBA, nema smisla;<\/li>\n<li>znanje jednog proizvoda vi\u0161e nije dovoljno;<\/li>\n<li>a poznavati desetine na nivou jednog \u2014 nemogu\u0107e je.<\/li>\n<\/ul>\n<p>\nTreba znati ne samo i ne koliko proizvod, ve\u0107:<\/p>\n<ul>\n<li>use case njegove primene;<\/li>\n<li>razli\u010dite metode implementacije;<\/li>\n<li>prednosti i nedostaci svake od metoda;<\/li>\n<li>sli\u010dne i alternativne proizvode, kako bi se donela svesna i optimalna odluka, a ne uvek u korist poznatog proizvoda.<\/li>\n<\/ul>\n<p>\nA jo\u0161 treba umeti migrirati podatke i razumeti osnovne principe integracije s ETL.<\/p>\n<h3>Stvarni slu\u010daj<\/h3>\n<p>\nU nedavnoj pro\u0161losti bilo je potrebno napraviti backend za mobilnu aplikaciju. U trenutku po\u010detka rada na njoj, backend je ve\u0107 bio razvijen i spreman za implementaciju, a tim programera je na ovom projektu proveo oko dve godine. U me\u0111uvremenu, postavljeni su slede\u0107i zadaci:<\/p>\n<ul>\n<li>izgraditi CI\/CD;<\/li>\n<li>napraviti reviziju arhitekture;<\/li>\n<li>pokrenuti sve to u eksploataciju. <\/li>\n<\/ul>\n<p>\nSama aplikacija bila je mikroservisana, a kod na Python\/Django-u bio je razvijen od nule i odmah u GCP. \u0160to se ti\u010de ciljne publike, pretpostavljalo se da \u0107e biti dva regiona \u2014 Sjedinjene Dr\u017eave i EU, a saobra\u0107aj se raspore\u0111ivao putem Global Load balancera. Svi Workloads i ra\u010dunska optere\u0107enja radila su u Google Kubernetes Engine. <\/p>\n<p>\u0160to se ti\u010de podataka, postojale 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 bazo v 21. stoletju: oblaki, Kubernetes in 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 izabran Cloud SQL? Iskreno, takvo pitanje u poslednjim godinama izaziva neku neprijatnu pauzu \u2014 sti\u010de se utisak da su ljudi po\u010deli da se stide relacijskih baza, ali, uprkos svemu, i dalje ih aktivno koriste ;-). <\/p>\n<p>\u0160to se ti\u010de na\u0161eg slu\u010daja, Cloud SQL je izabran iz slede\u0107ih razloga:<\/p>\n<ol>\n<li>Kot je bilo omenjeno, je bila aplikacija razvita s pomo\u010djo Django, v kateri je model za prikaz stalnih podatkov iz SQL baze v Python objektih (Django ORM).<\/li>\n<li>Sami okvirji so podpirali precej omejen seznam DBMS:<\/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>\nZato smo PostgreSQL izbrali iz tega seznama bolj intuitivno (saj ne bomo izbrali Oracle, res je).<\/p>\n<p><b>\u010cesar je manjkalo:<\/b><\/p>\n<ul>\n<li>aplikacija je bila name\u0161\u010dena le v dveh regijah, tretja v na\u010drtu pa je bila Azija;<\/li>\n<li>Baza podatkov se je nahajala v severnoameri\u0161ki regiji (Iowa);<\/li>\n<li>stranka je imela pomisleke glede morebitnih <b>zakasnitev pri dostopu<\/b> iz Evrope in Azije ter <b>motenj <\/b><b>v storitvah<\/b> v primeru izpada DBMS. <\/li>\n<\/ul>\n<p>\n\u010ceprav lahko sam Django deluje z ve\u010d DB hkrati in jih deli glede na branje in pisanje, v aplikaciji ni bilo toliko zapisov (ve\u010d kot 90 % \u2014 branje). Na splo\u0161no, \u010de bi bilo mogo\u010de ustvariti <b>read-repliko glavne baze v Evropi in Aziji<\/b>, bi to bila kompromisna re\u0161itev. Kaj je tukaj zapletenega?<\/p>\n<p>Zahtevnost je bila v tem, da stranka ni \u017eelela odstopiti od uporabe upravljanih storitev in Cloud SQL. Zmo\u017enosti Cloud SQL so trenutno omejene. Cloud SQL podpira visoko razpolo\u017eljivost (HA) in read repliko (RR), toda RR se podpira le v eni regiji. Ustvarjanje DB v ameri\u0161ki regiji ne omogo\u010da ustvarjanja read-replike v evropski regiji s sredstvi Cloud SQL, \u010deprav sam PostgreSQL to dovoljuje. Dopisovanje z zaposlenimi Googlea ni prineslo rezultatov in se je kon\u010dalo z obljubami v slogu: \"poznamo te\u017eavo in delamo na njej, vpra\u0161anji bosta neko\u010d re\u0161ena.\" <\/p>\n<p>\u010ce na kratko na\u0161tejem mo\u017enosti Cloud SQL, bo to videti pribli\u017eno tako:<\/p>\n<p><b>1. Visoka razpolo\u017eljivost (HA):<\/b><\/p>\n<ul>\n<li>v okviru ene regije;<\/li>\n<li>s pomo\u010djo replikacije diskov;<\/li>\n<li>se mehanizmi PostgreSQL ne uporabljajo;<\/li>\n<li>mo\u017eno je avtomatsko in ro\u010dno upravljanje \u2014 failover\/failback;<\/li>\n<li>med preklopom DBMS ni dostopna nekaj minut.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>v okviru ene regije;<\/li>\n<li>hot standby;<\/li>\n<li>PostgreSQL streaming replication.<\/li>\n<\/ul>\n<p>\nPoleg tega, kot je obi\u010dajno, pri izbiri tehnologije vedno naleti\u0161 na kak\u0161ne <b>omejitve,<\/b>:<\/p>\n<ul>\n<li>stranka ni \u017eelela mno\u017eiti entitet in uporabljati IaaS, razen preko GKE;<\/li>\n<li>stranka ne bi \u017eelela namestiti self service PostgreSQL\/MySQL;<\/li>\n<li>In general, Google Spanner would be quite suitable if it weren't for its price. However, Django ORM cannot work with it; otherwise, it's a good tool.<\/li>\n<\/ul>\n<p>\nConsidering the situation, we received a tricky question from the client: <i>\u201cCan you create something similar so that it works like Google Spanner but also with Django ORM?\u201d<\/i><\/p>\n<h3>Solution Option #0<\/h3>\n<p>\nThe first thought that came to mind was:<\/p>\n<ul>\n<li>to stay within the confines of CloudSQL;<\/li>\n<li>there won't be internal replication between regions in any form;<\/li>\n<li>to try to connect a replica to the existing Cloud SQL by PostgreSQL;<\/li>\n<li>somewhere and somehow to launch a PostgreSQL instance, but at least not to touch the master.<\/li>\n<\/ul>\n<p>\nUnfortunately, it turned out that this couldn't be done because there is no access to the host (it is generally in another project) \u2014 pg_hba and so on, and there is also no superuser access.<\/p>\n<h3>Solution Option #1<\/h3>\n<p>\nAfter further reflection and taking previous circumstances into account, the thought process changed somewhat:<\/p>\n<ul>\n<li>we are still trying to stay within the confines of CloudSQL, but we transition to MySQL, as Cloud SQL by MySQL has an external master which:<\/li>\n<\/ul>\n<p>\n\u2014 acts as a proxy for the external MySQL;<br \/>\n\u2014 appears as a MySQL instance;<br \/>\n\u2014 is designed for migrating data from other clouds or on-premises.<\/p>\n<p>Since setting up MySQL replication doesn't require access to the host, everything basically worked, but it was very unstable and inconvenient. And as we pushed further, it became downright scary because we were deploying the entire structure with Terraform, and suddenly it turned out that the external master is not supported by Terraform. Yes, Google has a CLI, but for some reason, everything worked intermittently \u2014 sometimes it creates, sometimes it doesn't. Perhaps because the CLI was designed for migrating data externally, not for replicas.<\/p>\n<p>In fact, it became clear that Cloud SQL is absolutely unsuitable. As they say, we did everything we could. <\/p>\n<h3>Solution Option #2<\/h3>\n<p>\nSince staying within Cloud SQL didn't work out, we tried to formulate the requirements for a compromise solution. The requirements turned out to be as follows:<\/p>\n<ul>\n<li>delo v Kubernetes, maksimalna izkori\u0161\u010denost virov in mo\u017enosti Kubernetes (DCS, &#8230;) in GCP (LB, &#8230;);<\/li>\n<li>absence of ballast from a bunch of unnecessary cloud things like HA proxy;<\/li>\n<li>the ability to run HA PostgreSQL or MySQL in the main region; in other regions \u2014 HA from the main region RR plus its copy (for reliability);<\/li>\n<li>multi-master (we didn't want to connect to it, but it wasn't very critical)<\/li>\n<\/ul>\n<p>. <br \/>\nAs a result of these requirements, a solution finally appeared on the horizon.<b>primerne mo\u017enosti DBMS in vmesnega sloja<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>Orodja PostgreSQL<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nTehnologija MySQL Galera je bila razvita s strani podjetja Codership in predstavlja vti\u010dnik za InnoDB. Zna\u010dilnosti:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>sinhrona replikacija;<\/li>\n<li>branje z vsakega vozli\u0161\u010da;<\/li>\n<li>zapisi na katerem koli vozli\u0161\u010du;<\/li>\n<li>vgrajen mehanizem HA;<\/li>\n<li>obstaja Helm chart od Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nPo opisu je stvar popolnoma neverjetna in predstavlja open source projekt, napisan v Go. Glavni udele\u017eenec je Cockroach Labs (ustanovljena s strani nekdanjih zaposlenih pri Googlu). Ta relacijska DBMS je bila sprva zasnovana kot distributivna (s horizontalno skalabilnostjo \u00bbiz \u0161katle\u00ab) in odporna na napake. Njeni avtorji so si zadali cilj \u00bbzdru\u017eiti bogastvo SQL funkcionalnosti z horizontalno dostopnostjo, zna\u010dilno za re\u0161itve NoSQL\u00ab.<\/p>\n<p>Kot prijeten dodatek \u2014 podpora za postgresni protokol povezovanja. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nTo je nadgradnja nad PostgreSQL, v resnici nova entiteta, ki prevzema vse povezave in jih obdeluje. Ima svoj balansirnik obremenitve in parser, licencira se po BSD licenci. Ponuja \u0161iroke mo\u017enosti, vendar izgleda nekoliko zastra\u0161ujo\u010de, ker je nova entiteta lahko vir nekaterih dodatnih dogodiv\u0161\u010din. <\/p>\n<h3>Patroni<\/h3>\n<p>\nTo je zadnji pogled, ki sva ga ujela in, kot se je izkazalo, ni bilo zaman. Patroni je open source orodje, ki v bistvu predstavlja demon na Pythonu, ki omogo\u010da avtomatsko upravljanje PostgreSQL grozdov z razli\u010dnimi vrstami replikacije in samodejnim preklapljanjem vlog. Zadeva se je izkazala za zelo zanimivo, saj se dobro integrira s Kubernetesom in ne prina\u0161a nobenih novih entitet. <\/p>\n<h3>Kaj smo na koncu izbrali<\/h3>\n<p>\nIzbira ni bila enostavna:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 ognjeno, a skrb vzbujajo\u010de;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 tudi kar dobra, uporablja se na mnogih mestih, a MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 preve\u010d nepotrebnih entitet, slaba integracija z oblakom in K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 odli\u010dna integracija z K8s, brez nepotrebnih entitet, dobro se integrira z GCP LB.<\/li>\n<\/ol>\n<p>\nTako je izbira padla na Patroni. <\/p>\n<h3>Zaklju\u010dki<\/h3>\n<p>\nPri\u0161el je \u010das za kratke zaklju\u010dke. Da, svet IT infrastrukture se je bistveno spremenil in to je \u0161ele za\u010detek. \u010ce so bili prej oblaki le drug tip infrastrukture, je zdaj vse druga\u010de. Poleg tega se inovacije v oblakih nenehno pojavljajo, \u0161e naprej se bodo pojavljale in morda se bodo pojavljale le v oblakih in \u0161ele nato, s pomo\u010djo start-upov, se bodo prena\u0161ale v On-premises.<\/p>\n<p>Kar se ti\u010de SQL, SQL bo \u0161e naprej \u017eivel. To pomeni, da se je treba nau\u010diti PostgreSQL in MySQL ter z njimi znati delati, \u0161e bolj pomembno pa je, kako jih pravilno uporabljati.<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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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\u017eiveti SQL bazo v 21. stoletju: oblaki, Kubernetes in PostgreSQL multimaster | ProHoster","description":"Pozdravljeni, Habr\u010dani. Danes se za\u010denja pouk v prvi skupini te\u010daja \u201ePostgreSQL\u201c.","canonical_url":"https:\/\/prohoster.info\/sl\/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":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}