Welche Datenbankserver werden nicht durch Serverneustarts unterbrochen? (Cluster?)

7

Wir wurden gebeten, ein System bereitzustellen, in dem der zentrale Datenbankserver seinen Betrieb fortsetzt, selbst wenn Sicherheitsupdates auf das Betriebssystem des Servers oder auf die Datenbankserversoftware angewendet werden. Soweit ich das sehe, umfasst dies Sicherheitsupdates, bei denen die Server neu gestartet werden müssen.

Die Cluster-Technologie scheint offensichtlich, aber wenn ein Server wirklich neu gestartet werden kann, während der Cluster verwendet wird, habe ich ein paar Fragen:

  • Welche Datenbankprodukte können das?
  • Wie funktioniert es? Speichert es die Datenbankdaten gleichzeitig auf allen Servern oder werden die Aufgaben eines Servers beim Neustart auf einen anderen übertragen?
  • Wie wirkt es sich auf die Leistung aus, insbesondere auf die Latenz von Abfragen?
Lars D.
quelle
Hinweis: Ich interessiere mich nicht für Betriebssystem oder Hersteller, alle Informationen werden geschätzt.
Lars D
Hinweis: Ich suche nach Lösungen, die die Transaktion offen halten können, auch wenn der Computer, auf dem die Datenbankserversoftware installiert ist (virtuell oder physisch), neu gestartet wird.
Lars D
Beachten Sie als Randnotiz, dass die Anwendung, die die Datenbank verwendet, auch das Clustering unterstützen muss (einige, mit denen ich in der Vergangenheit explizit nicht gearbeitet habe)
warren
Wissen Sie, welche Anwendung diese Datenbank verwenden wird? Wenn es sich um eine Anwendung handelt, die üblicherweise in Hochverfügbarkeitsumgebungen ausgeführt wird, hat der Anwendungsanbieter wahrscheinlich einige Vorschläge für Sie.
Seth
@ Seth: Wir sind der App-Anbieter. @warren: Bitte geben Sie als Antwort Informationen zu diesen Anforderungen an, da diese Teil von "Wie funktioniert es?" sind.
Lars D

Antworten:

4

Kein Interrupt während der geplanten Wartung einschließlich eines Neustarts des Betriebssystems? Oracle RAC. Dies ist die einzige echte Option, an die ich denken kann, und sicherlich die einzige Parallell-Cluster-Datenbank, der ich vertrauen würde. Sogar RAC muss manchmal für Datenbank-Patches ausfallen, aber die meisten können während der Ausführung angewendet werden.

Wenn Sie Ausfallzeiten von mindestens 10 bis 15 Sekunden bewältigen können, gibt es eine Reihe weiterer Optionen, darunter Clustering auf Anwendungsebene (Veritas-Cluster, Microsoft-Cluster, Oracle-Clusterware) oder Replikation auf Datenbankebene. Ein virtuelles Infrastrucutre allein hilft nicht viel. Das Betriebssystem muss noch ausfallen.

Es ist auch möglich, replizierte Datenbanken mit einem Multihomed-Client für eine unterbrechungsfreie Produktion zu kombinieren, obwohl ich mich momentan ohnehin nicht an den Namen solcher Clients erinnern kann.

Ich könnte hinzufügen, dass Sie wahrscheinlich mit einer Art * NIX arbeiten möchten, um den Neustart auf ein Minimum zu beschränken. Soweit ich mich erinnere, gab es in den letzten Jahren nur ein Update, für das es sich lohnt, RHEL und OEL neu zu starten.

Oracle RAC ist ein Parallelcluster. Die Datenbank wird im gemeinsam genutzten Speicher gespeichert und von allen Knoten gleichzeitig aufgerufen. Richtig gemacht, sollte es in den meisten Fällen die Gesamtleistung verbessern und nur geringe oder keine Unterschiede in den Antwortzeiten für Abfragen ergeben. Dies ist jedoch eine komplexe Technologie, und es ist alles andere als trivial, sie richtig zu machen.

Es gibt einige andere Parallell-Technologien, die fünf Neunen versprechen (99.999% Betriebszeit, was einer Ausfallzeit von 5 Minuten pro Jahr entspricht), die jedoch entweder zu alt (VAX) oder zu neu (NDB) sind.

Roy
quelle
"Keine Unterbrechung während der geplanten Wartung, einschließlich eines Neustarts des Betriebssystems" Wie ich weiß, funktioniert jede echte Clusterlösung (einschließlich MySQL Cluster) in diesem Zustand weiterhin, wenn Sie nur einen Knoten gleichzeitig neu starten.
Kedare
6

Der Unterschied zwischen einem zuverlässigen System und einem System ohne Ausfallzeit besteht darin, dass ein Aluminiumballon in eine erdnahe Umlaufbahn gebracht und eine Person auf den Mond gebracht und sicher wieder zurückgebracht wird.

Ich würde mir die Methoden der alten Schule ansehen, die meiner Meinung nach die sind, die Sie sich ansehen sollten, wenn Sie sie brauchen, um das erste Mal zu arbeiten und nicht das Budget zu sprengen.

Die alten Standbys sind OpenVMS-Cluster und Tandem (jetzt HP) NonStop. Beide sind für mehrere Computer konzipiert, auf denen genau dieselbe Datenbank und derselbe Code ausgeführt werden. Beide bieten eine 100% ige Verfügbarkeit auch durch Betriebssystem- und Software-Upgrades und -Patches. Beide haben eine jahrzehntelange Erfahrung in der ordnungsgemäßen Arbeit.

Nun - es gibt moderne Dinge, die dies auf dem Papier ermöglichen. In der Praxis treten Probleme wie " Hoppla, wir haben einen Fehler in unserem Lizenzserver gemacht und Ihre VMs werden jetzt nicht mehr gestartet ." Ich bin mir sicher, dass diese Technologien in einem Jahrzehnt getestet und als zuverlässig erwiesen werden. Wenn Sie sie jedoch benötigen, sollten Sie bis dahin sehr konservativ sein, an welche Geschichten Sie glauben.

Und schließlich ist es das Wichtigste, ein System so zuverlässig zu machen, es gut zu entwerfen, gut zu bauen und gut zu pflegen, denn in der Praxis ist die Person hinter der Tastatur die am wenigsten zuverlässige Sache in der Gleichung.

chris
quelle
+1 für Tandem. Obwohl ich zuversichtlich bin, dass Remus / VMWare dies auf weniger proprietäre Weise einfacher und billiger machen wird.
Kyle Hodgson
Der Faktor Mensch ist normalerweise der größte Ausfallzeitproduzent, entweder während des Betriebs oder der Entwicklung der App - ich bin mir dessen voll bewusst, aber ich möchte immer noch Informationen :-)
Lars D
1
+1 für den wunderbaren Vergleich mit der Raumfahrt :-)
Massimo
Der Verweis auf Tandem und OpenVMS war ein wenig scherzhaft - es ist unwahrscheinlich, dass Sie diese als Lösungen für ein neues Problem verkaufen können. Mein Punkt ist meistens, dass: 1) Sie vielleicht "Carrier Grade +" -Updimes wünschen, aber bitte schauen Sie sich die Kosten an - brauchen Sie sie wirklich? 2) Es gibt viele Möglichkeiten, um dieses Ziel zu erreichen. Um jedoch mehr als 5 Neunen Zuverlässigkeit bewiesen zu haben , benötigen Sie einen großen Datensatz. Perfekt auf Papier ist über viele Jahrzehnte hinweg viel schlechter als perfekt. Sie werden viele perfekt gültige Designs sehen, die möglicherweise bewährte Implementierungen haben oder nicht.
Chris
5

MySQL Cluster http://www.mysql.com/products/database/cluster/

  • Shared Nothing-Architektur (zentraler Speicher ist nicht erforderlich).
  • Rollende Upgrades - Aktualisieren, ohne den Cluster zu stoppen.
  • Sie können angeben, wie viele Kopien Ihrer Daten im Cluster vorhanden sein sollen.
  • In der Vergangenheit war es eine In-Memory-Datenbank, was bedeutet, dass Ihre gesamte Datenbank die RAM-Größe in Ihrem Cluster nicht überschreiten konnte (abzüglich des Replikationsaufwands).
  • Unterstützt jetzt auch On-Disk-Datenbanken.
  • Verfügt nicht über alle Funktionen einiger anderer MySQL-Speicher-Engines.
Elijahbuck
quelle
Ich gehe davon aus, dass dies der neue Name von NDB ist. Wissen Sie, ob indizierte Daten jetzt auf der Festplatte gespeichert werden können? Haben sie das Problem der Ladezeit nach einem Absturz überwunden?
Roy
Ich weiß es nicht. Ich habe es nur im Speicher verwendet.
Elijahbuck
2

Es gibt einige Möglichkeiten, dies zu tun. Cluster auf Betriebssystemebene können mit einem kurzen Ausfall funktionieren, wenn Sie von einem Knoten zu einem anderen wechseln. Sie haben Ihre Betriebssystemplattform nicht angegeben. Die meisten NIX-Plattformen verfügen über eine robuste Clustering-Lösung.

In Bezug auf die DB-Plattform hat Oracle einen gemeinsamen Ansatz mit RAC, bei dem Sie einen einzelnen Knoten herunterfahren können und alles auf die anderen Knoten im Cluster verschoben wird. Sie können damit Wartungsarbeiten an einem Knoten durchführen, während die anderen Knoten weiterhin ausgeführt werden und Clients warten. Sie alle verwenden denselben Festplattensatz. Die Auswirkung auf die Leistung hängt von der Hardwaregröße ab. Die meisten Orte dimensionieren ihre Hardware auf N + 1 Kapazität, um sicherzustellen, dass die Leistung bei dieser Art von Aktivität nicht beeinträchtigt wird.

Informix hat jetzt etwas Ähnliches in seiner neuesten Version. DB2 soll das bald bekommen.

Kevin K.
quelle
Welche Auswirkungen hat ein Oracle-Cluster auf die Latenz im Vergleich zu einem Oracle mit einer lokalen Festplatte?
Lars D
1
Ich bin mir nicht sicher, was Sie unter Latenz verstehen. Die meisten Oracle-Installationen basieren heutzutage auf SAN und verwenden keine lokalen Festplatten. Das SAN sollte sich im selben Rechenzentrum mit mehreren Hochgeschwindigkeitspfaden zwischen den Hosts und dem SAN befinden. Die Latenz innerhalb eines Rechenzentrums sollte kein Problem sein.
Kevin K
Latenz = Zeit, die benötigt wird, um eine Abfrage durchzuführen.
Lars D
Viele Designs führen zu einer Latenz für Abfragen. Beispielsweise ist die Suchzeit einer Festplatte häufig ein wesentlicher Faktor für die Latenz, aber auch die Netzwerklatenz trägt dazu bei. Schlechte SAN-Strukturen können einen Datenbankserver lahm legen, aber häufig verlangsamt SAN die Dinge nur, weil die App so optimiert ist, dass sie für die Suche nach Festplatten zuständig ist.
Lars D
Ich habe nicht gehört, dass die Latenz auf diese Weise verwendet wird, aber die Implementierung ist keine Einheitsgröße. Der Ansatz, alles zu teilen, wurde sehr missbraucht. Abhängig von Ihrer Anwendung kann die Latenz drastisch gesenkt oder erhöht werden. Es gibt viele Konfigurationsoptionen, z. B. die Möglichkeit, verschiedene Benutzerklassen auf verschiedene Hosts zu verweisen (lang laufende Abfragen auf einem, Ladevorgänge auf einem anderen, reguläre Benutzer auf einen dritten). Ein bisschen mehr Details in der App wären hilfreich.
Kevin K
1

Ich glaube, der einzige Weg, dies zu tun, ist die Verwendung von Clustering . Sie benötigen mehrere DB-Server, die zu einem Cluster zusammengefasst sind. Dann kann ein Server automatisch einen anderen Server übernehmen, der ausgefallen ist. Dies wird als "Failover" (oder Hochverfügbarkeitscluster) bezeichnet.

So beantworten Sie Ihre Fragen:

Welche Datenbankprodukte können das?

Alle, die für "Clustering-Unterstützung" werben. Ich weiß zumindest, dass MySQL und Oracle dies tun, aber viele andere DBMS unterstützen es wahrscheinlich auch.

Wie funktioniert es? Speichert es die Datenbankdaten gleichzeitig auf allen Servern oder werden die Aufgaben eines Servers beim Neustart auf einen anderen übertragen?

Beide. Die Server synchronisieren ihre Daten regelmäßig, sodass sie auf allen Servern gespeichert werden. Es gibt zwei Optionen, welcher Server tatsächlich auf Anforderungen reagiert: In einem Lastausgleichscluster teilen sich alle Server die Last (damit Sie eine bessere Leistung erzielen), in einem Hochverfügbarkeitscluster erledigt normalerweise ein Computer die Arbeit und der Ersatz übernimmt, wenn es fehlschlägt (Failover).

Wie wirkt es sich auf die Leistung aus, insbesondere auf die Latenz von Abfragen?

Entschuldigung, ich habe keine Erfahrung damit. Normalerweise sollte der Overhead minimal sein, aber das Failover kann einige Zeit dauern und Zeitüberschreitungen verursachen.

sleske
quelle
1

Ich habe noch nie von einigen der anderen genannten Lösungen gehört, daher kann ich sie nicht vergleichen, aber da ich die hier bekannte nicht sehe, werde ich sie auch erwähnen.

Das ist MySQL auf einem DRBD-Dateisystem . Mit Linux Heartbeat wie hier beschrieben

Wir haben dies für ein paar Jahre ohne wirkliche Ausfallzeiten verwendet. Unser einziges Problem war, dass wir unseren Cluster auf virtuellen Maschinen ausgeführt haben und dass er sich wirklich auf physischen Boxen mit mehreren Pfaden zwischen ihnen befinden muss (z. B. Ethernet und serielles Kabel usw.).

Dies funktioniert so, dass DRBD wie ein Raid auf mehreren Computern ist , bei dem das zugrunde liegende Dateisystem kontinuierlich zwischen zwei oder mehr Hosts synchronisiert wird, während Heartbeat nur zulässt, dass das Dateisystem / die Datenbank jeweils nur auf einem Server aktiv ist.

Das Failover beim Ausfall ist sehr schnell - und kann noch schneller eingestellt werden, wenn die Verbindungen zwischen den Maschinen redundant und sehr zuverlässig sind. (Dies war unser Problem bei der Verwendung von virtuellen Maschinen). Durch ein Failover vor einem geplanten Neustart kann auch dies minimiert werden.

Brent
quelle
0

2 Möglichkeiten, wie Sie dies tun können: VMware FT (jedoch auf 1 CPU beschränkt) und die andere ist die Clustering-Technologie.

VMware FT weist 0 Latenzprobleme auf, ABER Sie sind auf 1 CPU beschränkt, und die Clustering-Lösung hat häufig eine "Failover" -Zeit von etwa 15 Sekunden, wenn die TCP-Sitzung auf den neuen Server umschaltet, und das Zeitlimit für alte TCP-Sitzungen, einschließlich ARP-Aktualisierung im lokalen Netzwerk.

Stephen Thompson
quelle
Interessant, wusste nichts über VMWare Fault Tolerance (FT). Hier ist ein interessanter Link, den ich gefunden habe: virtualization.info/2008/10/…
sleske
Würde ein Failover auf Betriebssystemebene (z. B. VMWare FT) überhaupt funktionieren? In der Frage werden Aktualisierungen / Neustarts der DB-Software erwähnt. Würde das nicht Redundanz auf DBMS-Ebene erfordern? Andernfalls müssten Sie bei DBMS-Upgrades beide Knoten des Clusters parallel ausführen (einen für Anforderungen, einen für die Ausführung des Updates). Wie würden sie ohne Redundanz auf DBMS-Ebene synchronisieren?
Sleske
Ich würde denken, Sie würden einen Cluster von VMWare-Servern einrichten, um Ihren virtuellen DB-Server auszuführen. Fahren Sie VMWare-Knoten 1 für Updates herunter. Der zweite Knoten ruft die VM automatisch auf, sodass der virtuelle Server anscheinend nie ausgefallen ist. Das würde gemeinsam genutzten Speicher bedeuten, von dem aus Sie Ihre Datenbank in einem SAN oder ähnlichem ausführen können, aber der "nicht geclusterte" Datenbankserver muss sich dessen nicht bewusst sein, da der (virtuelle) Server selbst geclustert ist. Nicht unbedingt billig, aber es würde auf Maschinenebene funktionieren.
Bart Silverstrim
Ich sollte wahrscheinlich hinzufügen, dass meine Aussage aus Untersuchungen zum Clustering von VMWare-Servern stammt, nicht speziell von VMWare FT. Es hört sich so an (in den Kommentaren), dass das Ausführen der FT-Technologie einen erheblichen Aufwand bedeutet und die Hardwarespezifikationen erhöht werden (4 Nics? Wirklich?)
Bart Silverstrim,
Wie sollte VMware dieses Problem lösen? Normalerweise würde ich das Betriebssystem auf VMware und den Datenbankserver auf das Betriebssystem stellen. Wie vermeide ich, dass die Datenbanktransaktionen unterbrochen werden, wenn ich die VM mit Patches aktualisieren und die VM neu starten muss?
Lars D
0

MS SQL kann auf mehreren Servern geclustert werden - erfordert eine gemeinsam genutzte Festplatte von einem anderen Server. MySQL kann Daten mit Master / Slave-Beziehung über mehrere Knoten hinweg replizieren. Oracle RAC erstellt einen Cluster mit mehreren Knoten. Der Sybase Rep-Server kann Daten auf mehreren Servern replizieren.

Und ja, Sie können einfach alles in VMWare ausführen und dann mit FT oder Motion das Betriebssystem über Knoten verschieben, auf denen die in einem SAN gespeicherten Daten ausgeführt werden.

Alex
quelle
* Failover ist keine Option - es muss ein kontinuierlicher Betrieb sein. * VMware FT scheint nicht zu unterstützen, dass der Datenbankserver seinen Betrieb fortsetzt, während das virtualisierte (Gast-) Betriebssystem neu gestartet wird. Stimmt das? * Können Sie die MSSQL-Lösung detailliert beschreiben? Ich gehe davon aus, dass die freigegebene Festplatte von einer Gruppe von Servern bereitgestellt werden kann, die auch neu gestartet werden können, ohne die Festplatte offline zu schalten. Bitte beschreiben Sie die Auswirkungen einer solchen Lösung auf die Leistung im Vergleich zu einer MSSQL-Lösung mit einer lokalen Festplatte.
Lars D
Soweit ich mich erinnere, können Sie ohne eine gemeinsam genutzte Festplatte keinen MS-Cluster erstellen. Tatsächlich betrachten Sie zwei Anforderungen - die Datenbank und die Festplatte. Ehrlich gesagt bin ich nicht die beste Person, ich würde direkt mit MS sprechen, aber ich weiß, dass unsere MS SQL-Umgebung mit einem Cluster aus mehreren Knoten und einem Cluster-Hostnamen ausgeführt wird, um sie zu einem Host zu virtualisieren.
Alex
0

Ich würde sagen, eine Möglichkeit, dies zu tun, wäre die Master-Master-Replikation mit MySQL. Stellen Sie sicher, dass Ihre Anwendung für die Verwendung des zweiten Masters multihomed ist, wenn der erste nicht verfügbar ist. Sie können dann einen einzelnen Master herunterfahren, während der andere für Lese- und Schreibvorgänge aktiv bleibt. Wenn Ihr zweiter Server zurückkommt, drehen Sie ihn einfach in die andere Richtung. Tabelleneinfügungen erfolgen mit PK-Werten, die 2 statt 1 voneinander entfernt sind, aber das ist in Ordnung, es ist nur ein Schlüssel.

Zak
quelle
Obwohl dies in 98% der Fälle funktioniert, gibt es immer noch Probleme, bei denen Transaktionen in einer anderen Reihenfolge verarbeitet werden oder bestimmte Befehle wie DROP TABLE nicht ordnungsgemäß repliziert werden.
Brent
0

Ich suche nach Lösungen, die die Transaktion offen halten können, selbst wenn der Computer, auf dem die Datenbankserversoftware installiert ist (virtuell oder physisch), neu gestartet wird.

Ich denke, Sie müssen sich HA-JDBC ansehen, um diese Anforderung zu erfüllen: http://ha-jdbc.sourceforge.net/

"Hochverfügbarkeit / Fehlertoleranz - Ein HA-JDBC-Datenbankcluster kann einen Knoten verlieren, ohne offene Transaktionen zu versagen / zu beschädigen."

Prost

HTTP500
quelle
0

MSSQL mit Windows-Clustering würde 0 Ausfallzeit-Wartungsfenster verarbeiten, vorausgesetzt, Sie versagen den Knoten, an dem Sie arbeiten werden, bevor Sie mit der Arbeit beginnen. Darüber hinaus müssen Sie NLB auf den Hosts konfigurieren, um sicherzustellen, dass alle Verbindungen über eine gemeinsam genutzte IP-Adresse abgewickelt werden (andernfalls kann es zu Ausfallzeiten von mindestens 2 Sekunden kommen, während Server DNS usw. erneut versuchen). Damit das Clustering funktioniert, benötigen Sie ein gemeinsam genutztes Speicherarray wie iSCSI und zwei oder mehr physische Hosts (Hypervisoren müssen ebenfalls aktualisiert werden).

Hier sind einige ziemlich gute Informationen darüber, wie diese Umgebung aussehen würde. Wenn Sie jedoch keine Ausfallzeiten haben können, müssen Sie mindestens einen MS SQL DBA-Mitarbeiter und einen Bereitschaftsdienst haben, um sicherzustellen, dass alle Failover korrekt durchgeführt werden. t billig auf ALLES gehen. Rufen Sie Microsoft an und lesen Sie das Buch, oder stellen Sie Ihre App noch besser in die Cloud von Azure oder einem dedizierten Serveranbieter, der sich auf Hochverfügbarkeit spezialisiert hat.

http://www.eukhost.com/load-balanced-servers.php

Kodatorium
quelle