Immer in Verfügbarkeitsgruppe, Benutzer immer auf schreibgeschützte Instanz umleiten

9

Wir haben eine Always On-Verfügbarkeitsgruppe mit einer primären und einer lesbaren sekundären Gruppe. Wir haben einen Benutzer für das Implementierungsteam, der die Datenbank verwendet, um die Richtigkeit der Daten zu überprüfen, die in die Datenbank aufgenommen werden sollen.

Die Benutzer haben nur das Recht, aus der Datenbank zu lesen, aber wenn sie (über SSMS) über den AG Listener eine Verbindung herstellen, stellen sie immer eine Verbindung zum aktiven Knoten her.

Ich habe versucht, sie dazu zu bringen, direkt auf die schreibgeschützte Instanz zuzugreifen, aber sie stecken fest und nach ein oder zwei Tagen sind sie alle wieder auf dem aktiven Knoten.

Gibt es eine Möglichkeit für SQL Server zu sagen, dass dieser Benutzer immer mit Absicht schreibgeschützt sein wird, und sie dort umzuleiten?

HINWEIS: Ich habe versucht, 'ApplicationIntent = ReadOnly' in den zusätzlichen Verbindungsparametern festzulegen, dies scheint jedoch nicht zum sekundären Knoten umzuleiten und ist nicht die ideale Lösung, da sie unweigerlich vergessen, ihn für neue Starter einzurichten.

SQL Server 2012 Enterprise, Verfügbarkeitsgruppe 1 primär, 1 lesbar sekundär mit synchronem Commit.

Ich beabsichtige nicht, dass ein Benutzer eine Verbindung zu einem Verbindungsserver oder über einen anderen Server herstellt. Die Benutzer stellen über SSMS (keine andere Anwendung) eine direkte Verbindung zur Datenbank her, und ich möchte, dass der AG Listener (oder etwas in der Nähe) diesen Benutzer zu einem sekundären Knoten weiterleiten kann, sofern einer verfügbar ist (da er dort nur Lesezugriff hat Es macht keinen Sinn, auf Primary zuzugreifen, ohne dass der Benutzer etwas tun muss, da er sich auf Computern bewegt und vergisst, die Anwendungsabsicht hinzuzufügen. Ich finde auch, dass das Hinzufügen zu den zusätzlichen Verbindungsparametern Sie nicht immer zum sekundären Knoten weiterleitet.

Ste Bov
quelle
Zusätzlich zu den Kommentaren unten müssen Sie die Datenbank in der AG angeben, zu der Sie eine Verbindung herstellen.
Swasheck

Antworten:

4

Ich habe keine Antwort auf Ihre gesamte Frage (obwohl ich heute eine Antwort auf eine ähnliche Frage gegeben habe: /dba//a/137844/36812 ), aber Sie haben erwähnt, dass die Verwendung von ApplicationIntent = ReadOnly nicht funktioniert richtig.

Haben Sie schreibgeschützte Routing-URLs eingerichtet? Weil es nicht sofort ausgeführt wird und wenn Sie es nicht tun, funktionieren diese Einstellungen und dieses Flag nicht. Ich denke, wenn Sie das zum Laufen bringen, könnten Sie anfangen, Ihre Anforderungen neu zu bewerten.

Anweisungen auf MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx und am einfachsten in PowerShell.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica
Cody Konior
quelle
1

Ste, was Sie wollen, ist eine Point-and-Click-Lösung oder eine Einstellung irgendwo. Leider gibt es derzeit keine davon in "Standard" -Form. Es wäre wirklich schön, wenn Microsoft dies in die Verbindungseinstellungen für einen registrierten Server aufnehmen würde, damit es gespeichert werden könnte, aber leider nicht.

Sie haben also zwei Möglichkeiten:

  • Schreiben Sie selbst etwas
  • Benutzerverhalten ändern

Ich bin auf einen Microsoft-Download für SNAC - SQL Native Access Client gestoßen und habe nach etwas gesucht, das Ihre Anforderungen erfüllen könnte. Auf diese Weise können Sie ein kleines Stück Code schreiben, um Benutzern eine Schaltfläche für den direkten Zugriff auf die schreibgeschützte Sekundärseite zu geben. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

Die andere Möglichkeit besteht darin, Benutzer zu zwingen, den Verbindungsparameterdialog auszufüllen, wenn eine Verbindung über SSMS hergestellt wird. Um dieses Verhalten zu erzwingen, müssen Sie die Anmeldungen auf dem primären und dem sekundären Server ändern, die Verbindung zum primären Server verweigern und die Verbindung zum sekundären Server zulassen. Sie können einen SQL Agent-Job verwenden, um den Serverstatus zu überprüfen und die Anmeldungen entsprechend festzulegen.

Zugegeben, ich habe nicht versucht, Letzteres zu tun, aber theoretisch sollte es funktionieren.

Steve Mangiameli
quelle
-2

Es sieht so aus, als ob dies jetzt eine Funktion in SQL Server 2019 ist.

Von der Umleitung der Lese- / Schreibverbindung der sekundären zur primären Replik (Always On Availability Groups) in der offiziellen Dokumentation:

Vorschau von SQL Server 2019 CTP 2.0 führt eine sekundäre bis primäre Lese- / Schreibverbindungsumleitung für Replikate für Always On Availability Groups ein. Die Umleitung von Lese- / Schreibverbindungen ist auf jeder Betriebssystemplattform verfügbar. Damit können Clientanwendungsverbindungen unabhängig vom in der Verbindungszeichenfolge angegebenen Zielserver an das primäre Replikat geleitet werden.

Beispielsweise kann die Verbindungszeichenfolge auf ein sekundäres Replikat abzielen. Abhängig von der Konfiguration des Replikats der Verfügbarkeitsgruppe (AG) und den Einstellungen in der Verbindungszeichenfolge kann die Verbindung automatisch zum primären Replikat umgeleitet werden.

Matt
quelle
Ich bin mir nicht sicher, ob ich hier sehen kann, wie wichtig diese neue Funktion ist. Das Szenario des OP scheint sich von dem zu unterscheiden, für das diese Funktion vorgesehen ist. Das OP möchte schreibgeschützte Verbindungen zu einem sekundären (schreibgeschützten) Knoten umleiten, während in der Dokumentation zu dieser neuen Funktion angegeben ist, dass Lese- / Schreibverbindungen zum primären Knoten umgeleitet werden sollen. Könnten Sie bitte erläutern, wie die neue Funktionalität zur Lösung des betreffenden Problems verwendet werden kann?
Andriy M