webentwicklung-frage-antwort-db.com.de

Clustering vs. Transaktionsreplikation vs. Verfügbarkeitsgruppen

Angenommen, Sie müssen sicherstellen, dass Ihre Anwendung, die auf SQL Server 2012 als Datenbank-Backend basiert, rund um die Uhr verfügbar ist, auch wenn ein Server-Computer ausfällt.

Als Entwickler und nicht als DBA habe ich Schwierigkeiten zu verstehen, wann ich welches Szenario für mein Failover/meine Hochverfügbarkeit verwenden soll:

  • Zwei (oder mehr) Server in einem Windows-Failovercluster, SQL Server als Clusterinstanz
  • Zwei (oder mehr) SQL Server-Instanzen, die mit der Transaktionsreplikation auf dem neuesten Stand gehalten werden
  • Zwei (oder mehr) SQL Server in einer SQL Server-Verfügbarkeitsgruppe, die in einem synchronen Festschreibungsmodus konfiguriert sind

Welches dieser Szenarien funktioniert für welche Art von Arbeitslast und welche Art von Ausfall/Ausfall können von diesen Szenarien behandelt werden? Sind sie überhaupt vergleichbar/austauschbar?

48
marc_s

Ich visualisiere immer gerne Hochverfügbarkeitslösungen wie folgt:

SQL Server-Failoverclusterinstanz (FCI)

Was ist hoch verfügbar? Die gesamte Instanz. Dies umfasst alle Serverobjekte (Anmeldungen, SQL Server Agent-Jobs usw.). Dies schließt auch Datenbanken und deren enthaltende Entitäten ein. Es ist eine großartige Lösung für hochverfügbare SQL Server-Instanzen, da dies der Grad der Eindämmung mit dieser gegebenen Lösung sein wird.

Was ist mit der Berichterstellung? Keine, NULL, nicht vorhanden. Eine Failoverclusterinstanz verfügt über einen aktiven Knoten, der die Clustergruppe mit der Instanz, dem VNN usw. bereitstellt. Alle anderen Knoten sind passiv, befinden sich im Leerlauf (für die aktuelle Clustergruppe) und warten auf ein Failover.

Was passiert bei einem Failover? Die Ausfallzeit für eine FCI wird durch die Zeit bestimmt, die der passive Knoten benötigt, um die Clusterressource abzurufen und bringen Sie die SQL Server-Instanz in einen laufenden Zustand. Dies ist in der Regel zeitlich minimal.

Irgendeine Client-Abstraktion? Ja, dies wird von Natur aus mit dem Namen des virtuellen Netzwerks für die Failover-Cluster-Instanz integriert. Dies zeigt immer auf den aktiven Knoten, der derzeit die SQL Server-Clusterressource bereitstellt.

AlwaysOn-Verfügbarkeitsgruppen

Was ist hoch verfügbar? Eine Verfügbarkeitsgruppe wird hier die logische Eindämmung der Hochverfügbarkeit sein, während eine Verfügbarkeitsgruppe aus einer Reihe von Datenbanken und a besteht Name des virtuellen Netzwerks (der Listener, eine optionale Clusterressource). Es ist zu beachten, dass Serverobjekte wie Anmeldungen und SQL Server-Agent-Jobs nicht Teil der HA-Lösung sind. Besondere Berücksichtigung muss erforderlich sein, um sicherzustellen, dass diese ordnungsgemäß mit einer Verfügbarkeitsgruppe implementiert werden. Keine übermäßig belastende Anforderung, sondern muss gepflegt werden.

Was ist mit der Berichterstellung? Dies ist eine großartige Lösung für die Berichterstellung, obwohl ich wahrscheinlich kein synchrones Replikat als Berichtsinstanz verwenden würde. Es gibt zwei Festschreibungsbeziehungen, synchron und asynchron. Meiner Meinung nach und nach dem, was ich in der Praxis gesehen habe, wartet Ihr synchrones sekundäres Replikat dort auf eine Katastrophe. Stellen Sie sich das Replikat vor, das im Falle eines Problems ein Failover ohne Datenverlust durchführen kann. Dann gibt es asynchrone Replikate, die diese Berichtsarbeitslast verarbeiten können. Sie verwenden dieses Replikat nicht als die oben genannte Lösung, sondern mehr für Dinge wie die Berichterstellung. Berichts-Workloads können auf dieses Replikat verwiesen werden (entweder direkt oder indirekt über schreibgeschütztes Routing über den Listener).

Was passiert bei einem Failover? Bei einem sekundären Replikat mit synchronem Commit, das mit einem automatischen Failover gepaart ist, ist dies die Änderung des Status der Replikatrolle von SECONDARY_NORMAL in PRIMARY_NORMAL . Damit es zu einem automatischen Failover kommt, benötigen Sie ein synchrones sekundäres Replikat, das derzeit synchronisiert ist. Was implementiert ist, ist die Flexible Failover-Richtlinie , um zu bestimmen, wann dieses Failover tatsächlich stattfinden sollte. Diese Richtlinie ist tatsächlich konfigurierbar.

Irgendeine Client-Abstraktion? Ja, Sie können optional einen AlwaysOn Availability Group-Listener konfigurieren. Dies ist im Grunde nur ein virtueller Netzwerkname (kann über WSFC als Clusterressource in der Clustergruppe der AG angezeigt werden), der auf das aktuelle primäre Replikat verweist. Dies ist ein wesentlicher Bestandteil der Verlagerung Ihrer Berichtsarbeitslast sowie des Einrichtens einer schreibgeschützten Routingliste auf allen Servern, auf denen Sie ReadOnly-Datenverkehr umleiten möchten (dies wird über die Verbindungszeichenfolge mit dem .NET Framework-Anbieter für SQL festgelegt Server, dies ist der Parameter Application Intent, Der auf ReadOnly) gesetzt ist. Sie müssten außerdem eine schreibgeschützte Routing-URL für jedes Replikat festlegen, für das Sie diese Berichts-Workload erhalten möchten, während Sie sich in der sekundären Replikatrolle befinden.

Transaktionsreplikation

Was ist hoch verfügbar? Das ist fraglich, aber ich werde nichts sagen. Ich sehe Replikation überhaupt nicht als Hochverfügbarkeitslösung. Ja, Datenänderungen werden an Abonnenten weitergeleitet, aber wir sprechen auf Publikations-/Artikelebene. Dies wird eine Teilmenge der Daten sein (könnte alle Daten enthalten, wird aber nicht erzwungen. Das heißt, Sie erstellen eine neue Tabelle in der Herausgeberdatenbank und diese wird nicht automatisch an die Abonnenten weitergeleitet). Was HA betrifft, ist dies der Boden des Fasses, und ich werde es dort nicht mit einer steinharten HA-Lösung zusammenfassen.

Was ist mit der Berichterstellung? Eine großartige Lösung für die Berichterstellung über eine Teilmenge von Daten, keine Frage. Wenn Sie über eine 1 TB -Datenbank mit hoher Transaktionsrate verfügen und diese Berichtsarbeitslast von der OLTP -Datenbank) fernhalten möchten, ist die Transaktionsreplikation eine hervorragende Möglichkeit für Push Eine Teilmenge von Daten an einen Abonnenten (oder Abonnenten) für die Berichtsarbeitslast. Was passiert, wenn von dieser 1 TB der Datenmenge) Ihre Berichtsarbeitslast nur etwa 50 GB beträgt? Dies ist eine intelligente Lösung. und relativ konfigurierbar, um Ihre Geschäftsanforderungen zu erfüllen.

Zusammenfassung

Worauf es ankommt, sind eine Handvoll Fragen, die (teilweise vom Unternehmen) beantwortet werden müssen:

  1. Was muss hoch verfügbar sein ?
  2. Was schreibt der [~ # ~] sla [~ # ~] für HA/DR vor?
  3. Welche Art von Berichterstattung wird stattfinden und welche Latenzen sind akzeptabel?
  4. Was müssen wir mit geografisch verteilten HA umgehen? (Die Speicherreplikation ist teuer, aber ein Muss bei einer FCI. AGs benötigen keinen gemeinsam genutzten Speicher von eigenständigen Instanzen, und Sie können einen Zeugen für die gemeinsame Nutzung von Dateien für das Quorum verwenden, wodurch möglicherweise die Notwendigkeit eines gemeinsam genutzten Speichers entfällt.)
52
Thomas Stringer

zwei (oder mehr) Server in einem Windows-Failovercluster, SQL Server als Clusterinstanz

  1. Welche Art von Arbeitslast? "Es kommt darauf an" - aber im Ernst, dies ist nützlich für eine Online-Anwendung, bei der Sie lokale Hochverfügbarkeit im Rechenzentrum benötigen. Sie sind vor einem Ausfall eines Computers oder eines Betriebssystems geschützt. Die Anmeldungen, Jobs, neuen Datenbanken, Wartungsarbeiten usw. werden automatisch synchronisiert, da es sich um einen Cluster mit zwei Knoten handelt, die genau gleich sind und denselben Speicher gemeinsam nutzen, sodass sie alle dieselben Systemdatenbanken haben. Sehr schnelles Failover, aber es gibt immer noch einen Schluckauf, der wie ein Neustart von SQL Server aussieht, wenn das Failover auftritt.

  2. Nachteile/Bedenken - Ein einziger Fehlerpunkt ist Ihr Speicher und alle seine Komponenten. SAN Anbieter sagen immer "SANs fallen nicht aus", aber es gibt viele bewegliche Teile in einem Speicherbereichsnetzwerk, und wie ich über hier gebloggt habe, können sie das auch - Sie zahlen für einen sekundären Server, der nur herumhängen und warten kann. Jetzt können Sie Aktiv/Aktiv/Multi-Node ausführen und haben zwei aktive Instanzen, die in beide Richtungen ein Failover durchführen und den zweiten Knoten verwenden können.

  3. Automatisches Failover? Die "am meisten" automatische. Kein Zeuge erforderlich, es ist ein Cluster. Dies ist die Aufgabe eines Clusters, um es so nahtlos wie möglich zu gestalten. Wenn nun ein Failover auftritt, werden Sie es "fühlen", weil SQL gestartet werden muss oder Verbindungen zeigen müssen. Wenn es passiert, werden Sie sich im Grunde wie ein Neustart von SQL fühlen, DBs werden wieder hochgefahren und führen die Wiederherstellung/etc. Aus.

Wenn ein Client in einer Hochverfügbarkeitsumgebung in meinem lokalen Rechenzentrum sagt, dass ich mit allen Datenbanken, allen Anmeldungen usw. vollständig auf dem neuesten Stand sein möchte, weil ich eine unglaublich geringe Toleranz für Ausfallzeiten habe, würde ich Failover-Cluster-Instanzen in Betracht ziehen (obwohl die Die letzte Option, die Sie erwähnen, ist ein starker Konkurrent, abgesehen davon, dass Sie einige Verwaltungsaufwendungen erledigen müssen. Ich würde wahrscheinlich eine lokale FCI und eine asynchrone sekundäre AG durchführen, um vor Standortfehlern oder SAN Fehler) zu schützen.

zwei (oder mehr) SQL Server-Instanzen, die mit der Transaktionsreplikation auf dem neuesten Stand gehalten werden

  1. Welche Art von Arbeitsbelastung? Ich würde ehrlich gesagt nicht in viele Fälle gehen, in denen Hochverfügbarkeit oder Notfallwiederherstellung als erste Wahl erforderlich sind. Sicher nicht in SQL 2012. Aber im Grunde ist dies gut, wenn Sie zu einem Rechenzentrum gehen mussten, das nicht in der Nähe war, Sie keine AG verwenden konnten (möglicherweise ein Domänenproblem, das Sie daran hinderte, den für die AG erforderlichen Windows-Cluster zu verwenden), vielleicht wollten Sie es sein in SQL Server-Standard, der Replikation durchführen kann, aber keine AGs, aber Sie wollten trotzdem die Fähigkeit haben, auf der sekundären Seite zu lesen und asynchron zu sein.
  2. Nachteile/Bedenken - Es ist Replikation. Es hat Overhead, es kann nicht mehr synchron sein, Sie können Probleme mit der Leistung auf der Quellseite entwickeln usw.
  3. Automatisches Failover - Nein. Sie müssen es selbst verwalten. Entweder über CNAMEs, die auf das eine oder das andere verweisen, und Sie könnten theoretisch Ihren eigenen Prozess schreiben, um dies zu tun, aber sofort? Beachten Sie hier.

zwei (oder mehr) SQL Server in einer SQL Server-Verfügbarkeitsgruppe, die in einem synchronen Festschreibungsmodus konfiguriert sind

Dies ist es, was ich den Leuten in letzter Zeit immer mehr bei der Implementierung geholfen habe, obwohl ich manchmal immer noch zum Clustering gehe.

  1. Welche Art von Arbeitslast? Dies ist großartig, wenn ich einen verwaltbaren Satz von Datenbanken habe, die synchron gehalten werden sollen, sowie die Ressourcen und die Zeit, um sicherzustellen, dass Jobs, Anmeldungen, neue Datenbanken usw. bleiben synchron (obwohl das Team von SQL Skills hat ein großartiges Add-In erstellt , um einige davon für Sie zu automatisieren und eine Option noch stärker zu machen). Ich mag das, wenn ich die Dinge völlig getrennt halten will. Ich schütze vor Hardwareproblemen, Betriebssystemproblemen, SQL-Installationsproblemen, Patchproblemen und SAN/Speicherproblemen. Ich habe auch den Vorteil, dass ich eine sekundäre (wenn ich eine Unternehmenslizenz dafür bezahlen möchte) als aktive sekundäre Person habe, von der ich lesen, Backups erstellen usw. kann. Außerdem kann ich in Zukunft eine dritte hinzufügen Sekundär, das an einem Remotestandort asynchron ist und über Failover/DR verfügt.
  2. Nachteile/Bedenken Lizenzierung, maximale Anzahl von Replikaten, Lizenzkosten, um einige der größten Vorteile zu nutzen (aktive sekundäre), erfordert Unternehmen, erfordert doppelt so viel viel Speicher als Clustering.
  3. Automatisches Failover - Ja. Dies kann bei einem Zeugen-Setup auftreten, und Ihre App-Entwickler können anstelle eines Knotens eine Verbindung zum Listener herstellen, sodass das Failover dort erfolgt, wo der Listener zeigt und Sie dort gut sein sollten. Ja, das können Sie hier - und sollten -, aber natürlich sollten Sie es gut testen.

Zusammenfassung

HA und DR sind unterschiedlich. Und diese Technologien helfen dabei, beides bereitzustellen. Hochverfügbarkeit bedeutet (für mich), dass Sie schnell wiederherstellen können, wenn einem Computer etwas Schlimmes passiert. Sie haben ein kurzes Ziel für den Wiederherstellungspunkt und das Ziel für die Wiederherstellungszeit. Das ist Clustering und eine synchrone AG.

Disaster Recovery ist "Sie können aufstehen, wenn Sie selbst in Ihrer HA-Lösung einen Fehler haben. Für mich können dies AGs sein, wenn Sie in ein anderes Rechenzentrum gehen, spiegeln oder sogar replizieren.".

23
Mike Walsh

Es ist auch wichtig zu berücksichtigen, was geteilt wird .

Beim Failover-Clustering werden zwei oder mehr Serverknoten verwendet, die eins Festplattenarray gemeinsam nutzen. Wenn das Festplattenarray ausfällt, verlieren Sie den Dienst, unabhängig davon, wie viele Serverknoten vorhanden sind. Wenn der Serverraum, in dem sich das Festplattenarray befindet, Feuer fängt oder überflutet, verlieren Sie den Dienst.

AlwaysOn-Verfügbarkeitsgruppen und Datenbankspiegelung sind eine Clustered-Technologie, die nichts gemeinsam nutzt. Die Datenbank ist auf mehreren Festplattenarrays auf mehreren Servern vorhanden. Wenn Sie über gute Netzwerkverbindungen verfügen, können sich die mehreren Serves in mehreren Serverräumen befinden, um Sie vor Bränden und Überschwemmungen zu schützen.

9

Der Vollständigkeit halber besteht die Möglichkeit, eine einfache alte Spiegelung zu verwenden. Zu den Vorteilen gehört, dass zwei Kopien der Datenbank ohne die Komplexität der Verwendung von Verfügbarkeitsgruppen und ohne gemeinsamen Speicher für das Failover-Clustering vorhanden sind. Der Nachteil ist zwar gering, aber die Spiegelung ist veraltet.

Die Failover-Zeiten mit Spiegelung liegen in der Größenordnung von 10 Sekunden, obwohl der Anwendungscode in der Lage sein muss, alle zum Zeitpunkt des Failovers auftretenden Transaktionen erneut zu versuchen.

6
Max Vernon