Beste Möglichkeit, eine große SQL Server-Datenbank mit geringen Ausfallzeiten über das Netzwerk zu migrieren

22

Problem Definition

Unser Datenbankserver muss auf ein anderes Rechenzentrum übertragen werden. Es wird unter Microsoft SQL Server 2012 Enterprise (64-Bit) ausgeführt und enthält zwei Datenbanken mit ca. 2 TB und 1 TB.

Ideal wäre es, wenig oder gar keine Ausfallzeiten zu haben.

Arbeitsbelastung

Diese Datenbanken werden für eine .NET-Website verwendet und werden ständig aktualisiert.

Über das Wochenende nicht verfügbar zu sein, wäre jedoch akzeptabel. Der aktuell verwendete DB bleibt der einzige, der bis zur Umstellung auf den neuen DB verwendet wird.

Dieser Wechsel würde idealerweise einfach dadurch erfolgen, dass DNS-Einträge so geändert werden, dass sie auf den neuen DB-Server verweisen, während sichergestellt wird, dass die DB nicht aktualisiert wird.

Außerdem spielt die Zeit, die für diesen Vorgang benötigt wird, keine Rolle, solange der Wechsel von einem Server zum anderen (Ausfallzeit) gering gehalten wird.

Ansätze berücksichtigt

  • Sichern und Wiederherstellen

    Dies geschah in der Vergangenheit, war jedoch mit einer hohen Ausfallzeit verbunden, obwohl dies über ein internes Netzwerk und damit effizienter als über das Internet erfolgte

  • Protokollversand

    Soweit ich weiß, würde dieser Ansatz Ausfallzeiten minimieren, indem ein Master / Slave konfiguriert und eine exakte Kopie der Master-DB auf den Slave übertragen wird, der nur lesbar ist. Wie oben erwähnt, wäre kein Zugriff auf den Slave erforderlich, und es ist lediglich eine Möglichkeit erforderlich, eine Replik der Master-DB ohne Datenbeschädigung zu erstellen.

    Es scheint auch sehr effizient in Bezug auf die Ressourcennutzung zu sein und würde die Masterleistung nicht wesentlich beeinträchtigen.

    Ich könnte mich bei diesem Ansatz irren, also zögern Sie nicht, mich zu korrigieren.

  • Datenbankspiegelung

    Ich bin mir dieses Ansatzes nicht allzu bewusst, aber es scheint eine gültige Option zu sein. Es ist nicht unbedingt erforderlich, dass eine Echtzeitsynchronisierung durchgeführt wird, und die Leistung des Masters ist sehr wichtig. Bei diesem Ansatz wäre eine asynchrone Synchronisierung der richtige Weg.

  • Andere Optionen?

    Dieser Server läuft direkt auf Bare-Metal-Hardware, daher sind Lösungen auf niedrigerer Ebene leider keine Option. Vielleicht gibt es einen besseren Weg, dies zu erreichen?

Einschränkungen

Wie beschrieben, sind diese Datenbanken so groß, dass sie schwer zu warten sind, aber das ist ein anderes Problem.

Die Versionen von SQL Server sind identisch (Microsoft SQL Server 2012 Enterprise 64-Bit).

Es muss also höchstwahrscheinlich über das Internet über ein Netzwerk zwischen zwei Rechenzentren übertragen werden. Es ist leider keine Option, Datenträger für eine erste Synchronisierung von einer Site zur anderen zu senden. Eine gewisse Sicherheit für den Transfer wäre ideal, aber wir werden das Beste aus dieser Situation machen.

Das sollte einen recht guten Überblick über unsere Bedürfnisse für diese Aufgabe geben und hoffentlich mussten sich einige von Ihnen zuvor mit dieser Situation auseinandersetzen.

Val F.
quelle

Antworten:

20

Das direkte Sichern und Wiederherstellen ist offensichtlich nicht möglich. Ich würde auch keine Replikation in Betracht ziehen.

Die Datenbankspiegelung ist relativ einfach einzurichten, erfordert jedoch eine Echtzeitkonnektivität zwischen den beiden Servern, das Einrichten von Partnern und Endpunkten usw. Verfügbarkeitsgruppen können eine Option sein. Zusätzlich zu den Netzwerkproblemen müssen jedoch auch beide Server vorhanden sein als Mitglieder der gleichen WSFC - was bedeutet, dass sie beide in der gleichen Domäne sein müssen. Dies ist kein typisches Setup (oder könnte sogar vorübergehend zum Funktionieren gebracht werden) für einen Rechenzentrumsumzug.

Meine Stimme wäre für den Holzversand. Das Schöne daran ist, dass Sie die Sicherungen und Protokollsicherungen verwenden können, die Sie bereits erstellen (oder?), Und nicht unbedingt eine Echtzeitverbindung zwischen den beiden Datenbanken herstellen müssen - sie müssen nicht über jede verfügen Andernfalls müssen Sie keine Endpunkte für Spiegelung, Partner, Sicherheit usw. einrichten. Sie benötigen lediglich eine Möglichkeit, um Dateien vom alten Server an einen Ort zu verschieben, an dem sie auf dem neuen Server wiederhergestellt werden können. Sie können frühzeitig eine vollständige Sicherung erstellen, diese auf den neuen Server übertragen, wiederherstellen und von diesem Zeitpunkt an bis zum Zeitpunkt des Cut-Over (möglicherweise Unterschiede und) inkrementelle Protokollsicherungen durchführen. Der Vorgang ist eigentlich recht einfach und es gibt viele Anleitungen zum Protokollversand, die online verfügbar sind, wenn Sie auf Schwierigkeiten stoßen.

Wenn die Webanwendung mit der Datenbank verschoben wird, möchten Sie möglicherweise die Verbindungszeichenfolgen der alten Anwendung so ändern, dass sie auf die IP-Adresse des neuen Datenbankservers verweisen, sobald diese schreibbar ist, da die Weitergabe des DNS eine Weile dauern kann , da - auch nach dem Wechsel und selbst bei engen TTL-Einstellungen - Clients möglicherweise weiterhin auf die alten Webserver zugreifen. Es kommt darauf an, wie sehr die Anbieter Ihre TTLs respektieren.

Aaron Bertrand
quelle
16

Ich habe kürzlich 15 TB über 6 Datenbanken mithilfe von Spiegelung migriert. Sehr einfach und funktionierte perfekt mit nur ein paar Sekunden Failover-Zeit.

Bearbeitungen:

Ich hatte zwei neue virtualisierte SQL Server. Die Datenbanken stammten von drei Servern, denen sie einfach entwachsen waren, und wirkten sich auf die Leistung der auf ihnen gehosteten kleineren Datenbanken aus.

Der Prozess war sehr einfach.

  1. Warten Sie, bis die vollständigen Sicherungen am Wochenende abgeschlossen sind
  2. Wiederherstellung ohne Wiederherstellung auf neuen Servern
  3. Wenn diese Wiederherstellungen abgeschlossen sind, halten Sie die Sicherungen an
  4. Führen Sie eine weitere Wiederherstellung bis zur letzten Protokollsicherung von Originalen durch, ohne dass eine Wiederherstellung erfolgt
  5. Starten Sie die Spiegelung für alle sechs
  6. Backups fortsetzen

Ich habe sie im asynchronen Modus belassen, bis wir bereit waren, ein Failover für sie durchzuführen, um die Netzwerklast usw. zu reduzieren. Die Spiegelung hat den Ruf, Wartezeiten während der Wartung (Index / Statistik) und anderer Aktivitäten mit hohem Volumen zu verursachen, aber ich habe dies nicht getan finde das wahr. Sie müssen vor dem manuellen Failover in den synchronen Modus geschaltet werden.

Während des nächsten Wartungsfensters habe ich manuell ein Failover für jede Datenbank durchgeführt und nach einigen Rauchprüfungen die Spiegelung deaktiviert und schließlich die alten Datendateien von den Ursprungsservern entfernt. Eine Besonderheit in diesem Prozess ist, dass bei einem Ausfall einer gespiegelten Datenbank die frühere Primärdatenbank in einem wiederhergestellten Zustand bleibt. Wenn Sie also nicht möchten, dass sie einfach gelöscht werden, müssen Sie sie wieder online schalten und dann trennen oder was auch immer Ihre bevorzugte Methode zum Entfernen ist . Außerdem habe ich keinen Zeugen dafür konfiguriert, weil ich kein automatisches Failover wollte. Dies war ein kontrolliertes Ereignis.

Bitte lassen Sie mich wissen, wenn Sie weitere Einzelheiten wünschen. Ich habe Server- und Netzwerkspezifikationen ausgelassen, kann sie aber bereitstellen, wenn Sie möchten.

Vielen Dank

Erik Darling
quelle