Die Art und Weise, wie ich Hochverfügbarkeitslösungen immer visualisiere, ist die folgende:
SQL Server-Failoverclusterinstanz (FCI)
Was ist hoch verfügbar? Die gesamte Instanz. Dies beinhaltet alle Serverobjekte (Logins, SQL Server Agent Jobs, etc.). Dies schließt auch Datenbanken und ihre enthaltenen Entitäten ein. Es ist eine großartige Lösung für hochverfügbare SQL Server-Instanzen, da dies die Ebene der Eindämmung mit dieser gegebenen Lösung sein wird.
Was ist mit Berichterstattung? Keine, NULL, nicht vorhanden. Eine Failover-Cluster-Instanz verfügt über einen aktiven Knoten, der die Cluster-Gruppe mit der Instanz, dem VNN usw. bereitstellt, und alle anderen Knoten sind passiv, befinden sich im Leerlauf (soweit es die aktuelle Cluster-Gruppe betrifft) 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 die SQL Server-Instanz in einen aktiven Zustand zu versetzen. Dies ist in der Regel zeitlich minimal.
Irgendeine Client-Abstraktion? Ja, dies wird automatisch mit dem Namen des virtuellen Netzwerks für die Failover-Cluster-Instanz integriert. Dies zeigt immer auf den aktiven Knoten, der aktuell die SQL Server-Clusterressource bereitstellt.
AlwaysOn-Verfügbarkeitsgruppen
Was ist hoch verfügbar? Eine Verfügbarkeitsgruppe ist hier die logische Eingrenzung der Hochverfügbarkeit, während eine Verfügbarkeitsgruppe aus einer Reihe von Datenbanken und einem virtuellen Netzwerknamen (dem Listener, einer optionalen Clusterressource) besteht. Es ist zu beachten, dass Serverobjekte wie Anmeldungen und SQL Server-Agent-Jobs nicht Teil der HA-Lösung sind und dass besondere Überlegungen erforderlich sind, um sicherzustellen, dass diese mit einer Verfügbarkeitsgruppe ordnungsgemäß implementiert werden. Keine übermäßig belastende Anforderung, sondern muss gepflegt werden.
Was ist mit Berichterstattung? 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 dieses Replikat vor, das bereit ist, im Falle eines Problems ein Failover ohne Datenverlust durchzuführen. Dann gibt es asynchrone Replikate, die diese Berichtsauslastung verarbeiten können. Sie verwenden dieses Replikat nicht als die oben genannte Lösung, sondern auch für Dinge wie Berichterstellung. Berichts-Workloads können auf dieses Replikat verwiesen werden (entweder direkt oder indirekt durch schreibgeschütztes Routing über den Listener).
Was passiert bei einem Failover? Bei einem sekundären Synchron-Commit-Replikat, das mit einem automatischen Failover gekoppelt ist, ist dies die Statusänderung der Replikatrolle von SECONDARY_NORMAL nach PRIMARY_NORMAL. Damit ein automatisches Failover durchgeführt werden kann, muss ein synchrones sekundäres Replikat vorhanden sein, das derzeit synchronisiert ist, und die Richtlinie für flexibles Failover ist implementiert, um zu bestimmen, wann dieses Failover tatsächlich stattfinden soll. Diese Richtlinie ist in der Tat konfigurierbar.
Irgendeine Client-Abstraktion? Ja, Sie können optional einen AlwaysOn-Verfügbarkeitsgruppen-Listener konfigurieren. Dies ist im Grunde genommen nur ein virtueller Netzwerkname (der über WSFC als Clusterressource in der Clustergruppe der AG angezeigt wird), der auf das aktuelle primäre Replikat verweist. Dies ist ein wichtiger Teil der Verlagerung Ihrer Berichterstellungsarbeitslast sowie der Einrichtung einer schreibgeschützten Routingliste auf allen Servern, die ReadOnly-Datenverkehr umleiten sollen (dies wird über die Verbindungszeichenfolge mit dem .NET Framework-Anbieter für SQL festgelegt) Server, dies ist der Application Intent- Parameter ( ReadOnly ). Sie müssten auch eine schreibgeschützte Routing-URL für jedes Replikat festlegen, für das Sie diese Berichtsauslastung in der sekundären Replikatrolle erhalten möchten.
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 die Abonnenten weitergeleitet, aber wir sprechen auf Veröffentlichungs- / Artikelebene. Dies wird eine Teilmenge der Daten sein (könnte alle Daten enthalten, dies wird jedoch nicht erzwungen. Sie erstellen also eine neue Tabelle in der Publisher-Datenbank, die nicht automatisch an die Abonnenten weitergeleitet wird). Was HA betrifft, handelt es sich um Bottom-of-the-Barrel, und ich werde es dort nicht mit einer felsenfesten HA-Lösung zusammenfassen.
Was ist mit Berichterstattung? Eine großartige Lösung für die Berichterstattung über eine Teilmenge von Daten, keine Frage. Wenn Sie über eine 1-TB-Datenbank mit hohem Transaktionsgrad verfügen und diese Berichtsauslastung von der OLTP-Datenbank fernhalten möchten, ist die Transaktionsreplikation eine hervorragende Möglichkeit, eine Teilmenge der Daten für die Berichtsauslastung an einen Abonnenten (oder Abonnenten) zu senden. Was passiert, wenn von dieser 1 TB Datenmenge nur etwa 50 GB für Ihre Berichterstellung erforderlich sind? Dies ist eine intelligente Lösung, die sich relativ gut an Ihre geschäftlichen Anforderungen anpassen lässt.
Zusammenfassung
Worauf es ankommt, sind ein paar Fragen, die beantwortet werden müssen (teilweise vom Unternehmen):
- Was muss hoch verfügbar sein ?
- Was schreibt das SLA für HA / DR vor?
- Welche Art von Berichterstattung wird stattfinden und welche Latenzen sind akzeptabel?
- Was müssen wir mit geografisch verteiltem HA anfassen? (Speicherreplikation ist teuer, aber ein Muss bei einer FCI. AGs benötigen keinen gemeinsam genutzten Speicher für eigenständige Instanzen, und Sie können einen Dateifreigabezeugen für das Quorum verwenden, um die Notwendigkeit eines gemeinsam genutzten Speichers auszuschließen.)
Was für eine Arbeitsbelastung? "Es kommt darauf an" - aber im Ernst, dies ist nützlich für eine Online-Anwendung, bei der eine lokale Hochverfügbarkeit im Rechenzentrum erforderlich ist. Sie sind gegen den 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 sich genau den gleichen Speicher teilen und über dieselben Systemdatenbanken verfügen. Sehr schnelles Failover, aber es gibt immer noch ein Problem, das wie ein Neustart von SQL Server aussieht, wenn das Failover auftritt.
Nachteile / Bedenken - Ein einziger Fehlerpunkt ist Ihr Speicher und alle seine Komponenten. SAN-Anbieter sagen immer, dass SANs nicht ausfallen, aber es gibt viele bewegliche Teile in einem Storage Area Network, und wie ich hier beschrieben habe , können sie dies. Außerdem bezahlen Sie für einen sekundären Server, der nichts anderes kann, als herumzuhängen und zu warten. Jetzt können Sie Active / Active / Multi-Node ausführen und über zwei aktive Instanzen verfügen, die ein Failover in beide Richtungen ausführen und den zweiten Knoten verwenden können.
Automatisches Failover? Die "meisten" automatisch. Es wird kein Zeuge benötigt, es ist ein Cluster. Dies ist die Aufgabe eines Clusters, um es so nahtlos wie möglich zu gestalten. Wenn nun ein Failover stattfindet, werden Sie es "fühlen", weil SQL gestartet werden muss oder Verbindungen zeigen müssen. Wenn dies passiert, werden Sie sich im Grunde wie ein Neustart von SQL fühlen, DBs kehren zurück und führen recovery / etc aus.
Wenn ein Client in einer Hochverfügbarkeitsumgebung in meinem lokalen Rechenzentrum "Ich möchte mit allen Datenbanken, allen Anmeldungen usw. auf dem Laufenden sein" sagt, 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 von Verwaltungsaufwand). Ich würde wahrscheinlich eine lokale FCI und eine asynchrone sekundäre AG durchführen, um mich vor Standortfehlern oder SAN-Fehlern zu schützen.
Das ist es, was ich in letzter Zeit immer mehr Leuten bei der Implementierung geholfen habe, obwohl ich manchmal immer noch Clustering mache.
Zusammenfassung
HA und DR sind unterschiedlich. Und diese Technologien tragen dazu bei, Teile von beidem bereitzustellen. Hochverfügbarkeit bedeutet für mich, dass Sie schnell eine Wiederherstellung durchführen können, wenn auf einem Computer etwas Schlimmes passiert. Sie haben ein kurzes Ziel für Wiederherstellungspunkte und eine kurze Wiederherstellungszeit. Das ist Clustering und eine synchrone AG.
Disaster Recovery ist "Sie können aufstehen, wenn Sie einen Fehler haben, auch in Ihrer HA-Lösung. Für mich kann dies ein AG sein, wenn Sie zu einem anderen Rechenzentrum gehen, spiegeln oder sogar replizieren.
quelle
Es ist auch wichtig zu überlegen, was geteilt wird .
Beim Failover-Clustering werden zwei oder mehr Serverknoten verwendet, die sich ein Festplattenarray teilen . Wenn das Festplatten-Array ausfällt, verlieren Sie den Dienst, unabhängig davon, wie viele Serverknoten vorhanden sind. Wenn der Serverraum, in dem sich das Festplatten-Array befindet, Feuer oder Überschwemmungen ausgesetzt ist, verlieren Sie den Dienst.
AlwaysOn-Verfügbarkeitsgruppen und Datenbankspiegelung sind eine Clustering-Technologie, bei der nichts gemeinsam genutzt wird. Die Datenbank befindet sich auf mehreren Festplattenarrays auf mehreren Servern. Wenn Sie über gute Netzwerkverbindungen verfügen, können sich die mehreren Servern in mehreren Serverräumen befinden, um Sie vor Bränden und Überschwemmungen zu schützen.
quelle
Der Vollständigkeit halber gibt es die Möglichkeit, eine einfache alte Spiegelung zu verwenden. Zu den Vorteilen zählen zwei Kopien der Datenbank ohne die Komplexität der Verwendung von Verfügbarkeitsgruppen und ohne den gemeinsamen Speicher für das Failover-Clustering. Der leichte Nachteil ist, dass die Spiegelung veraltet ist.
Failover-Zeiten mit Spiegelung liegen in der Größenordnung von 10 Sekunden, obwohl der Anwendungscode alle Transaktionen wiederholen muss, die zum Zeitpunkt des Failovers auftreten.
quelle