Zunächst muss ich sagen, dass diese Frage aus der Perspektive eines Softwareentwicklers stammt. Leider haben wir keinen DBA, daher müssen wir unsere eigenen Datenbanken verwalten.
Wir haben SQL Server 2012 Enterprise installiert, um eine Datenbank auszuführen, die rund um die Uhr verfügbar sein sollte. Die Datenbank ist ungefähr 150 GB groß und einige Tabellen enthalten Milliarden von Zeilen. Mehrere Dienste treffen tausende Male pro Minute auf die Datenbank, um Echtzeit-Messdaten einzufügen. Wenn die Datenbank eine halbe Stunde lang nicht verfügbar ist, gehen eine halbe Stunde lang Messdaten verloren, die wir uns nicht leisten können ...
In dieser Situation haben wir zwei Hauptprobleme:
- Wann und wie installieren wir Microsoft Updates?
- Wie wenden wir Schemaänderungen an?
Windows Updates bedarf meiner Meinung nach keiner weiteren Erläuterung. Wenn neue Anforderungen auftreten oder bestehende Anforderungen sich ändern, müssen wir manchmal einige Schemaänderungen vornehmen. Zum Beispiel das Hinzufügen einiger zusätzlicher Spalten, das Ändern von Datentypen, das Ändern der Größe von Varchar-Feldern usw. Einige dieser Änderungen dauern sehr lange oder sogar eine Zeitüberschreitung, da die Datenbank immer stark ausgelastet ist.
Wir denken darüber nach, eine zusätzliche Instanz zu installieren und AlwaysOn zu aktivieren, um Folgendes zu erreichen:
- Schalten Sie für Windows-Updates einen Server herunter, installieren Sie Windows-Updates, bringen Sie ihn wieder hoch und aktualisieren Sie dann die zweite Instanz.
- Schalten Sie bei Schemaänderungen einen Server herunter, wenden Sie Schemaänderungen an, bringen Sie ihn wieder hoch und wenden Sie dann dieselben Änderungen auf die zweite Instanz an.
Können diese beiden Dinge mit SQL Server AlwaysOn erreicht werden, und ist dies ein gängiger Ansatz? Werden die Daten überhaupt nachträglich synchronisiert? Oder denke ich völlig in die falsche Richtung und gibt es bessere Lösungen?
quelle
Antworten:
Die Verwendung von AOAGs kann möglicherweise dabei helfen, je nachdem, wie viel Ausfallzeit als "zu viel" eingestuft wird. Es gibt immer noch einen Fehler beim Umschalten der primären auf eine synchrone sekundäre, da die Clients während des Umzugs getrennt werden (dies kann in Ihrer Umgebung ein Problem sein oder nicht). Sie müssen die Verbindung mithilfe des Listenernamens wiederherstellen (daher sollten keine Änderungen an der Verbindungszeichenfolge erforderlich sein) und eine Bibliothek verwenden, die dies unterstützt.
Das sind die Grundlagen, wie es funktioniert. Entfernen Sie das automatische Failover (synchron), installieren Sie die Updates / Patches und starten Sie es neu (in diesem Szenario).
AOAGs werden Ihnen in dieser Hinsicht nicht helfen. Das Transaktionsprotokoll wird grundsätzlich vom primären zum allen sekundären Protokoll abgespielt. Die sekundären können lesbar sein (wenn Sie dies zulassen), können jedoch keine Schreibaktivität (einschließlich ddl-Änderungen) an ihnen vornehmen. Eine synchrone Sekundärseite ist eine Spiegelkopie der Primärseite.
Könnten diese Änderungen vorgenommen werden, wenn die Anwendungsänderungen vorgenommen werden, um Ausfallzeiten zu minimieren? Es kann sinnvoller sein, ein Front-End mit Lastenausgleich zu verwenden, indem Sie beispielsweise F5 verwenden und die Daten über Peer-to-Peer-Replikation synchron halten, als AOAGs zu verwenden. Ich bin kein Replikationsexperte, aber es hört sich definitiv so an, als würden Sie zwei unterschiedliche Systeme benötigen, die über eine Art Frontend mit Lastenausgleich verfügen, damit Änderungen an jeweils einem System vorgenommen werden können, um Ressourcen ein- und auszuschalten, während sie beibehalten werden synchron.
Dies kann mit AOAGs nicht auf diese Weise (oder auf irgendeine Weise wirklich) durchgeführt werden.
quelle