Wie man eine "kostenlose" PostgreSQL in einer strengen Unternehmensumgebung integriert

Viele sind mit der PostgreSQL-Datenbank vertraut, und sie hat sich bei kleinen Installationen hervorragend bewĂ€hrt. Doch der Trend zur Nutzung von Open Source wird immer offensichtlicher, selbst wenn es um große Unternehmen und Anforderungen der Unternehmenswelt geht. In diesem Artikel werden wir erlĂ€utern, wie man Postgres in einer Unternehmensumgebung integriert und unsere Erfahrungen mit dem Aufbau eines Backup-Systems (BKS) fĂŒr diese Datenbank anhand des Beispiels des Commvault-Backup-Systems teilen.

Wie man eine "kostenlose" PostgreSQL in einer strengen Unternehmensumgebung integriert
PostgreSQL hat bereits ihre LeistungsfĂ€higkeit bewiesen – die Datenbank funktioniert hervorragend, sie wird von modernen Digitalunternehmen wie Alibaba und TripAdvisor verwendet, und das Fehlen von LizenzgebĂŒhren macht sie zu einer verlockenden Alternative zu Giganten wie MS SQL oder Oracle DB. Aber sobald wir anfangen, ĂŒber PostgreSQL im Unternehmensumfeld nachzudenken, stoßen wir sofort auf strenge Anforderungen: „Wie steht es um die Ausfallsicherheit der Konfiguration? Die Katastrophensicherung? Wo ist die umfassende Überwachung? Und automatisierte Backups? Und die Verwendung von Bandbibliotheken sowohl direkt als auch fĂŒr sekundĂ€re Speicher?“

Wie man eine "kostenlose" PostgreSQL in einer strengen Unternehmensumgebung integriert
Einerseits hat PostgreSQL keine integrierten Backup-Tools wie die „erwachsenen“ Datenbanken RMAN in Oracle DB oder SAP-Datenbanksicherung. Andererseits unterstĂŒtzen Anbieter von Unternehmens-Backup-Systemen (Veeam, Veritas, Commvault) zwar PostgreSQL, arbeiten aber in der Praxis nur mit bestimmten (gewöhnlich Standalone-) Konfigurationen und einer Reihe von unterschiedlichen EinschrĂ€nkungen.

Speziell fĂŒr PostgreSQL entwickelte Backup-Systeme wie Barman, Wal-g und pg_probackup sind insbesondere bei kleinen PostgreSQL-Installationen oder dort, wo keine aufwendigen Backups anderer IT-Elemente erforderlich sind, Ă€ußerst populĂ€r. Beispielsweise können in der Infrastruktur neben PostgreSQL physische und virtuelle Server, OpenShift, Oracle, MariaDB, Cassandra usw. vorhanden sein. All dies sollte idealerweise mit einem gemeinsamen Tool gesichert werden. Eine separate Lösung ausschließlich fĂŒr PostgreSQL einzurichten, ist keine gute Idee: Die Daten wĂŒrden irgendwo auf eine Festplatte kopiert und mĂŒssten dann auf ein Band ausgelagert werden. Diese doppelte Sicherung verlĂ€ngert die Backup-Zeit und, was noch kritischer ist, die Wiederherstellung.

In der Enterprise-Lösung erfolgt die Sicherung der Installation mit einer bestimmten Anzahl von Knoten des dedizierten Clusters. Zum Beispiel kann Commvault nur mit einem Zweiknoten-Cluster arbeiten, in dem Primary und Secondary fest an bestimmten Knoten gebunden sind. Zudem macht es nur Sinn, vom Primary zu sichern, da die Sicherung vom Secondary eigene EinschrÀnkungen hat. Aufgrund der Besonderheiten der Datenbank wird kein Dump auf dem Secondary erstellt, sodass nur die Möglichkeit eines Dateibackups bleibt.

Um die Ausfallrisiken zu minimieren, wird bei der Erstellung eines ausfallsicheren Systems eine "lebende" Clusterkonfiguration gebildet, und der Primary kann schrittweise zwischen verschiedenen Servern migrieren. Zum Beispiel startet die Software Patroni den Primary automatisch auf einem zufĂ€llig ausgewĂ€hlten Knoten des Clusters. Das SRM hat keine Möglichkeit, dies "out of the box" zu verfolgen, und wenn sich die Konfiguration Ă€ndert, brechen die Prozesse. Das bedeutet, dass die EinfĂŒhrung einer externen Verwaltung das SRM daran hindert, effizient zu arbeiten, da der Steuerungsserver einfach nicht versteht, woher und welche Daten kopiert werden mĂŒssen.

Ein weiteres Problem ist die Implementierung des Backups in Postgres. Dies ist ĂŒber Dump möglich, und bei kleinen Datenbanken funktioniert das auch. Bei großen Datenbanken dauert der Dump jedoch lange, benötigt viele Ressourcen und kann zu einem Ausfall der Datenbankinstanz fĂŒhren.

Dateibackup verbessert die Situation, aber bei großen Datenbanken erfolgt es langsam, da es im einstrĂ€ngigen Modus arbeitet. Zudem treten eine Reihe zusĂ€tzlicher EinschrĂ€nkungen von Anbietern auf. So kann man beispielsweise nicht gleichzeitig Dateibackup und Dump-Backup verwenden, oder die Deduplizierung wird nicht unterstĂŒtzt. Es gibt viele Probleme, und oftmals ist es einfacher, anstelle von Postgres eine teure, bewĂ€hrte Datenbank zu wĂ€hlen.

Es gibt keinen RĂŒckzug mehr! Hinter uns ist Moskau, die Entwickler!

Vor kurzem sah sich unser Team jedoch mit einer herausfordernden Aufgabe konfrontiert: Im Projekt zur Erstellung des AIS OSAGO 2.0, wo wir die IT-Infrastruktur aufbauten, wĂ€hlten die Entwickler PostgreSQL fĂŒr das neue System aus.

Großen Softwareentwicklern fĂ€llt es deutlich leichter, "modische" Open-Source-Lösungen zu nutzen. Im Team von Facebook gibt es genĂŒgend Spezialisten, die den Betrieb dieser Datenbank unterstĂŒtzen. Im Falle der RSA lagen jedoch alle "Zweittag"-Aufgaben auf unseren Schultern. Von uns wurde gefordert, die Ausfallsicherheit zu gewĂ€hrleisten, das Cluster aufzubauen und natĂŒrlich Backups einzurichten. Die Logik der Vorgehensweise war folgende:

  • SRK beizubringen, ein Backup von der Primary-Node des Clusters zu erstellen. Dazu muss SRK diese finden – also ist eine Integration mit einer der Lösungen fĂŒr das Management von PostgreSQL-Clustern erforderlich. Im Fall von RSA wurde dafĂŒr die Software Patroni verwendet.
  • Den Typ des Backups festlegen, basierend auf den Datenmengen und den Wiederherstellungsanforderungen. Zum Beispiel, wenn Seiten granular wiederhergestellt werden mĂŒssen, einen Dump verwenden, und wenn die Datenbanken groß sind und keine granulare Wiederherstellung erforderlich ist – auf Dateiebene arbeiten.
  • Die Möglichkeit eines blockbasierten Backups in die Lösung integrieren, um im Multithreading-Modus ein Backup zu erstellen.

Dabei war es uns von Anfang an wichtig, ein effektives und einfaches System ohne monströse Anbindungen von zusĂ€tzlichen Komponenten zu schaffen. Je weniger „KrĂŒcken“, desto geringer die Belastung fĂŒr das Personal und das Risiko, dass SRK ausfĂ€llt. AnsĂ€tze, bei denen Veeam und RMAN eingesetzt wurden, schlossen wir sofort aus, da das Set aus zwei Lösungen schon auf eine Unsicherheiten in der SystemzuverlĂ€ssigkeit hinweist.

Ein wenig Magie fĂŒr Unternehmen

Wir mussten zuverlĂ€ssige Backups fĂŒr 10 Cluster mit jeweils 3 Knoten garantieren, wĂ€hrend im Backup-Rechenzentrum eine identische Infrastruktur spiegelt. Die Rechenzentren arbeiten im Sinne von PostgreSQL nach dem Prinzip aktiv-passiv. Das Gesamtvolumen der Datenbanken betrug 50 TB. Das kann jede unternehmensgerechte SRK problemlos bewĂ€ltigen. Der Knackpunkt ist jedoch, dass PostgreSQL ursprĂŒnglich keine Grundlage fĂŒr vollstĂ€ndige und tiefe KompatibilitĂ€t mit Backup-Systemen bietet. Daher mussten wir eine Lösung suchen, die von Anfang an maximale FunktionalitĂ€t in Verbindung mit PostgreSQL bietet und das System ergĂ€nzen.

Wir haben 3 interne „Hackathons“ durchgefĂŒhrt – ĂŒber fĂŒnfzig Entwicklungen gesichtet, getestet, Anpassungen aufgrund unserer Hypothesen vorgenommen und erneut geprĂŒft. Nach Analyse der verfĂŒgbaren Optionen haben wir uns fĂŒr Commvault entschieden. Dieses Produkt konnte bereits „out of the box“ mit einer einfachen Clusterinstallation von PostgreSQL arbeiten, und seine offene Architektur weckte die Hoffnung (die sich bewahrheitete) auf eine erfolgreiche Erweiterung und Integration. Zudem kann Commvault auch PostgreSQL-Logs sichern. Zum Beispiel kann Veritas NetBackup in Bezug auf PostgreSQL nur vollstĂ€ndige Backups erstellen.

Weitere Informationen zur Architektur. Die Verwaltungsserver von Commvault wurden in jeder der beiden Rechenzentren in einer CommServ HA-Konfiguration installiert. Das System ist spiegelsymmetrisch, wird ĂŒber eine Konsole verwaltet und erfĂŒllt aus HA-Sicht alle Anforderungen an ein Unternehmen.

Wie man eine "kostenlose" PostgreSQL in einer strengen Unternehmensumgebung integriert
Außerdem haben wir in jedem Rechenzentrum zwei physische Medienserver gestartet, die ĂŒber SAN mit Fibre Channel an speziell fĂŒr Backups bereitgestellte Speichersysteme und Bandbibliotheken angeschlossen sind. Die verteilten Deduplication-Datenbanken gewĂ€hrleisten die Ausfallsicherheit der Medienserver, und die Verbindung jedes Servers mit jedem CSV ermöglicht einen kontinuierlichen Betrieb, selbst wenn eine Komponente ausfĂ€llt. Die Systemarchitektur ermöglicht es, die Sicherung fortzusetzen, selbst wenn eines der Rechenzentren ausfĂ€llt.

Patroni bestimmt fĂŒr jeden Cluster die Primary-Node. Diese kann jede freie Node im Rechenzentrum sein – aber nur in der Hauptgruppe. In der Standby-Gruppe sind alle Nodes Secondary.

Damit Commvault erkennt, welche Node des Clusters die Primary ist, haben wir das System (danke an die offene Architektur der Lösung) mit Postgres integriert. Zu diesem Zweck wurde ein Skript erstellt, das die aktuelle Position der Primary-Node an die Verwaltung meldet. zu einem Server Commvault.

Insgesamt sieht der Prozess so aus:

Patroni wĂ€hlt die Primary → Keepalived aktiviert die IP-Cluster und fĂŒhrt das Skript aus → Der Commvault-Agent auf der gewĂ€hlten Node des Clusters erhĂ€lt eine Benachrichtigung, dass dies die Primary ist → Commvault konfiguriert das Backup automatisch innerhalb des Pseudokunden neu.

Wie man eine "kostenlose" PostgreSQL in einer strengen Unternehmensumgebung integriert
Ein Vorteil dieses Ansatzes ist, dass die Lösung weder die Konsistenz noch die Korrektheit der Protokolle oder die Wiederherstellung der Postgres-Instanz beeintrĂ€chtigt. Sie ist auch leicht skalierbar, da es jetzt nicht mehr notwendig ist, die Primary- und Secondary-Nodes fĂŒr Commvault festzulegen. Es reicht aus, dass das System weiß, wo sich die Primary befindet, und die Anzahl der Nodes kann praktisch bis zu jedem Wert erhöht werden.

Die Lösung erhebt keinen Anspruch auf Perfektion und hat ihre Nuancen. Commvault kann nur die gesamte Instanz sichern, nicht einzelne Datenbanken. Daher wurde fĂŒr jede DB eine separate Instanz erstellt. TatsĂ€chliche Kunden sind in virtuellen Pseudokunden zusammengefasst. Jeder Pseudokunde von Commvault stellt einen UNIX-Cluster dar. Es werden die Nodes des Clusters hinzugefĂŒgt, auf denen der Commvault-Agent fĂŒr Postgres installiert ist. Infolgedessen werden alle virtuellen Nodes des Pseudokunden als eine einzige Instanz gesichert.

Innerhalb jedes Pseudoklienten ist ein aktiver Knoten des Clusters angegeben. Genau diesen bestimmt unsere Integrationslösung fĂŒr Commvault. Das Prinzip seiner Funktionsweise ist recht einfach: Wenn auf dem Knoten eine Cluster-IP hochgefahren wird, setzt das Skript im BinĂ€rformat des Commvault-Agenten den Parameter „aktiver Knoten“ — faktisch setzt das Skript eine „1“ an die erforderliche Stelle im Speicher. Der Agent ĂŒbertrĂ€gt diese Daten an CommServe, und Commvault erstellt ein Backup vom erforderlichen Knoten. DarĂŒber hinaus wird auf der Ebene des Skripts die Richtigkeit der Konfiguration ĂŒberprĂŒft, um Fehler beim Start der Datensicherung zu vermeiden.

Große Datenbanken werden blockweise in mehreren Streams gesichert, um den Anforderungen an RPO und das Backup-Fenster gerecht zu werden. Die Belastung des Systems ist gering: Vollsicherungen finden nicht so hĂ€ufig statt, an den anderen Tagen werden nur die Protokolle gesammelt, und zwar in Phasen geringer Auslastung.

Übrigens haben wir separate Richtlinien fĂŒr die Sicherung von Archivprotokollen in PostgreSQL angewendet — diese werden nach anderen Regeln aufbewahrt, nach einem anderen Zeitplan gesichert und es wird keine Deduplizierung aktiviert, da diese Protokolle einzigartige Daten enthalten.

Um die Konsistenz der gesamten IT-Infrastruktur zu gewĂ€hrleisten, sind separate Datei-Clients von Commvault auf jedem der Cluster-Knoten installiert. Sie schließen PostgreSQL-Dateien von den Backups aus und sind nur fĂŒr die Sicherung des Betriebssystems und der Anwendungsprogramme gedacht. FĂŒr diesen Teil der Daten ist ebenfalls eine eigene Richtlinie und ein eigener Aufbewahrungszeitraum vorgesehen.

Wie man eine "kostenlose" PostgreSQL in einer strengen Unternehmensumgebung integriert
Derzeit hat das SRK keinen Einfluss auf die produktiven Dienste, aber falls sich die Situation Àndert, kann im Commvault ein System zur Lastbegrenzung aktiviert werden.

Geht das? Geht!

So haben wir nicht nur ein funktionsfĂ€higes, sondern auch ein vollstĂ€ndig automatisiertes Backup fĂŒr die Clusterinstallation von PostgreSQL erhalten, das allen Anforderungen des Unternehmens gerecht wird.

Die Parameter RPO und RTO von 1 Stunde und 2 Stunden sind mit einem Puffer abgedeckt, das bedeutet, dass das System diesen auch bei einem signifikanten Anstieg des Speicherbedarfs erfĂŒllen wird. Trotz vieler Zweifel sind PostgreSQL und die Unternehmensumgebung durchaus kompatibel. Und jetzt wissen wir aus eigener Erfahrung, dass Backups fĂŒr solche DBMS in den unterschiedlichsten Konfigurationen möglich sind.

NatĂŒrlich mussten wir auf diesem Weg sieben Paare von Eisenstiefeln abnutzen, eine Reihe von Schwierigkeiten ĂŒberwinden, auf einige Rechen treten und eine gewisse Anzahl von Fehlern korrigieren. Aber jetzt ist der Ansatz erprobt und kann zur Implementierung von Open Source anstelle proprietĂ€rer DBMS unter den harten Bedingungen im Enterprise-Bereich verwendet werden.

Haben Sie schon einmal mit PostgreSQL in einer Unternehmensumgebung gearbeitet?

Autoren:

Oleg Lawrenow, Systemarchitekt fĂŒr Datenspeicherung bei «Infosemesty Jet»

Dmitri Jerik, Systemarchitekt fĂŒr Rechenanlagen bei «Infosemesty Jet»

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster