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?
Antworten:
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.
quelle
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.
quelle
MySQL Cluster http://www.mysql.com/products/database/cluster/
quelle
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.
quelle
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:
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.
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).
Entschuldigung, ich habe keine Erfahrung damit. Normalerweise sollte der Overhead minimal sein, aber das Failover kann einige Zeit dauern und Zeitüberschreitungen verursachen.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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
quelle
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
quelle