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.)