{"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\/no\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Hei, hubbers. I dag starter undervisningen i den f\u00f8rste gruppen av kurset <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. I forbindelse med dette \u00f8nsker vi \u00e5 fortelle dere om hvordan det \u00e5pne webinaret om dette kurset gikk.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">enda et \u00e5pent kurs<\/a><\/noindex> snakket vi om hvilke utfordringer SQL-databaser har m\u00f8tt i skyens og Kubernetes' \u00e6ra. Samtidig s\u00e5 vi p\u00e5 hvordan SQL-databaser tilpasser seg og utvikler seg under innflytelse av disse utfordringene.<\/p>\n<p>Webinaret ble holdt av <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valeriy Bezrukov<\/a><\/noindex>, Google Cloud Practice Delivery Manager hos EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Da tr\u00e6rne var sm\u00e5\u2026<\/h3>\n<p>\nFor \u00e5 begynne, la oss huske hvordan valget av DBMS startet p\u00e5 slutten av forrige \u00e5rhundre. Det b\u00f8r ikke v\u00e6re s\u00e5 vanskelig, for valget av DBMS i de tider begynte og sluttet med <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e5 slutten av 90-tallet og begynnelsen av 2000-tallet var det i realiteten ikke mye valg n\u00e5r det gjelder industrielle skalerbare databaser. Ja, det fantes IBM DB2, Sybase og noen andre databaser som dukket opp og forsvant, men stort sett var de ikke s\u00e5 synlige i forhold til Oracle. F\u00f8lgelig var ingeni\u00f8renes ferdigheter p\u00e5 den tiden mer eller mindre knyttet til det eneste valget som fantes.<\/p>\n<p>En Oracle DBA m\u00e5tte kunne:<\/p>\n<ul>\n<li> installere Oracle Server fra distribusjon;<\/li>\n<li> konfigurere 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 opprette:<\/p>\n<ul>\n<li>tabellerom;<\/li>\n<li>skjemaer;<\/li>\n<li>brukere;<\/li>\n<\/ul>\n<p>\u2014 utf\u00f8re sikkerhetskopiering og gjenoppretting;<br \/>\n\u2014 overv\u00e5ke;<br \/>\n\u2014 bekjempe suboptimale foresp\u00f8rsel.<\/p>\n<p>Samtidig ble det ikke spesielt krevd av Oracle DBA \u00e5:<\/p>\n<ul>\n<li>kunne velge den optimale DBMS eller annen teknologi for lagring og behandling av data;<\/li>\n<li>sikre h\u00f8y tilgjengelighet og horisontal skalerbarhet (dette var ikke alltid et sp\u00f8rsm\u00e5l for DBA);<\/li>\n<li>ha god kunnskap om fagfeltet, infrastrukturen, applikasjonsarkitekturen, OS;<\/li>\n<li>utf\u00f8re dataopplasting og -utlasting, migrasjon av data mellom forskjellige DBMS.<\/li>\n<\/ul>\n<p>Generelt, n\u00e5r man snakker om valgmulighetene p\u00e5 den tiden, minner det om valget i en sovjetisk butikk p\u00e5 slutten av 80-tallet:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>V\u00e5r tid<\/h3>\n<p>\nSiden den gang har tr\u00e6rne naturligvis vokst, verden har endret seg, og det har blitt slik:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMarkedet for DBMS har ogs\u00e5 endret seg, noe som er tydelig i den nyeste rapporten fra Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOg her m\u00e5 det nevnes at skyene har tatt sin plass, hvis popularitet vokser. Hvis man leser den samme rapporten fra Gartner, vil vi se f\u00f8lgende konklusjoner:<\/p>\n<ol>\n<li>Mange kunder er p\u00e5 vei til \u00e5 flytte applikasjoner til skyen. <\/li>\n<li>Nye teknologier dukker f\u00f8rst opp i skyen, og det er ikke sikkert at de noen gang vil flytte til en ikke-skybasert infrastruktur.<\/li>\n<li>Modellen for prising basert p\u00e5 pay-as-you-go har blitt vanlig. Alle \u00f8nsker \u00e5 betale kun for det de bruker, og dette er ikke lenger en trend, men en konstatering av faktum. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Hva skjer n\u00e5?<\/h3>\n<p>\nI dag er vi alle i skyen. De sp\u00f8rsm\u00e5lene vi har, handler om valg. Og valgene er enorme, selv om vi bare snakker om valget av DB-teknologier i on-premises-format. I tillegg har vi managed services og SaaS. Dermed blir valget mer og mer komplisert hvert \u00e5r.<\/p>\n<p>I tillegg til valgsituasjonen, finnes det <b>begrensende faktorer<\/b>:<\/p>\n<ul>\n<li><b>pris<\/b>. Mange teknologier koster fortsatt penger;<\/li>\n<li><b>ferdigheter<\/b>. N\u00e5r vi snakker om gratis programvare, oppst\u00e5r det et sp\u00f8rsm\u00e5l om ferdigheter, fordi gratis programvare krever at folk som ruller ut og drifter det, har tilstrekkelig kompetanse;<\/li>\n<li><b>funksjonalitet<\/b>. Ikke alle tjenester som er tilgjengelige i skyen og bygget, for eksempel p\u00e5 basis av Postgres, har de samme funksjonene som Postgres on-premises. Dette er en vesentlig faktor som m\u00e5 forst\u00e5s. I tillegg f\u00e5r denne faktoren mer betydning enn kunnskap om spesifikke skjulte muligheter i en enkelt DBMS. <\/li>\n<\/ul>\n<p>\n<b>Hva man forventer av DA\/DE n\u00e5:<\/b><\/p>\n<ul>\n<li>gode kunnskaper om fagfeltet og anvendt arkitektur;<\/li>\n<li>evnen til \u00e5 velge riktig DB-teknologi med tanke p\u00e5 oppgaven som stilles;<\/li>\n<li>evnen til \u00e5 velge optimal implementeringsmetode for den valgte teknologien i lys av eksisterende begrensninger;<\/li>\n<li>evnen til \u00e5 utf\u00f8re overf\u00f8ringer og migrering av data;<\/li>\n<li>evnen til \u00e5 implementere og drifte de valgte l\u00f8sningene.<\/li>\n<\/ul>\n<p>\nEksemplet nedenfor <b>basert p\u00e5 GCP<\/b> demonstrerer hvordan valget av en bestemt teknologi for databehandling fungerer avhengig av datamengde:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00e6r oppmerksom p\u00e5 at PostgreSQL ikke er med i diagrammet, og det er fordi det skjuler seg under betegnelsen <b>Cloud SQL<\/b>. Og n\u00e5r vi g\u00e5r inn i Cloud SQL, m\u00e5 vi igjen ta et valg:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er verdt \u00e5 merke seg at dette valget ikke alltid er klart, s\u00e5 applikasjonsutviklere ofte ledes av instinktet. <\/p>\n<p><b>Totalt:<\/b><\/p>\n<ol>\n<li>Jo lenger framover vi ser, desto mer aktuelt blir sp\u00f8rsm\u00e5let om valg. Og selv n\u00e5r vi kun ser p\u00e5 GCP, managed services og SaaS, dukker det opp en omtale av RDBMS f\u00f8rst i fjerde trinn (hvor Spanner er n\u00e6rt). I tillegg kommer valget av PostgreSQL f\u00f8rst i femte trinn, mens MySQL og SQL Server ogs\u00e5 er til stede, s\u00e5 <b>det er mye \u00e5 velge fra, men man m\u00e5 ta et valg<\/b>. <\/li>\n<li>Vi m\u00e5 ikke glemme begrensningene som kommer med fristelsene. Hovedsakelig \u00f8nsker alle Spanner, men det er dyrt. S\u00e5 en typisk foresp\u00f8rsel ser omtrent slik ut: <i>\u00abKan dere lage Spanner til oss, men til prisen for Cloud SQL, dere er jo profesjonelle!\u00bb<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Hva skal man gj\u00f8re?<\/h3>\n<p>\nUten \u00e5 p\u00e5st\u00e5 \u00e5 ha den endelige sannheten, la oss si f\u00f8lgende:<\/p>\n<p><b>Vi m\u00e5 endre tiln\u00e6rmingen til utdanning:<\/b><\/p>\n<ul>\n<li>\u00e5 l\u00e6re slik man gjorde f\u00f8r for DBA-er, gir ingen mening;<\/li>\n<li>kunnskap om ett enkelt produkt er n\u00e5 allerede utilstrekkelig;<\/li>\n<li>og \u00e5 ha kjennskap til titalls produkter p\u00e5 ett niv\u00e5 er umulig.<\/li>\n<\/ul>\n<p>\nMan m\u00e5 forst\u00e5 ikke bare produktet, men ogs\u00e5:<\/p>\n<ul>\n<li>bruksomr\u00e5dene for det;<\/li>\n<li>de ulike distribusjonsmetodene;<\/li>\n<li>fordelene og ulempene ved hver metode;<\/li>\n<li>beslektede og alternative produkter for \u00e5 ta bevisste og optimale valg, ikke alltid til fordel for det kjente produktet.<\/li>\n<\/ul>\n<p>\nOg man m\u00e5 ogs\u00e5 kunne migrere data og forst\u00e5 grunnleggende prinsipper for integrasjon med ETL.<\/p>\n<h3>En reell situasjon<\/h3>\n<p>\nI det siste m\u00e5tte jeg utvikle backend for en mobilapp. Da arbeidet med denne startet, var backend allerede utviklet og klar for implementering, og utviklerteamet hadde brukt omtrent to \u00e5r p\u00e5 dette prosjektet. F\u00f8lgende oppgaver ble satt:<\/p>\n<ul>\n<li>bygge CI\/CD;<\/li>\n<li>gj\u00f8re arkitekturreview;<\/li>\n<li>sette alt dette i drift. <\/li>\n<\/ul>\n<p>\nSelve applikasjonen var mikrotjenestebasert, og koden i Python\/Django ble utviklet fra bunnen av direkte i GCP. N\u00e5r det gjelder m\u00e5lgruppen, var det planlagt to regioner \u2014 USA og EU, og trafikken ble fordelt gjennom Global Load Balancer. Alle arbeidsbelastninger og beregningsbelastning kj\u00f8rte i Google Kubernetes Engine. <\/p>\n<p>N\u00e5r det gjelder dataene, var det tre strukturer:<\/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=\"Hvordan overleve en SQL-database i det 21. \u00e5rhundret: skyl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet kan oppst\u00e5 sp\u00f8rsm\u00e5l om hvorfor Cloud SQL ble valgt? For \u00e5 v\u00e6re \u00e6rlig, har slike sp\u00f8rsm\u00e5l de siste \u00e5rene skapt en viss pinlig pause \u2014 det virker som folk begynner \u00e5 bli flaue over relasjonsdatabaser, men de fortsetter likevel \u00e5 bruke dem aktivt ;-). <\/p>\n<p>N\u00e5r det gjelder v\u00e5r situasjon, ble Cloud SQL valgt av f\u00f8lgende grunner:<\/p>\n<ol>\n<li>Som det ble nevnt, ble applikasjonen utviklet med Django, og den har en modell for \u00e5 vise permanente data fra SQL-databasen som Python-objekter (Django ORM).<\/li>\n<li>Rammeverket st\u00f8ttet en begrenset liste over databasesystemer:<\/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>\nDermed ble PostgreSQL valgt fra denne listen mer eller mindre intuitivt (men ikke Oracle, alts\u00e5).<\/p>\n<p><b>Hva som manglet:<\/b><\/p>\n<ul>\n<li>applikasjonen var bare distribuert i 2 regioner, og det var planer om en 3. (Asia);<\/li>\n<li>Databasen befant seg i den nordamerikanske regionen (Iowa);<\/li>\n<li>det var bekymringer fra kunden ang\u00e5ende mulige <b>forsinkelser med tilgang<\/b> fra Europa og Asia, og <b>avbrudd <\/b><b>i tjenesten<\/b> i tilfelle av en databasefeil. <\/li>\n<\/ul>\n<p>\nSelv om Django kan h\u00e5ndtere flere databaser parallelt og skille dem ved lesing og skriving, var det ikke s\u00e5 mange skrivinger i applikasjonen (over 90 % er lesing). Generelt sett, hvis man kunne lage en <b>read-replika av hoveddatabasen i Europa og Asia<\/b>, ville det v\u00e6rt en kompromissl\u00f8sning. Hva er s\u00e5 vanskelig med det?<\/p>\n<p>Utfordringen var at kunden ikke \u00f8nsket \u00e5 gi opp bruken av managed services og Cloud SQL. Mulighetene med Cloud SQL er for tiden begrensede. Cloud SQL st\u00f8tter h\u00f8y tilgjengelighet (HA) og lesereplika (RR), men den samme RR st\u00f8ttes bare i \u00e9n region. Ved \u00e5 opprette en database i den amerikanske regionen, er det ikke mulig \u00e5 lage en read-replika i den europeiske regionen ved hjelp av Cloud SQL, selv om PostgreSQL selv ikke hindrer dette. Korrespondanse med Google-ansatte f\u00f8rte ikke til noe og endte med l\u00f8fter som \u00abVi er klar over problemet og jobber med det, sp\u00f8rsm\u00e5let vil bli l\u00f8st en gang\u00bb. <\/p>\n<p>Hvis vi oppsummerer mulighetene med Cloud SQL punktvis, vil det se omtrent slik ut:<\/p>\n<p><b>1. H\u00f8y tilgjengelighet (HA):<\/b><\/p>\n<ul>\n<li>innen ett enkelt omr\u00e5de;<\/li>\n<li>gjennom diskreplikering;<\/li>\n<li>bruker ikke PostgreSQL-mekanismer;<\/li>\n<li>mulig automatisk og manuell styring \u2014 failover\/failback;<\/li>\n<li>ved omkobling er databasen utilgjengelig i flere minutter.<\/li>\n<\/ul>\n<p>\n<b>2. Lesereplika (RR):<\/b><\/p>\n<ul>\n<li>innen ett enkelt omr\u00e5de;<\/li>\n<li>hot standby;<\/li>\n<li>PostgreSQL streaming replikering.<\/li>\n<\/ul>\n<p>\nI tillegg, som vanlig, n\u00e5r man velger teknologi, st\u00f8ter man alltid p\u00e5 noe <b>begrensninger;<\/b>:<\/p>\n<ul>\n<li>kunden \u00f8nsket ikke \u00e5 skape flere enheter og bruke IaaS, annet enn via GKE;<\/li>\n<li>kunden \u00f8nsket ikke \u00e5 sette opp self service PostgreSQL\/MySQL;<\/li>\n<li>Selv om Google Spanner ville v\u00e6rt et godt alternativ, hvis ikke for prisen, kan Django ORM ikke arbeide med det, men ellers er det en flott ting.<\/li>\n<\/ul>\n<p>\nGitt situasjonen, kom det et sp\u00f8rsm\u00e5l fra kunden: <i>\u00abKan dere lage noe lignende, s\u00e5 det er som Google Spanner, men fungerer ogs\u00e5 med Django ORM?\u00bb<\/i><\/p>\n<h3>L\u00f8sningsalternativ nr. 0<\/h3>\n<p>\nDet f\u00f8rste som kom til tankene:<\/p>\n<ul>\n<li>holde seg innenfor CloudSQL;<\/li>\n<li>det vil ikke v\u00e6re noen form for innebygd replikering mellom regioner;<\/li>\n<li>pr\u00f8ve \u00e5 koble til en kopi av eksisterende Cloud SQL by PostgreSQL;<\/li>\n<li>kj\u00f8re en PostgreSQL-instans et sted, men i det minste ikke r\u00f8re ved masteren.<\/li>\n<\/ul>\n<p>\nDessverre viste det seg at det ikke var mulig, da det ikke er tilgang til verten (den er i et annet prosjekt) \u2014 pg_hba og s\u00e5 videre, og det er ikke tilgang med superbruker.<\/p>\n<h3>L\u00f8sningsalternativ nr. 1<\/h3>\n<p>\nEtter noen flere refleksjoner og med tanke p\u00e5 de tidligere forholdene, endret tankegangen seg litt:<\/p>\n<ul>\n<li>vi pr\u00f8ver fortsatt \u00e5 holde oss innenfor CloudSQL, men bytter til MySQL, da Cloud SQL by MySQL har en ekstern master som:<\/li>\n<\/ul>\n<p>\n\u2014 fungerer som en proxy for ekstern MySQL;<br \/>\n\u2014 ser ut som en MySQL-instans;<br \/>\n\u2014 er laget for migrering av data fra andre skyer eller on-premises.<\/p>\n<p>Siden innstillingen for MySQL-replikering ikke krever tilgang til verten, fungerte alt i prinsippet, men det var veldig ustabilt og upraktisk. Og n\u00e5r vi gikk videre, ble det skummelt, fordi vi rullet ut hele strukturen med terraform, og plutselig viste det seg at ekstern master ikke st\u00f8ttes av terraform. Ja, Google har CLI, men det ble av en eller annen grunn ogs\u00e5 ustabilt - noen ganger ble det opprettet, noen ganger ikke. Kanskje fordi CLI ble utviklet for datamigrering fra utsiden, ikke for replikaer.<\/p>\n<p>Egentlig ble det klart at Cloud SQL ikke passet i det hele tatt. Som de sier, gjorde vi alt vi kunne. <\/p>\n<h3>L\u00f8sningsalternativ nr. 2<\/h3>\n<p>\nSiden det ikke var mulig \u00e5 holde seg innenfor Cloud SQL, pr\u00f8vde vi \u00e5 formulere kravene til en kompromissl\u00f8sning. Kravene ble som f\u00f8lger:<\/p>\n<ul>\n<li>arbeid i Kubernetes, maksimal utnyttelse av ressurser og muligheter i Kubernetes (DCS, &#8230;) og GCP (LB, &#8230;);<\/li>\n<li>ingen ballast fra masse un\u00f8dvendige ting i skyen som HA proxy;<\/li>\n<li>mulighet for \u00e5 kj\u00f8re HA PostgreSQL eller MySQL i hovedregionen; i andre regioner \u2014 HA fra hovedregionens RR pluss en kopi av den (for p\u00e5litelighet);<\/li>\n<li>multi master (det var ikke s\u00e5 \u00f8nskelig \u00e5 koble seg til, men det var ikke veldig prinsipielt)<\/li>\n<\/ul>\n<p>. <br \/>\nSom et resultat av disse kravene, dukket det endelig opp en l\u00f8sning i horisonten.<b>passende database- og bindingsalternativer<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>PostgreSQL-verkt\u00f8y<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nMySQL Galera-teknologien er utviklet av Codership og er et plugin for InnoDB. Egenskaper:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>synchron replikasjon;<\/li>\n<li>lese fra hvilken som helst node;<\/li>\n<li>skrive til hvilken som helst node;<\/li>\n<li>innebygd HA-mekanisme;<\/li>\n<li>det er en Helm-chart fra Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nBeskrivelsen gir inntrykk av noe helt fantastisk og er et open source-prosjekt skrevet i Go. Hovedakt\u00f8ren er Cockroach Labs (grunnlagt av tidligere Google-ansatte). Denne relasjonsdatabasen er opprinnelig laget for \u00e5 v\u00e6re distribuert (med horisontal skalerbarhet \u00abut av boksen\u00bb) og feilbestandig. Forfatterne fra selskapet har satt seg som m\u00e5l \u00e5 \u00abkombinere rikheten av SQLs funksjonalitet med horisontal tilgjengelighet som er vanlig i NoSQL-l\u00f8sninger\u00bb.<\/p>\n<p>Som en hyggelig bonus \u2014 st\u00f8tte for PostgreSQL-tilkoblingsprotokollen. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nDette er et tillegg over PostgreSQL, egentlig en ny enhet som h\u00e5ndterer alle forbindelser. Den har sin egen lastbalanserer og parser, og lisensieres under BSD-lisensen. Den gir omfattende muligheter, men kan virke litt skremmende, da det \u00e5 ha en ny enhet kan f\u00f8re til noen ekstra utfordringer. <\/p>\n<h3>Patroni<\/h3>\n<p>\nDette var det siste jeg s\u00e5 p\u00e5, og som viste seg \u00e5 v\u00e6re verdt det. Patroni er et open source-verkt\u00f8y som i hovedsak fungerer som en daemon i Python, som automatisk h\u00e5ndterer PostgreSQL-klynger med ulike typer replikasjon og automatisk rollebytte. Det viste seg \u00e5 v\u00e6re veldig interessant, da det integreres godt med Kubernetes og ikke bringer til legging av nye enheter. <\/p>\n<h3>Hva som ble valgt til slutt<\/h3>\n<p>\nValget var ikke enkelt:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 brennende, men skummelt;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 ogs\u00e5 ganske bra, mye brukt, men MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 mange un\u00f8dvendige enheter, s\u00e5 som s\u00e5 integrasjon med skyen og K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 utmerket integrasjon med K8s, ingen un\u00f8dvendige enheter, god integrasjon med GCP LB.<\/li>\n<\/ol>\n<p>\nDermed falt valget p\u00e5 Patroni. <\/p>\n<h3>Konklusjoner<\/h3>\n<p>\nDet er p\u00e5 tide \u00e5 oppsummere kort. Ja, verden av IT-infrastruktur har endret seg betydelig, og dette er bare begynnelsen. Hvis skyene tidligere bare var en annen type infrastruktur, er det n\u00e5 annerledes. Dessuten dukker det stadig opp innovasjoner i skyene, og de vil fortsatt dukke opp, og kanskje bare i skyene, f\u00f8r de eventuelt blir overf\u00f8rt til On-premises av oppstartsbedrifter.<\/p>\n<p>N\u00e5r det gjelder SQL, vil SQL eksistere. Det betyr at man m\u00e5 kunne PostgreSQL og MySQL, men det viktigste er \u00e5 vite hvordan man bruker dem riktig.<br \/>\n<br \/>Kilde: <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.5 - 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\/no\/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.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\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\/no\/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\udd47Hvordan overleve en SQL-database i det 21. \u00e5rhundre: skyer, Kubernetes og PostgreSQL multimaster | ProHoster","description":"Hei, Habr-folk. I dag starter undervisningen i den f\u00f8rste gruppen av kurset \u00abPostgreSQL\u00bb.","canonical_url":"https:\/\/prohoster.info\/no\/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":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}