Zunächst einmal tut es mir leid, wenn dies ein Duplikat ist. Ich konnte niemanden finden, der diese spezielle Frage ansprach, oder ich hätte sie beim Lesen möglicherweise nicht erkannt. Höchstwahrscheinlich habe ich die falschen Suchbegriffe verwendet, da ich mit der Terminologie nicht allzu vertraut bin.
Wir haben 3 Server:
A . SQL Server
B . Alarmsystem
C . Website + API + Andere
Server B und C müssen ständig eine Verbindung zu Server A herstellen , und es gab mehrere Fälle von Ausfallzeiten, die zu großer Unzufriedenheit der Kunden geführt haben.
Wir möchten Folgendes haben: (verschiedene Buchstaben, um das Kommentieren zu erleichtern, obwohl dies möglicherweise nicht der Fall ist: p)
W . Alarmsystem (mit SQL-Server)
X . Website + API (mit SQL-Server)
Y . Website + API (mit SQL-Server)
Z . Andere (mit SQL-Server)
BEARBEITEN: X und Y sind technisch identisch, aber X hostet normalerweise die Website, und unsere Apps und Lösungen von Drittanbietern stellen normalerweise eine Verbindung zur API auf Server Y her , um sicherzustellen, dass ein Hickup nur über einen Kanal zu spüren ist . Wenn X abstürzen würde, würde Y sowohl die Website als auch die API bedienen, bis X wieder online war und umgekehrt.
Es ist wichtig, dass die SQL-Server synchronisiert sind. Wenn ein Client über die Website (Server X ) eine Änderung in der Datenbank vornimmt und dann das Alarmsystem W aktiviert (für das die Änderung von Bedeutung ist), muss es bereits synchronisiert worden sein.
Jedes System verwendet nur einige der Datenbanken und Tabellen. Um Ressourcen zu sparen, konnten wir nur die wichtigen Daten sofort und den Rest etwa alle paar Stunden synchronisieren. Bearbeiten: keine Option
Wir werden SQL Server 2014 auf allen Servern verwenden (sofern mich nicht jemand anders überzeugt)
- Benötigen wir dazu Software von Drittanbietern ?
- Wir sind offensichtlich daran interessiert, die kostengünstigste Lösung zu verwenden, sowohl in Bezug auf Geld als auch in Bezug auf Ressourcen, aber die Unzufriedenheit unserer Kunden muss um jeden Preis enden. Wir haben nie einen Kunden verloren und beabsichtigen nicht, einen zu verlieren, weil er billig war .
- Müssten wir Trigger für die wichtigen Tabellen verwenden oder sollten wir dies tun?
- Könnten wir Ansichten verwenden ?
- Das heißt; Erstellen Sie auf allen SQL-Servern, die von jedem Server geladen werden, der den neuesten Zeitstempel für diese bestimmte Tabelle hat, die gleichen Ansichten, so dass eine sofortige Synchronisierung erfolgt. Eine echte Synchronisierung wäre immer noch notwendig, aber weniger häufig.
- Ich bin mir nicht sicher, wie das funktionieren würde, aber ich wäre nicht überrascht, wenn jemand dies irgendwann getan und eine Lösung für alle offensichtlichen und weniger offensichtlichen Probleme gefunden hätte.
- Wir haben verschiedene Funktionen , Prozeduren und Jobs , die von Zeit zu Zeit geändert werden. Können diese synchronisiert werden oder muss ich sie manuell aktualisieren (was keine große Sache ist)?
AKTUALISIEREN:
Wir haben Kontakt zu einem Unternehmen aufgenommen, das uns in der Vergangenheit beim Einrichten von Servern und beim Abrufen der richtigen Versionen und Lizenzen geholfen hat. Ihr Vorschlag war der folgende:
- Geben Sie jedem SQL Server eine Kopie der Tabellen, in die Daten gelesen und geschrieben werden.
- Haben repliziert alle Tabellen von den anderen Servern auf jedem Server; von dem es nur lesen kann .
Auf diese Weise kann jeder Server unabhängig arbeiten und auf alle Änderungen zugreifen, die auf den anderen Servern vorgenommen wurden.
Ich bin nicht ganz sicher, wie ich das Löschen von Zeilen erkennen soll , außer durchzugehen und zu sehen, was fehlt, es sei denn, TRIGGERS arbeiten post-synchron in replizierten Tabellen.
EDIT: Ein weiteres Anliegen von mir ist , was etwas ist in der gleichen Tabelle eingefügt passieren würde, auf verschiedenen Servern, während die Replikation nach unten aufgrund von Netzwerkproblemen oder was auch immer. Dann hätten wir 2 Zeilen mit derselben ID , und wir hätten keinen Grund anzunehmen, dass die letztere keine Bearbeitung der ersteren ist (abgesehen von der Tatsache, dass sich die ID nur in 2 von 4 Servern befindet, aber es könnte gut sein in allen 4 sein, wenn das Netzwerk für längere Zeit ausgefallen ist)
Diese Probleme alle ny werden könnten gelöst mehr colums zum Hinzufügen Erstellungsdatum , zuletzt Datum , Insert-ID und global-ID . Aber dann müssten wir auf unserer Website und auch in anderen Systemen so viel ändern, dass wir es vorziehen würden, dies zu vermeiden.
- Gibt es noch andere Hindernisse, denen wir mit dieser Lösung begegnen könnten?
- Irgendwelche besseren Ideen?
quelle
Antworten:
Ich verstehe das vielleicht etwas falsch, also entschuldige ich mich, wenn ich es bin.
Wenn Sie zwei Datenbanken haben, die identisch sein müssen und sich im Jahr 2014 befinden, verwenden Sie die AlwaysOn-Hochverfügbarkeitsgruppe.
Da sich Ihre Rechenzentren an verschiedenen Standorten befinden, verwenden Sie den Async-Modus
Dies bedeutet, dass die Datenbank vollständig auf dem neuesten Stand gehalten wird (möglicherweise mit einer Verzögerung von einigen Sekunden) und Sie den sekundären Knoten als schreibgeschütztes Replikat verwenden können. Dies bedeutet, dass Ihr Alarmsystem alle Daten in diese Datenbank einlesen kann Schecks usw. würden Sie normalerweise.
Das Always-on-System hält alles auf dem neuesten Stand. Wenn die Verbindung unterbrochen wird, werden alle Änderungen zusammengeführt, wenn sie wieder online sind
Wenn Ihr Hauptcenter ausfällt, können Sie es so einstellen, dass es automatisch auf das sekundäre Failover umschaltet. Wenn das Hauptdatencenter wieder online ist, wird es erneut mit dem (jetzt) primären Knoten synchronisiert. An diesem Punkt können Sie ein Failover durchführen zu Ihrem Hauptzentrum.
Sie können dies auf mehreren Datenbanken ausführen, sodass unsere Hauptdatenbank und unsere Verwaltungsdatenbank auf unseren Knoten synchronisiert sind. Was jedoch alle Jobs und direkten Aktionen auf jeder Seite ausführt, wird nicht repliziert und kann daher unabhängig voneinander bleiben
quelle
Es scheint, dass Sie die Replikation zusammenführen zwischen Servern verwenden können. Bei Objekten, die Sie benötigen, können Sie die Replikation alle 1 Minute synchronisieren, sodass jede Änderung in weniger als einer Minute übermittelt wird. (nicht in Echtzeit, aber sehr effizient) Es kann andere Objekte als Tabellen synchronisieren. Wenn Sie kein sehr kompliziertes Datenbankdesign haben, ist keine große Wartung erforderlich. Sie können Aktualisierungen sogar für denselben Datensatz gleichzeitig in verschiedenen Datenbanken durchführen. Merge Replication verfügt über einen Konfliktlösungsmechanismus, der Konflikte in Ihrem Unternehmen nach Möglichkeit auf der Grundlage der von Ihnen definierten Priorität löst. Da Änderungen erfasst und dann synchronisiert werden, funktionieren andere Server problemlos, selbst wenn ein Server ausfällt, und erfassen Änderungen. Wenn der Server zurück ist, wird alles synchronisiert.
quelle