Umleitung von Lese-/Schreibverbindungen vom sekundären zum primären Replikat (Always On-Verfügbarkeitsgruppen)
Gilt für: SQL Server 2019 (15.x)
In SQL Server 2019 (15.x) CTP 2.0 wird eine Umleitung von Lese-/Schreibverbindungen vom sekundären zum primären Replikat für Always On-Verfügbarkeitsgruppen eingeführt. Die Umleitung von Lese-/Schreibverbindungen ist auf jeder Betriebssystemplattform verfügbar. Durch dieses Feature können Clientanwendungsverbindungen zum primären Replikat weitergeleitet werden, unabhängig davon, ob der Zielserver in der Verbindungszeichenfolge angegeben ist.
In der Verbindungszeichenfolge kann beispielsweise ein sekundäres Replikat als Ziel angegeben sein. Je nach Konfiguration des Verfügbarkeitsgruppenreplikats und den Einstellungen in der Verbindungszeichenfolge kann die Verbindung automatisch an das primäre Replikat umgeleitet werden.
Anwendungsfälle
Vor SQL Server 2019 (15.x) leiten der Verfügbarkeitgruppenlistener und die entsprechende Clusterressource den Benutzerdatenverkehr an das primäre Replikat weiter, um die Verbindungswiederherstellung nach einem Failover sicherzustellen. SQL Server 2019 (15.x) unterstützt die Funktion des Verfügbarkeitgruppenlisteners weiterhin und fügt die Umleitung von Replikatverbindungen für Szenarien hinzu, in denen keine Listener verwendet werden kann. Beispiel:
- Die Clustertechnologie, in die SQL Server-Verfügbarkeitsgruppen integriert sind, bietet keine Funktion, die einem Listener ähnelt.
- Eine Konfiguration mit mehreren Subnetzen wie z.B. die Cloud oder Floating IP mit Pacemaker mit mehreren Subnetzen – solche Konfigurationen können aufgrund der Menge an beteiligten Komponenten sehr komplex, fehleranfällig und schwer zu korrigieren sein.
- Horizontale Leseskalierung oder eine Notfallwiederherstellung mit Clustertyp
NONE
, da es keinen einfachen Mechanismus gibt, um eine transparente Wiederherstellung der Verbindung nach einem manuellen Failover gibt.
Anforderung
Damit ein sekundäres Replikat Lese-/Schreibverbindungsanforderungen umleiten kann, müssen folgende Voraussetzungen erfüllt sein:
- Das sekundäre Replikat muss online sein.
- Die Replikatspezifikation
PRIMARY_ROLE
mussREAD_WRITE_ROUTING_URL
enthalten. - Die Verbindungszeichenfolge muss auf
ReadWrite
festgelegt werden, indemApplicationIntent
alsReadWrite
definiert wird oder indemApplicationIntent
nicht festgelegt wird, sodass standardmäßigReadWrite
verwendet wird.
Festlegen der READ_WRITE_ROUTING_URL-Option
Um die Umleitung von Lese-/Schreibverbindungen zu konfigurieren, legen Sie beim Erstellen der Verfügbarkeitsgruppe READ_WRITE_ROUTING_URL
für das primäre Replikat fest.
In SQL Server 2019 (15.x) wurde READ_WRITE_ROUTING_URL
zur <add_replica_option>
-Spezifikation hinzugefügt. Weitere Informationen finden Sie in den folgenden Artikeln:
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) nicht festgelegt (Standardeinstellung)
Standardmäßig ist die Umleitung von Lese-/Schreibverbindungen für ein Replikat nicht festgelegt. Wie ein sekundäres Replikat Verbindungsanforderungen behandelt, richtet sich danach, ob das Zulassen von Verbindungen für das sekundäre Replikat festgelegt ist, und nach den ApplicationIntent
-Einstellung in der Verbindungszeichenfolge. Die folgende Tabelle zeigt, wie ein sekundäres Replikat basierend auf SECONDARY_ROLE (ALLOW CONNECTIONS = )
und ApplicationIntent
Verbindungen behandelt.
Wert vom Typ ApplicationIntent |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite Standard |
Verbindungen werden nicht hergestellt | Verbindungen werden nicht hergestellt | Verbindungen werden erfolgreich hergestellt Lesevorgänge werden erfolgreich durchgeführt Schreibvorgänge werden nicht durchgeführt |
ApplicationIntent=ReadOnly |
Verbindungen werden nicht hergestellt | Verbindungen werden erfolgreich hergestellt | Verbindungen werden erfolgreich hergestellt |
Die oben gezeigte Tabelle veranschaulicht das Standardverhalten – dies ist das gleiche Verwalten wie in den SQL Server-Versionen vorSQL Server 2019 (15.x).
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) festgelegt
Nachdem Sie die Umleitung von Lese-/Schreibverbindungen festgelegt haben, behandelt das Replikat Verbindungsanforderungen anders. Das Verbindungsverhalten richtet sich weiterhin nach den Einstellungen für SECONDARY_ROLE (ALLOW CONNECTIONS = )
und ApplicationIntent
. Die folgende Tabelle zeigt, wie ein sekundäres Replikat mit festgelegtem READ_WRITE_ROUTING
basierend auf SECONDARY_ROLE (ALLOW CONNECTIONS = )
und ApplicationIntent
Verbindungen behandelt.
Wert vom Typ ApplicationIntent |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite Standard |
Verbindungen werden nicht hergestellt | Verbindungen werden nicht hergestellt | Verbindungen werden an das primäre Replikat geleitet |
ApplicationIntent=ReadOnly |
Verbindungen werden nicht hergestellt | Verbindungen werden erfolgreich hergestellt | Verbindungen werden erfolgreich hergestellt |
Die oben stehende Tabelle zeigt Folgendes: Bei festgelegter READ_WRITE_ROUTING_URL
-Option für das primäre Replikat leitet das sekundäre Replikat Verbindungen an das primäre Replikat um, wenn SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
festgelegt ist. Die Verbindung gibt ReadWrite
an.
Beispiel
In diesem Beispiel weist die Verfügbarkeitsgruppe drei Replikat auf:
- Ein primäres Replikat auf COMPUTER01
- Ein synchrones sekundäres Replikat auf COMPUTER02
- Ein asynchrones sekundäres Replikat auf COMPUTER03
Die folgende Abbildung zeigt die Verfügbarkeitsgruppe.
Das folgende Transact-SQL-Skript erstellt diese Verfügbarkeitsgruppe. In diesem Beispiel gibt jedes Replikat die READ_WRITE_ROUTING_URL
an.
CREATE AVAILABILITY GROUP MyAg
WITH ( CLUSTER_TYPE = NONE )
FOR
DATABASE [<Database1>]
REPLICA ON
'COMPUTER01' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER01.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER02', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER02' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER02.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER03' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER03.<domain>.<tld>:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER02'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
);
GO
<domain>.<tld>
- Domäne und Top-Level-Domäne des vollqualifizierten Domänennamens. Beispiel:
corporation.com
.
- Domäne und Top-Level-Domäne des vollqualifizierten Domänennamens. Beispiel:
Verbindungsverhalten
Im folgenden Diagramm stellt eine Clientanwendung mit ApplicationIntent=ReadWrite
eine Verbindung mit COMPUTER02 her. Die Verbindung wird an das primäre Replikat umgeleitet.
Das sekundäre Replikat leitet Lese-/Schreibaufrufe an das primäre Replikat um. Eine Schreibverbindung an eines der Replikate wird an das primäre Replikat umgeleitet.
Im folgenden Diagramm wurde für das primäre Replikat ein manuelles Failover zu COMPUTER02 ausgeführt. Eine Clientanwendung stellt mit ApplicationIntent=ReadWrite
eine Verbindung mit COMPUTER01 her. Die Verbindung wird an das primäre Replikat umgeleitet.
Weitere Informationen
Übersicht über Always On-Verfügbarkeitsgruppen (SQL Server)
Informationen zum Clientverbindungszugriff auf Verfügbarkeitsreplikate (SQL Server)
Verfügbarkeitsgruppenlistener, Clientkonnektivität und Anwendungsfailover (SQL Server)