{"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\/da\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Hej, Habr-folk. I dag starter undervisningen i den f\u00f8rste gruppe af kurset <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. I den forbindelse vil vi gerne fort\u00e6lle jer om, hvordan det \u00e5bne webinar om dette kursus forl\u00f8b.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\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\">et andet \u00e5bent undervisningsforl\u00f8b<\/a><\/noindex> talte vi om de udfordringer, SQL-databaser st\u00e5r overfor i cloud-\u00e6raen og Kubernetes. Samtidig s\u00e5 vi p\u00e5, hvordan SQL-databaser tilpasser sig og muterer under indflydelse af disse udfordringer.<\/p>\n<p>Webinaret blev ledet af <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\u00e6erne var sm\u00e5...<\/h3>\n<p>\nLad os f\u00f8rst huske, hvordan valget af DBMS begyndte i slutningen af det forrige \u00e5rhundrede. Det vil ikke v\u00e6re sv\u00e6rt, for valget af DBMS dengang begyndte og sluttede ved <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI slutningen af 90'erne og begyndelsen af nullerne var der i realiteten ikke meget valg, n\u00e5r vi taler om industriskalerbare databaser. Ja, IBM DB2, Sybase og nogle andre databaser eksisterede og forsvandt, men generelt set var de ikke s\u00e5 synlige i forhold til Oracle. Derfor var ingeni\u00f8rernes f\u00e6rdigheder p\u00e5 det tidspunkt p\u00e5 en eller anden m\u00e5de knyttet til det eneste valg, der fandtes.<\/p>\n<p>En Oracle DBA skulle kunne:<\/p>\n<ul>\n<li> installere Oracle Server fra distributionen;<\/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 oprette:<\/p>\n<ul>\n<li>tabelrum;<\/li>\n<li>skemaer;<\/li>\n<li>brugere;<\/li>\n<\/ul>\n<p>\u2014 udf\u00f8re backup og gendannelse;<br \/>\n\u2014 overv\u00e5ge systemet;<br \/>\n\u2014 h\u00e5ndtere suboptimale foresp\u00f8rgsler.<\/p>\n<p>Desuden blev der ikke kr\u00e6vet meget af Oracle DBA:<\/p>\n<ul>\n<li>kunne v\u00e6lge den optimale DBMS eller anden teknologi til opbevaring og behandling af data;<\/li>\n<li>sikre h\u00f8j tilg\u00e6ngelighed og horisontal skalerbarhed (det var ikke altid et sp\u00f8rgsm\u00e5l for DBA);<\/li>\n<li>have en god viden om emneomr\u00e5det, infrastruktur, anvendelsesm\u00e6ssig arkitektur, OS;<\/li>\n<li>udf\u00f8re indl\u00e6sning og udskrivning af data samt migrere data mellem forskellige DBMS.<\/li>\n<\/ul>\n<p>Hvis vi ser p\u00e5 valgprocessen dengang, minder det om at v\u00e6lge i en sovjetisk butik i slutningen af 80'erne:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Vores tid<\/h3>\n<p>\nSiden da er tr\u00e6erne vokset, verden har \u00e6ndret sig, og det ser nu s\u00e5dan ud:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\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 \u00e6ndret sig, hvilket fremg\u00e5r klart af den seneste rapport fra Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet skal n\u00e6vnes, at skyen har f\u00e5et sin niche, og dens popularitet vokser. Hvis man l\u00e6ser den samme rapport fra Gartner, vil vi se f\u00f8lgende konklusioner:<\/p>\n<ol>\n<li>Mange kunder er p\u00e5 vej til at overf\u00f8re applikationer til skyen. <\/li>\n<li>Nye teknologier dukker f\u00f8rst op i skyen, og der er ikke nogen garanti for, at de nogensinde vil flytte til en ikke-skyinfrastruktur.<\/li>\n<li>Modellen for prisfasts\u00e6ttelse baseret p\u00e5 pay-as-you-go er blevet almindelig. Alle \u00f8nsker kun at betale for det, de bruger, og det er ikke l\u00e6ngere en trend, men blot en konstatering af fakta. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Hvad nu?<\/h3>\n<p>\nI dag er vi alle i skyen. De sp\u00f8rgsm\u00e5l, vi st\u00e5r over for, handler om valg. Og valgmulighederne er enorme, selv hvis vi kun taler om valg af databasesystemer i On-premises format. Desuden har vi managed services og SaaS. P\u00e5 denne m\u00e5de bliver valget kun mere kompliceret \u00e5r for \u00e5r.<\/p>\n<p>Sammen med valgmulighederne er der ogs\u00e5 <b>begr\u00e6nsende faktorer<\/b>:<\/p>\n<ul>\n<li><b>pris<\/b>. Mange teknologier koster stadig penge;<\/li>\n<li><b>f\u00e6rdigheder<\/b>. Hvis vi taler om open source-software, opst\u00e5r sp\u00f8rgsm\u00e5let om f\u00e6rdigheder, da gratis software kr\u00e6ver, at dem, der implementerer og driver den, har tilstr\u00e6kkelig kompetence;<\/li>\n<li><b>funktionalitet<\/b>. Ikke alle tjenester, der er tilg\u00e6ngelige i skyen og bygget, for eksempel p\u00e5 baggrund af den samme Postgres, har de samme funktioner som Postgres On-premises. Dette er en v\u00e6sentlig faktor, som man skal kende og forst\u00e5. Desuden bliver denne faktor vigtigere end viden om skjulte muligheder ved et bestemt databasesystem. <\/li>\n<\/ul>\n<p>\n<b>Hvad forventer man nu fra DA\/DE:<\/b><\/p>\n<ul>\n<li>god forst\u00e5else af fagomr\u00e5det og anvendt arkitektur;<\/li>\n<li>evnen til korrekt at v\u00e6lge den passende databasesystemteknologi i forhold til den stillede opgave;<\/li>\n<li>evnen til at v\u00e6lge den optimale implementeringsmetode for den valgte teknologi i forhold til de eksisterende begr\u00e6nsninger;<\/li>\n<li>evnen til at udf\u00f8re dataoverf\u00f8rsel og migrering;<\/li>\n<li>evnen til at implementere og drive de valgte l\u00f8sninger.<\/li>\n<\/ul>\n<p>\nDet f\u00f8lgende eksempel <b>p\u00e5 grundlag af GCP<\/b> demonstrerer, hvordan valget af en bestemt datateknologi afh\u00e6nger af deres struktur:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBem\u00e6rk, at PostgreSQL ikke er med i skemaet, da det skjuler sig bag terminologien <b>Cloud SQL<\/b>. N\u00e5r vi kommer ind i Cloud SQL, skal vi igen tr\u00e6ffe et valg:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er v\u00e6rd at bem\u00e6rke, at dette valg ikke altid er klart, og derfor styres applikationsudviklere ofte af deres intuition. <\/p>\n<p><b>I alt:<\/b><\/p>\n<ol>\n<li>Jo l\u00e6ngere man kommer, desto mere aktuelt bliver sp\u00f8rgsm\u00e5let om valg. Selv n\u00e5r man kun ser p\u00e5 GCP, forekommer der kun nogle n\u00e6vnelser af RDBMS i trin 4 (og der er Spanner t\u00e6t ved). Desuden optr\u00e6der valget af PostgreSQL f\u00f8rst i trin 5, og der er endnu MySQL og SQL Server ved siden af, s\u00e5 <b>der er meget at v\u00e6lge imellem, men man skal v\u00e6lge<\/b>. <\/li>\n<li>Man b\u00f8r ikke glemme begr\u00e6nsningerne midt i fristelserne. For det meste \u00f8nsker alle Spanner, men det er dyrt. I sidste ende ser en typisk anmodning s\u00e5ledes ud: <i>\u00abLaver I venligst Spanner for prisen af Cloud SQL, I er jo fagfolk!\u00bb<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Hvad skal man s\u00e5 g\u00f8re?<\/h3>\n<p>\nUden at p\u00e5st\u00e5 at have den endelige sandhed, lad os sige f\u00f8lgende:<\/p>\n<p><b>Man skal \u00e6ndre tilgang til uddannelse:<\/b><\/p>\n<ul>\n<li>At l\u00e6re som man gjorde f\u00f8r til DBA'er giver ikke mening;<\/li>\n<li>kendskab til \u00e9t produkt er nu ikke l\u00e6ngere nok;<\/li>\n<li>og at kende mange p\u00e5 niveauet for \u00e9t er umuligt.<\/li>\n<\/ul>\n<p>\nMan skal ikke kun vide om produktet, men ogs\u00e5:<\/p>\n<ul>\n<li>brugsomr\u00e5det for dets anvendelse;<\/li>\n<li>forskellige implementeringsmetoder;<\/li>\n<li>fordele og ulemper ved hver metode;<\/li>\n<li>analoge og alternative produkter for at tr\u00e6ffe en informeret og optimal beslutning og ikke altid til fordel for et velkendt produkt.<\/li>\n<\/ul>\n<p>\nOg s\u00e5 skal man kunne migrere data og forst\u00e5 de grundl\u00e6ggende principper for integration med ETL.<\/p>\n<h3>Reelt eksempel<\/h3>\n<p>\nFor nylig skulle jeg lave backend til en mobilapplikation. P\u00e5 tidspunktet for arbejdet var backend allerede udviklet og klar til implementering, og udviklerteamet havde brugt cirka to \u00e5r p\u00e5 dette projekt. Derudover blev der stillet f\u00f8lgende opgaver:<\/p>\n<ul>\n<li>at opbygge CI\/CD;<\/li>\n<li>at foretage en arkitektur-review;<\/li>\n<li>at s\u00e6tte det hele i drift. <\/li>\n<\/ul>\n<p>\nSelve applikationen var mikrotjenestebaseret, og koden p\u00e5 Python\/Django var blevet udviklet fra bunden og direkte i GCP. Hvad ang\u00e5r m\u00e5lgruppen, blev der antaget to regioner \u2014 USA og EU, og trafikken blev distribueret via Global Load balancer. Alle workloads og beregningsbelastning k\u00f8rte i Google Kubernetes Engine. <\/p>\n<p>Hvad ang\u00e5r dataene, var der 3 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=\"S\u00e5dan overlever en SQL-database i det 21. \u00e5rhundrede: cloudl\u00f8sninger, Kubernetes og PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMan kan sp\u00f8rge, hvorfor Cloud SQL blev valgt? Sandheden er, at s\u00e5danne sp\u00f8rgsm\u00e5l i de seneste \u00e5r skaber en eller anden akavet pause \u2014 man f\u00e5r indtrykket af, at folk er blevet flove over relationelle databaser, men de forts\u00e6tter med at bruge dem aktivt ;-). <\/p>\n<p>Hvad ang\u00e5r vores tilf\u00e6lde, blev Cloud SQL valgt af f\u00f8lgende grunde:<\/p>\n<ol>\n<li>Som n\u00e6vnt blev applikationen udviklet ved hj\u00e6lp af Django, og den har en model, der viser permanente data fra SQL-databasen i Python-objekter (Django ORM).<\/li>\n<li>Selve rammev\u00e6rket underst\u00f8ttede en ret afrundet 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>\nDerfor valgte vi PostgreSQL fra denne liste ret intuitivt (det var jo ikke Oracle, vi skulle v\u00e6lge).<\/p>\n<p><b>Hvad der manglede:<\/b><\/p>\n<ul>\n<li>applikationen var kun implementeret i 2 regioner, og der var planer om en 3. (Asien);<\/li>\n<li>Databasen var beliggende i det nordamerikanske omr\u00e5de (Iowa);<\/li>\n<li>kunden havde bekymringer ang\u00e5ende mulige <b>forsinkelser med adgang<\/b> fra Europa og Asien og <b>afbrydelser <\/b><b>i servicen<\/b> i tilf\u00e6lde af nedetid for databasen. <\/li>\n<\/ul>\n<p>\nSelvom Django selv kan arbejde med flere databaser parallelt og opdele dem efter l\u00e6sning og skrivning, var der ikke s\u00e5 mange skrivninger i applikationen (over 90% var l\u00e6sning). Generelt, hvis vi kunne oprette <b>en read-replica af hoveddatabasen i Europa og Asien<\/b>, ville det v\u00e6re en kompromis-l\u00f8sning. Hvad er der s\u00e5 sv\u00e6rt ved det?<\/p>\n<p>Kompleksiteten l\u00e5 i, at kunden ikke \u00f8nskede at opgive brugen af managed services og Cloud SQL. Og mulighederne for Cloud SQL er i \u00f8jeblikket begr\u00e6nsede. Cloud SQL underst\u00f8tter h\u00f8j tilg\u00e6ngelighed (HA) og read-replica (RR), men den samme RR underst\u00f8ttes kun i \u00e9n region. N\u00e5r databasen er oprettet i den amerikanske region, kan du ikke lave en read-replica i den europ\u00e6iske region ved hj\u00e6lp af Cloud SQL, selvom PostgreSQL i sig selv ikke forhindrer det. Korrespondancen med Googles medarbejdere f\u00f8rte ikke til noget og sluttede med l\u00f8fter i stil med \"vi kender problemet og arbejder p\u00e5 det, sp\u00f8rgsm\u00e5let vil blive l\u00f8st en dag\". <\/p>\n<p>Hvis vi opregner mulighederne i Cloud SQL punktvis, ville det se nogenlunde s\u00e5dan ud:<\/p>\n<p><b>1. H\u00f8j tilg\u00e6ngelighed (HA):<\/b><\/p>\n<ul>\n<li>inden for \u00e9n region;<\/li>\n<li>via diskreplikation;<\/li>\n<li>der bruges ikke PostgreSQL-mekanismer;<\/li>\n<li>automatiseret og manuel kontrol \u2014 failover\/failback er muligt;<\/li>\n<li>ved skift er databasen utilg\u00e6ngelig i flere minutter.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>inden for \u00e9n region;<\/li>\n<li>hot standby;<\/li>\n<li>PostgreSQL streaming replication.<\/li>\n<\/ul>\n<p>\nDesuden st\u00e5r man, som det er s\u00e6dvanligt, over for nogle <b>begr\u00e6nsninger<\/b>:<\/p>\n<ul>\n<li>kunden \u00f8nskede ikke at skabe flere enheder og anvende IaaS, bortset fra via GKE;<\/li>\n<li>kunden ville ikke udrulle self service PostgreSQL\/MySQL;<\/li>\n<li>Og generelt ville Google Spanner v\u00e6re en god l\u00f8sning, hvis det ikke var for prisen, men med det kan Django ORM ikke arbejde; bortset fra det er det dog et glimrende produkt.<\/li>\n<\/ul>\n<p>\nI betragtning af situationen kom der et sp\u00f8rgsm\u00e5l fra kunden: <i>\u00abKan I lave noget lignende, der fungerer som Google Spanner, men ogs\u00e5 virker med Django ORM?\u00bb<\/i><\/p>\n<h3>L\u00f8sningsmulighed nr. 0<\/h3>\n<p>\nDet f\u00f8rste, der kom i tankerne:<\/p>\n<ul>\n<li>forblive inden for CloudSQL;<\/li>\n<li>der vil ikke v\u00e6re nogen indbygget replikation mellem regioner i nogen form;<\/li>\n<li>fors\u00f8ge at tilf\u00f8je en replika til den eksisterende Cloud SQL by PostgreSQL;<\/li>\n<li>starte en PostgreSQL-forekomst et sted, men i det mindste ikke r\u00f8re master.<\/li>\n<\/ul>\n<p>\nDesv\u00e6rre viste det sig, at det ikke kunne lade sig g\u00f8re, da der ikke er adgang til v\u00e6rten (den er overhovedet i et andet projekt) \u2014 pg_hba osv., og der er heller ikke adgang som superbruger.<\/p>\n<h3>L\u00f8sningsmulighed nr. 1<\/h3>\n<p>\nEfter nogle yderligere overvejelser og med hensyn til de tidligere omst\u00e6ndigheder \u00e6ndrede tankerne sig lidt:<\/p>\n<ul>\n<li>vi fors\u00f8ger stadig at holde os inden for CloudSQL, men vi skifter til MySQL, da Cloud SQL by MySQL har en ekstern master, der:<\/li>\n<\/ul>\n<p>\n\u2014 fungerer som proxy for ekstern MySQL;<br \/>\n\u2014 ser ud som en MySQL-forekomst;<br \/>\n\u2014 er designet til at migrere data fra andre skyer eller On-premises.<\/p>\n<p>Da ops\u00e6tningen af MySQL-replikation ikke kr\u00e6ver adgang til v\u00e6rten, fungerede det i princippet, men var meget ustabilt og upraktisk. Og da vi gik videre, blev det endnu mere skr\u00e6mmende, da vi oprettede hele strukturen med terraform, og hvad nu hvis det viste sig, at den eksterne master ikke underst\u00f8ttes af terraform. Ja, Google har en CLI, men af en eller anden grund fungerede det ogs\u00e5 kun sporadisk \u2014 nogle gange blev den oprettet, andre gange ikke. M\u00e5ske fordi CLI'en blev designet til at migrere data udefra, ikke til replikering.<\/p>\n<p>Faktisk blev det klart, at Cloud SQL slet ikke var passende. Som man siger, vi gjorde alt, hvad vi kunne. <\/p>\n<h3>L\u00f8sningsmulighed nr. 2<\/h3>\n<p>\nDa vi ikke kunne forblive inden for Cloud SQL, fors\u00f8gte vi at formulere kravene til et kompromisl\u00f8sning. Kravene viste sig at v\u00e6re f\u00f8lgende:<\/p>\n<ul>\n<li>arbejde i Kubernetes, maksimal udnyttelse af ressourcer og muligheder i Kubernetes (DCS, \u2026) og GCP (LB, \u2026);<\/li>\n<li>mangel p\u00e5 ballast fra en masse un\u00f8dvendige ting i skyen s\u00e5som HA proxy;<\/li>\n<li>mulighed for at k\u00f8re HA PostgreSQL eller MySQL i hovedregionen; i de \u00f8vrige regioner \u2014 HA fra RR i hovedregionen plus dens kopi (for p\u00e5lidelighed);<\/li>\n<li>multi master (det var ikke noget, vi havde lyst til at besk\u00e6ftige os med, men det var ikke s\u00e5 principielt)<\/li>\n<\/ul>\n<p>. <br \/>\nSom resultat af disse krav dukkede der endelig p<b>egnette DBMS- og bindemuligheder<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>PostgreSQL v\u00e6rkt\u00f8jer<\/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 udviklet af Codership og er et plugin til InnoDB. Egenskaber:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>synchron replikation;<\/li>\n<li>l\u00e6sning fra enhver node;<\/li>\n<li>skrivning til enhver node;<\/li>\n<li>indbygget HA-mekanisme;<\/li>\n<li>der er en Helm chart fra Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nIf\u00f8lge beskrivelsen er det en fantastisk ting og repr\u00e6senterer et open source-projekt, skrevet i Go. Hovedakt\u00f8ren er Cockroach Labs (grundlagt af folk fra Google). Denne relationelle DBMS er oprindeligt designet til at v\u00e6re distribueret (med horisontal skalerbarhed 'out of the box') og fejltolerant. Dens forfattere har sat sig for at 'kombinere rigdommen af SQL-funktionalitet med den horisontale tilg\u00e6ngelighed, der er typisk for NoSQL-l\u00f8sninger'.<\/p>\n<p>Som en behagelig bonus - st\u00f8tte til PostgreSQL-forbindelsesprotokollen. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nDette er et lag ovenp\u00e5 PostgreSQL, faktisk en ny entitet, der tager imod alle forbindelser og behandler dem. Har sin egen load balancer og parser, licenseret under BSD-licensen. Tilbyder store muligheder, men ser lidt skr\u00e6mmende ud, da den nye enhed muligvis kunne v\u00e6re en kilde til yderligere eventyr. <\/p>\n<h3>Patroni<\/h3>\n<p>\nDette var det sidste, jeg s\u00e5 p\u00e5, og det viste sig at v\u00e6re berettiget. Patroni er et open source-v\u00e6rkt\u00f8j, der i bund og grund fungerer som en daemon i Python, der automatisk h\u00e5ndterer PostgreSQL-klynger med forskellige typer replikation og automatisk rolle\u00e6ndring. Det viste sig at v\u00e6re meget interessant, da det godt integreres med Kubernetes og ikke medf\u00f8rer nogle nye enheder. <\/p>\n<h3>Hvad blev valgt til sidst<\/h3>\n<p>\nValget var ikke let:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 fantastisk, men skr\u00e6mmende;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 ogs\u00e5 godt, bruges mange steder, men MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 mange un\u00f8dvendige enheder, middelm\u00e5dig integration med cloud og K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 fremragende integration med K8s, ingen un\u00f8dvendige enheder, godt integreret med GCP LB.<\/li>\n<\/ol>\n<p>\nDerfor blev valget Patroni. <\/p>\n<h3>Konklusioner<\/h3>\n<p>\nDet er tid til at opsummere kort. Ja, verden af IT-infrastruktur har \u00e6ndret sig v\u00e6sentligt, og dette er kun begyndelsen. Og hvis cloud tidligere kun var en anden type infrastruktur, s\u00e5 er det nu anderledes. Desuden dukker innovationer i cloud konstant op, og de vil fortsat g\u00f8re det, og muligvis vil de f\u00f8rst dukke op i cloud og derefter, med hj\u00e6lp fra startups, blive flyttet til On-premises.<\/p>\n<p>N\u00e5r det g\u00e6lder SQL, vil SQL altid v\u00e6re relevant. Det betyder, at man skal have kendskab til PostgreSQL og MySQL og kunne arbejde med dem, men det er endnu vigtigere at vide, hvordan man anvender dem korrekt.<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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47 S\u00e5dan overlever SQL-databasen i det 21. \u00e5rhundrede: cloud-teknologi, Kubernetes og PostgreSQL multimaster | ProHoster","description":"Hej, Habr-venner. I dag starter undervisningen i den f\u00f8rste gruppe af kurset \"PostgreSQL\".","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}