{"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\/de\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Hallo, Habr-Bewohner. Heute beginnen die Kurse in der ersten Gruppe des Kurses <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u201ePostgreSQL\u201c<\/a><\/noindex>. In diesem Zusammenhang m\u00f6chten wir Ihnen erz\u00e4hlen, wie das offizielle Webinar zu diesem Kurs verlief.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIm <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">einer weiteren offenen Lektion<\/a><\/noindex> haben wir dar\u00fcber gesprochen, mit welchen Herausforderungen SQL-Datenbanken in der \u00c4ra von Cloud und Kubernetes konfrontiert sind. Au\u00dferdem haben wir betrachtet, wie sich SQL-Datenbanken anpassen und ver\u00e4ndern, um mit diesen Herausforderungen umzugehen.<\/p>\n<p>Das Webinar wurde geleitet von <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valerij Besrukov<\/a><\/noindex>, Google Cloud Practice Delivery Manager bei EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Als die B\u00e4ume noch klein waren \u2026<\/h3>\n<p>\nZun\u00e4chst erinnern wir uns daran, wie die Wahl der DBMS Ende des letzten Jahrhunderts begann. Das sollte kein Problem sein, denn die Wahl der DBMS in jenen Zeiten begann und endete <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnde der 90er Jahre \u2013 Anfang der 2000er Jahre gab es im Wesentlichen keine gro\u00dfe Auswahl, wenn man \u00fcber industriell skalierbare Datenbanken spricht. Ja, es gab IBM DB2, Sybase und einige andere Datenbanken, die kamen und gingen, aber insgesamt waren sie im Vergleich zu Oracle nicht so auff\u00e4llig. Dementsprechend waren die F\u00e4higkeiten der Ingenieure damals mehr oder weniger auf die einzige Auswahl angewiesen, die existierte.<\/p>\n<p>Ein Oracle DBA musste in der Lage sein:<\/p>\n<ul>\n<li> Oracle Server aus dem Distribution zu installieren;<\/li>\n<li> Oracle Server zu konfigurieren:<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>init.ora;<\/li>\n<li>listener.ora;<\/li>\n<\/ul>\n<p>\n\u2013 zu erstellen:<\/p>\n<ul>\n<li>Tabellenr\u00e4ume;<\/li>\n<li>Schemas;<\/li>\n<li>Benutzer;<\/li>\n<\/ul>\n<p>\u2013 Backups und Wiederherstellungen durchzuf\u00fchren;<br \/>\n\u2013 \u00dcberwachung durchzuf\u00fchren;<br \/>\n\u2013 Mit nicht optimalen Abfragen zu k\u00e4mpfen.<\/p>\n<p>Dabei wurde von einem Oracle DBA nicht besonders verlangt, dass er:<\/p>\n<ul>\n<li>die optimale DBMS oder eine andere Technologie zur Speicherung und Verarbeitung von Daten ausw\u00e4hlen kann;<\/li>\n<li>hohe Verf\u00fcgbarkeit und horizontale Skalierbarkeit sicherstellen kann (das war nicht immer die Aufgabe des DBA);<\/li>\n<li>das Fachgebiet, die Infrastruktur, die Anwendungsarchitektur und das Betriebssystem gut kennt;<\/li>\n<li>Daten importieren und exportieren sowie Datenmigration zwischen verschiedenen DBMS durchf\u00fchren kann.<\/li>\n<\/ul>\n<p>Im Allgemeinen erinnert die Wahl in jenen Zeiten an die Wahl in einem sowjetischen Gesch\u00e4ft Ende der 80er Jahre:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Unsere Zeit<\/h3>\n<p>\nSeitdem sind die B\u00e4ume nat\u00fcrlich gewachsen, die Welt hat sich ver\u00e4ndert, und es sieht jetzt so aus:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAuch der Markt der DBMS hat sich ver\u00e4ndert, was gut am aktuellen Bericht von Gartner zu erkennen ist:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd hier sollte man nicht vergessen, dass die Cloud ihre Nische besetzt hat, deren Beliebtheit zunimmt. Wenn man denselben Bericht von Gartner liest, sieht man folgende Schlussfolgerungen:<\/p>\n<ol>\n<li>Viele Kunden sind dabei, ihre Anwendungen in die Cloud zu migrieren. <\/li>\n<li>Neue Technologien erscheinen zun\u00e4chst in der Cloud, und es ist ungewiss, ob sie jemals in eine nicht-cloudbasierte Infrastruktur umziehen werden.<\/li>\n<li>Das Preismodell nach dem Prinzip 'pay-as-you-go' ist zur Norm geworden. Jeder m\u00f6chte nur f\u00fcr das bezahlen, was er tats\u00e4chlich nutzt, und das ist nicht einmal mehr ein Trend, sondern eine Tatsache. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Was ist jetzt?<\/h3>\n<p>\nHeute sind wir alle in der Cloud. Die Fragen, die wir haben, betreffen die Auswahl. Diese ist enorm, selbst wenn wir nur \u00fcber die Auswahl von Datenbanktechnologien im On-premises-Format reden. Zudem gibt es Managed Services und SaaS. Somit wird die Wahl mit jedem Jahr komplizierter.<\/p>\n<p>Neben den Auswahlfragen gibt es auch <b>Einschr\u00e4nkungsfaktoren<\/b>:<\/p>\n<ul>\n<li><b>der Preis<\/b>. Viele Technologien kosten nach wie vor Geld;<\/li>\n<li><b>Skills<\/b>. Wenn wir \u00fcber Open Source sprechen, stellt sich die Frage nach den F\u00e4higkeiten, denn kostenlose Software erfordert von den Nutzern, die sie implementieren und betreiben, ein gewisses Ma\u00df an Kompetenz;<\/li>\n<li><b>Funktionalit\u00e4t<\/b>. Nicht alle Dienste, die in der Cloud verf\u00fcgbar sind und beispielsweise auf der Basis von Postgres aufgebaut wurden, haben die gleichen Funktionen wie Postgres On-premises. Dies ist ein wesentlicher Faktor, den man wissen und verstehen muss. Dar\u00fcber hinaus wird dieser Faktor wichtiger als das Wissen \u00fcber versteckte M\u00f6glichkeiten einer bestimmten Datenbank. <\/li>\n<\/ul>\n<p>\n<b>Was erwartet man derzeit von DA\/DE:<\/b><\/p>\n<ul>\n<li>ein gutes Verst\u00e4ndnis des Fachgebiets und der Anwendungsarchitektur;<\/li>\n<li>die F\u00e4higkeit, die geeignete Datenbanktechnologie unter Ber\u00fccksichtigung der gestellten Aufgaben korrekt auszuw\u00e4hlen;<\/li>\n<li>die F\u00e4higkeit, die optimale Umsetzung der gew\u00e4hlten Technologie im Kontext bestehender Einschr\u00e4nkungen zu finden;<\/li>\n<li>die F\u00e4higkeit, Daten\u00fcbertragungen und Migrationen durchzuf\u00fchren;<\/li>\n<li>die F\u00e4higkeit, die gew\u00e4hlten L\u00f6sungen zu implementieren und zu betreiben.<\/li>\n<\/ul>\n<p>\nDas folgende Beispiel <b>auf Basis von GCP<\/b> zeigt, wie die Auswahl der jeweiligen Technologie zur Datenverarbeitung je nach Struktur erfolgt:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBeachten Sie, dass PostgreSQL in diesem Schema nicht vorhanden ist, denn es versteckt sich hinter der Terminologie <b>Cloud SQL<\/b>. Und wenn wir in Cloud SQL gelangen, m\u00fcssen wir wieder eine Auswahl treffen:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs sei angemerkt, dass diese Auswahl nicht immer klar ist, weshalb Entwickler oft auf Intuition angewiesen sind. <\/p>\n<p><b>Insgesamt:<\/b><\/p>\n<ol>\n<li>Je weiter wir gehen, desto relevanter wird die Frage der Auswahl. Und selbst wenn man nur auf GCP schaut, erscheinen Managed Services und SaaS erst in Schritt 4 (und dort ist Spanner in der N\u00e4he). Dar\u00fcber hinaus wird PostgreSQL erst in Schritt 5 erw\u00e4hnt, und daneben stehen noch MySQL und SQL Server, das hei\u00dft <b>Es gibt viel, aber man muss ausw\u00e4hlen.<\/b>. <\/li>\n<li>Die Einschr\u00e4nkungen im Angesicht der Versuchungen sollte man nicht vergessen. Im Gro\u00dfen und Ganzen wollen alle Spanner, aber er ist teuer. Am Ende sieht eine typische Anfrage ungef\u00e4hr so aus: <i>\u201eBitte machen Sie uns Spanner, aber zu den Preisen von Cloud SQL, Sie sind schlie\u00dflich Profis!\u201c<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Was sollte man also tun?<\/h3>\n<p>\nOhne den Anspruch auf die letzte Instanz zu erheben, wollen wir Folgendes sagen:<\/p>\n<p><b>Der Ansatz zur Ausbildung muss ge\u00e4ndert werden:<\/b><\/p>\n<ul>\n<li>Es macht keinen Sinn, wie fr\u00fcher DBA auszubilden;<\/li>\n<li>Kenntnisse \u00fcber ein Produkt reichen jetzt nicht mehr aus;<\/li>\n<li>und es ist unm\u00f6glich, dutzende auf dem Niveau eines zu kennen.<\/li>\n<\/ul>\n<p>\nMan muss nicht nur das Produkt kennen, sondern auch:<\/p>\n<ul>\n<li>den Anwendungsfall;<\/li>\n<li>verschiedene Bereitstellungsmethoden;<\/li>\n<li>die Vor- und Nachteile jeder Methode;<\/li>\n<li>vergleichbare und alternative Produkte, um eine informierte und optimale Wahl zu treffen und nicht immer zum gewohnten Produkt zu greifen.<\/li>\n<\/ul>\n<p>\nUnd man muss auch in der Lage sein, Daten zu migrieren und die grundlegenden Prinzipien der Integration mit ETL zu verstehen.<\/p>\n<h3>Ein praktischer Fall<\/h3>\n<p>\nIn der j\u00fcngeren Vergangenheit war es erforderlich, ein Backend f\u00fcr eine mobile Anwendung zu erstellen. Zum Zeitpunkt des Beginns der Arbeit an dieser war das Backend bereits entwickelt und bereit zur Implementierung, und das Entwicklerteam hatte etwa zwei Jahre f\u00fcr dieses Projekt aufgewendet. Dabei wurden folgende Aufgaben festgelegt:<\/p>\n<ul>\n<li>CI\/CD aufbauen;<\/li>\n<li>Architektur-Review durchf\u00fchren;<\/li>\n<li>alles in Betrieb nehmen. <\/li>\n<\/ul>\n<p>\nDie Anwendung selbst war mikroservicebasiert, und der Code in Python\/Django wurde von Grund auf neu und direkt in GCP entwickelt. Was die Zielgruppe betrifft, so wurde angenommen, dass es zwei Regionen geben w\u00fcrde - USA und EU, und der Traffic wurde \u00fcber den Global Load Balancer verteilt. Alle Workloads und Rechenlasten arbeiteten in Google Kubernetes Engine. <\/p>\n<p>Was die Daten betrifft, gab es drei Strukturen:<\/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=\"\u00dcberleben einer SQL-Datenbank im 21. Jahrhundert: Clouds, Kubernetes und PostgreSQL Multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs k\u00f6nnte die Frage aufkommen, warum Cloud SQL gew\u00e4hlt wurde? Ehrlich gesagt, eine solche Frage verursacht in den letzten Jahren eine gewisse peinliche Pause - es scheint, dass die Leute z\u00f6gerten, relationale Datenbanken zu verwenden, aber sie nutzen sie dennoch aktiv ;-). <\/p>\n<p>In unserem Fall wurde Cloud SQL aus folgenden Gr\u00fcnden gew\u00e4hlt:<\/p>\n<ol>\n<li>Wie bereits erw\u00e4hnt, wurde die Anwendung mit Django entwickelt, und darin gibt es ein Modell zur Abbildung dauerhafter Daten aus der SQL-Datenbank in Python-Objekte (Django ORM).<\/li>\n<li>Das Framework unterst\u00fctzte eine recht endliche Liste von 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>\nIn diesem Sinne wurde PostgreSQL eher intuitiv aus dieser Liste gew\u00e4hlt (na, man w\u00e4hlt schlie\u00dflich nicht Oracle).<\/p>\n<p><b>Was fehlte:<\/b><\/p>\n<ul>\n<li>Die Anwendung wurde nur in 2 Regionen bereitgestellt, und ein dritter (Asien) steht in den Pl\u00e4nen.<\/li>\n<li>Die Datenbank befand sich in der nordamerikanischen Region (Iowa).<\/li>\n<li>Es gab Bedenken seitens des Kunden hinsichtlich m\u00f6glicher <b>Zugriffsverz\u00f6gerungen<\/b> aus Europa und Asien sowie <b>Unterbrechungen <\/b><b>im Dienst<\/b> im Falle eines Ausfalls der Datenbank. <\/li>\n<\/ul>\n<p>\nObwohl Django in der Lage ist, mehrere Datenbanken parallel zu betreiben und sie nach Lese- und Schreibvorg\u00e4ngen zu trennen, waren die Schreiboperationen in der Anwendung nicht besonders zahlreich (\u00fcber 90 % der Vorg\u00e4nge waren Lesevorg\u00e4nge). Insgesamt, wenn es m\u00f6glich gewesen w\u00e4re <b>eine Read Replica der Hauptdatenbank in Europa und Asien zu erstellen,<\/b>w\u00e4re das eine kompromissbereite L\u00f6sung gewesen. Aber was w\u00e4re daran so schwierig?<\/p>\n<p>Das Problem lag darin, dass der Kunde nicht auf die Verwendung von Managed Services und Cloud SQL verzichten wollte. Die M\u00f6glichkeiten von Cloud SQL sind derzeit jedoch eingeschr\u00e4nkt. Cloud SQL unterst\u00fctzt Hochverf\u00fcgbarkeit (HA) und Read Replica (RR), aber die RR wird nur in einer Region unterst\u00fctzt. Wenn eine Datenbank in der amerikanischen Region erstellt wird, kann eine Read Replica in der europ\u00e4ischen Region mit den Mitteln von Cloud SQL nicht erstellt werden, obwohl PostgreSQL dies nicht einschr\u00e4nkt. Der Schriftverkehr mit Google-Mitarbeitern brachte nichts und endete mit Versprechen, die in etwa lauteten: 'Wir kennen das Problem und arbeiten daran, irgendwann wird die Frage gel\u00f6st.' <\/p>\n<p>Wenn man die M\u00f6glichkeiten von Cloud SQL stichpunktartig aufz\u00e4hlt, dann sieht das ungef\u00e4hr so aus:<\/p>\n<p><b>1. Hochverf\u00fcgbarkeit (HA):<\/b><\/p>\n<ul>\n<li>innerhalb einer Region;<\/li>\n<li>durch Diskreplication;<\/li>\n<li>es werden keine PostgreSQL-Mechanismen verwendet;<\/li>\n<li>es ist eine automatische und manuelle Steuerung m\u00f6glich - Failover\/Fallback;<\/li>\n<li>bei einem Wechsel ist die Datenbank f\u00fcr mehrere Minuten nicht verf\u00fcgbar.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>innerhalb einer Region;<\/li>\n<li>hot standby;<\/li>\n<li>PostgreSQL Streaming-Replikation.<\/li>\n<\/ul>\n<p>\nAu\u00dferdem st\u00f6\u00dft man bei der Wahl der Technologie immer auf irgendwelche <b>Einschr\u00e4nkungen;<\/b>:<\/p>\n<ul>\n<li>der Kunde wollte keine Entit\u00e4ten erzeugen und IaaS nur \u00fcber GKE nutzen;<\/li>\n<li>der Kunde wollte keine Selbstbedienungs-Version von PostgreSQL\/MySQL bereitstellen;<\/li>\n<li>und generell w\u00fcrde Google Spanner gut passen, wenn er nicht so teuer w\u00e4re, allerdings kann Django ORM nicht damit arbeiten, aber ansonsten ist es ein gutes Produkt.<\/li>\n<\/ul>\n<p>\nAngesichts der Situation stellte der Kunde eine herausfordernde Frage: <i>\"K\u00f6nnen Sie etwas \u00c4hnliches erstellen, das wie Google Spanner funktioniert, aber auch mit Django ORM funktioniert?\"<\/i><\/p>\n<h3>L\u00f6sungsansatz Nr. 0<\/h3>\n<p>\nDas Erste, was mir in den Sinn kam:<\/p>\n<ul>\n<li>im Rahmen von CloudSQL zu bleiben;<\/li>\n<li>Es wird keine integrierte Replikation zwischen Regionen in irgendeiner Form geben;<\/li>\n<li>Versuchen, eine Replikation an die bestehende Cloud SQL by PostgreSQL anzuschlie\u00dfen;<\/li>\n<li>irgendwo und irgendwie eine PostgreSQL-Instanz zu starten, aber zumindest das Master nicht anzufassen.<\/li>\n<\/ul>\n<p>\nLeider stellte sich heraus, dass dies nicht m\u00f6glich ist, da kein Zugriff auf den Host besteht (er ist \u00fcberhaupt in einem anderen Projekt) \u2013 pg_hba und so weiter, und es gibt auch keinen Zugriff als Superuser.<\/p>\n<h3>L\u00f6sungsvorschlag Nr. 1<\/h3>\n<p>\nNach weiteren \u00dcberlegungen und unter Ber\u00fccksichtigung der vorherigen Umst\u00e4nde hat sich der Gedankengang etwas ge\u00e4ndert:<\/p>\n<ul>\n<li>wir versuchen immer noch, im Rahmen von CloudSQL zu bleiben, wechseln aber auf MySQL, da Cloud SQL by MySQL einen externen Master hat, der:<\/li>\n<\/ul>\n<p>\n\u2013 als Proxy f\u00fcr externes MySQL fungiert;<br \/>\n\u2013 wie eine MySQL-Instanz aussieht;<br \/>\n\u2013 f\u00fcr die Migration von Daten aus anderen Clouds oder On-premises gedacht ist.<\/p>\n<p>Da die Einrichtung der MySQL-Replikation keinen Zugriff auf den Host erfordert, funktionierte grunds\u00e4tzlich alles, war aber sehr instabil und unangenehm. Als wir weitergingen, wurde es sogar be\u00e4ngstigend, da wir die gesamte Struktur mit Terraform aufbauten und pl\u00f6tzlich herausfanden, dass der externe Master nicht von Terraform unterst\u00fctzt wird. Ja, Google hat ein CLI, aber aus irgendeinem Grund funktionierte alles auch hier nur gelegentlich \u2013 manchmal wurde es erstellt, manchmal nicht. Vielleicht, weil das CLI f\u00fcr die Migration von Daten von au\u00dfen gedacht war, nicht f\u00fcr Replikate.<\/p>\n<p>Eigentlich wurde damit klar, dass Cloud SQL \u00fcberhaupt nicht geeignet ist. Wie gesagt, wir haben alles versucht, was wir konnten. <\/p>\n<h3>L\u00f6sungsvorschlag Nr. 2<\/h3>\n<p>\nDa es nicht gelungen ist, im Rahmen von Cloud SQL zu bleiben, haben wir versucht, Anforderungen f\u00fcr eine Kompromissl\u00f6sung zu formulieren. Die Anforderungen waren die folgenden:<\/p>\n<ul>\n<li>Arbeiten mit Kubernetes, optimale Nutzung der Ressourcen und M\u00f6glichkeiten von Kubernetes (DCS, \u2026) und GCP (LB, \u2026);<\/li>\n<li>Fehlen von Ballast aus einer Menge unn\u00f6tiger Dinge in der Cloud wie HA Proxy;<\/li>\n<li>M\u00f6glichkeit, in der Hauptregion HA PostgreSQL oder MySQL zu starten; in den anderen Regionen \u2013 HA aus der Hauptregion plus deren Kopie (f\u00fcr die Zuverl\u00e4ssigkeit);<\/li>\n<li>Multi-Master (es war nicht unbedingt w\u00fcnschenswert, damit zu interagieren, aber nicht sehr entscheidend)<\/li>\n<\/ul>\n<p>. <br \/>\nAls Ergebnis dieser Anforderungen erschienen schlie\u00dflich geeignete DBMS-Optionen am Horizont<b>MySQL Galera;<\/b>:<\/p>\n<ul>\n<li>CockroachDB;<\/li>\n<li>PostgreSQL-Tools<\/li>\n<li>\u2013 pgpool-II;<\/li>\n<\/ul>\n<p>:<br \/>\n\u2013 Patroni.<br \/>\nMySQL Galera<\/p>\n<h3>Die MySQL Galera-Technologie wurde von Codership entwickelt und ist ein Plugin f\u00fcr InnoDB. Besonderheiten:<\/h3>\n<p>\nMulti-Master;<\/p>\n<ul>\n<li>synchronous replication;<\/li>\n<li>lesen von jedem Knoten;<\/li>\n<li>schreiben auf jeden Knoten;<\/li>\n<li>eingebauter HA-Mechanismus;<\/li>\n<li>es gibt ein Helm-Chart von Bitnami.<\/li>\n<li>Es gibt ein Helm-Chart von Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nNach der Beschreibung handelt es sich um ein absolut fantastisches Produkt, das ein Open-Source-Projekt ist und in Go geschrieben wurde. Der Hauptbeteiligte ist Cockroach Labs (gegr\u00fcndet von ehemaligen Google-Mitarbeitern). Diese relationale Datenbank wurde urspr\u00fcnglich als verteilte Datenbank (mit horizontaler Skalierung \u201eout of the box\u201c) und Fehlertoleranz entwickelt. Die Autoren des Unternehmens haben das Ziel gesetzt, \u201edie Funktionalit\u00e4t von SQL mit der horizontalen Verf\u00fcgbarkeit, die man von NoSQL-L\u00f6sungen kennt, zu kombinieren.\u201c<\/p>\n<p>Ein angenehmer Bonus ist die Unterst\u00fctzung des PostgreSQL-Verbindungsprotokolls. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nEs handelt sich um eine Schicht \u00fcber PostgreSQL, tats\u00e4chlich um eine neue Entit\u00e4t, die alle Verbindungen \u00fcbernimmt und diese verarbeitet. Sie hat einen eigenen Lastenausgleich und Parser und wird unter der BSD-Lizenz lizenziert. Sie bietet umfangreiche M\u00f6glichkeiten, sieht jedoch etwas einsch\u00fcchternd aus, da das Vorhandensein einer neuen Entit\u00e4t zus\u00e4tzliche Herausforderungen mit sich bringen k\u00f6nnte. <\/p>\n<h3>Patroni<\/h3>\n<p>\nDies ist das Letzte, was ins Auge gefallen ist, und wie sich herausstellte, zu Recht. Patroni ist ein Open-Source-Tool, das im Grunde ein Daemon in Python ist, der es erm\u00f6glicht, PostgreSQL-Cluster mit verschiedenen Replikationstypen und automatischem Rollenwechsel automatisch zu verwalten. Die Sache ist sehr interessant, da es gut mit Kubernetes integriert ist und keine neuen Entit\u00e4ten mit sich bringt. <\/p>\n<h3>Was letztendlich gew\u00e4hlt wurde<\/h3>\n<p>\nDie Wahl fiel nicht leicht:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 gro\u00dfartig, aber be\u00e4ngstigend;<\/li>\n<li><b>Die MySQL Galera-Technologie wurde von Codership entwickelt und ist ein Plugin f\u00fcr InnoDB. Besonderheiten:<\/b> \u2014 auch nicht schlecht, wird oft genutzt, aber MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 viele \u00fcberfl\u00fcssige Entit\u00e4ten, die Integration mit der Cloud und K8s mittelm\u00e4\u00dfig;<\/li>\n<li><b>Patroni <\/b>\u2014 hervorragende Integration mit K8s, keine \u00fcberfl\u00fcssigen Entit\u00e4ten, gut integriert mit GCP LB.<\/li>\n<\/ol>\n<p>\nSomit fiel die Wahl auf Patroni. <\/p>\n<h3>Das DBMS Tarantool ist ein attraktives, zukunftstr\u00e4chtiges Produkt zur Erstellung von hochbelasteten Anwendungen.<\/h3>\n<p>\nEs ist an der Zeit, eine kurze Zusammenfassung zu ziehen. Ja, die Welt der IT-Infrastruktur hat sich erheblich ver\u00e4ndert, und das ist erst der Anfang. Wenn fr\u00fcher Clouds nur eine andere Art von Infrastruktur waren, ist es jetzt ganz anders. Dar\u00fcber hinaus entstehen st\u00e4ndig Innovationen in der Cloud, und sie werden wahrscheinlich nur in der Cloud entstehen und dann, durch Start-ups, in On-Premises \u00fcbertragen.<\/p>\n<p>Was SQL betrifft, so wird SQL weiterleben. Das bedeutet, dass man PostgreSQL und MySQL kennen und damit arbeiten k\u00f6nnen muss, aber noch wichtiger ist, dass man lernt, sie richtig anzuwenden.<br \/>\n<br \/>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Wie man eine SQL-Datenbank im 21. Jahrhundert \u00fcberlebt: Clouds, Kubernetes und PostgreSQL Multimaster | ProHoster","description":"Hallo, Habr-Bewohner. Heute starten die Lektionen in der ersten Gruppe des Kurses \u201ePostgreSQL\u201c.","canonical_url":"https:\/\/prohoster.info\/de\/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":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}