Umleitung von Lese-/Schreibverbindungen vom sekundären zum primären Replikat (Always On-Verfügbarkeitsgruppen)Secondary to primary replica read/write connection redirection (Always On Availability Groups)

Anwendungsbereich:Applies to: JaSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)Anwendungsbereich:Applies to: JaSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)

In SQL Server 2019 (15.x)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.SQL Server 2019 (15.x)SQL Server 2019 (15.x) CTP 2.0 introduces secondary to primary replica read/write connection redirection for Always On Availability Groups. Die Umleitung von Lese-/Schreibverbindungen ist auf jeder Betriebssystemplattform verfügbar.Read/write connection redirection is available on any operating system platform. Durch dieses Feature können Clientanwendungsverbindungen zum primären Replikat weitergeleitet werden, unabhängig davon, ob der Zielserver in der Verbindungszeichenfolge angegeben ist.It allows client application connections to be directed to the primary replica regardless of the target server specified in the connections string.

In der Verbindungszeichenfolge kann beispielsweise ein sekundäres Replikat als Ziel angegeben sein.For example, the connection string can target a secondary replica. Je nach Konfiguration des Verfügbarkeitsgruppenreplikats und den Einstellungen in der Verbindungszeichenfolge kann die Verbindung automatisch an das primäre Replikat umgeleitet werden.Depending on the configuration of the availability group (AG) replica and the settings in the connection string, the connection can be automatically redirected to the primary replica.

AnwendungsfälleUse cases

Vor SQL Server 2019 (15.x)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.Prior to SQL Server 2019 (15.x)SQL Server 2019 (15.x), the AG listener and the corresponding cluster resource redirect user traffic to the primary replica to ensure reconnection after failover. SQL Server 2019 (15.x)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.continues to support the AG listener functionality and adds replica connection redirection for scenarios that cannot include a listener. Beispiel:For example:

  • Die Clustertechnologie, in die SQL Server-Verfügbarkeitsgruppen integriert sind, bietet keine Funktion, die einem Listener ähnelt.The cluster technology that SQL Server availability groups integrates with does not offer a listener like capability
  • 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.A multi-subnet configuration like in the cloud or multi-subnet floating IP with Pacemaker where configurations become complex, prone to errors, and difficult to troubleshoot due to multiple components involved
  • 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.Read scale-out, or disaster recovery and cluster type is NONE, because there is no straightforward mechanism to ensure transparent reconnection upon manual failover

AnforderungRequirement

Damit ein sekundäres Replikat Lese-/Schreibverbindungsanforderungen umleiten kann, müssen folgende Voraussetzungen erfüllt sein:In order for a secondary replica to redirect read/write connection requests:

  • Das sekundäre Replikat muss online sein.The secondary replica must be online.
  • Die Replikatspezifikation PRIMARY_ROLE muss READ_WRITE_ROUTING_URL enthalten.The replica spec PRIMARY_ROLE must include READ_WRITE_ROUTING_URL.
  • Die Verbindungszeichenfolge muss auf ReadWrite festgelegt werden, indem ApplicationIntent als ReadWrite definiert wird oder indem ApplicationIntent nicht festgelegt wird, sodass standardmäßig ReadWrite verwendet wird.The connection string must be ReadWrite either by defining ApplicationIntent as ReadWrite or by not setting ApplicationIntent and letting the default (ReadWrite) take effect.

Festlegen der READ_WRITE_ROUTING_URL-OptionSet 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.To configure read/write connection redirection, set READ_WRITE_ROUTING_URL for the primary replica when you create the AG.

In SQL Server 2019 (15.x)SQL Server 2019 (15.x) wurde READ_WRITE_ROUTING_URL zur <add_replica_option>-Spezifikation hinzugefügt.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), READ_WRITE_ROUTING_URL has been added to the <add_replica_option> specification. Weitere Informationen finden Sie in den folgenden Artikeln:See the following topics:

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) nicht festgelegt (Standardeinstellung)PRIMARY_ROLE(READ_WRITE_ROUTING_URL) not set (default)

Standardmäßig ist die Umleitung von Lese-/Schreibverbindungen für ein Replikat nicht festgelegt.By default, read/write replica connection redirection is not set for a replica. 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.The way a secondary replica handles connection requests depends on whether or not the secondary replica is set to allow connections and on the ApplicationIntent setting in the connection string. Die folgende Tabelle zeigt, wie ein sekundäres Replikat basierend auf SECONDARY_ROLE (ALLOW CONNECTIONS = ) und ApplicationIntent Verbindungen behandelt.The following table shows how a secondary replica handles connections based on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent.

Wert vom Typ ApplicationIntentApplicationIntent value SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
StandardDefault
Verbindungen werden nicht hergestelltConnections fail Verbindungen werden nicht hergestelltConnections fail Verbindungen werden erfolgreich hergestelltConnections succeed
Lesevorgänge werden erfolgreich durchgeführtReads succeed
Schreibvorgänge werden nicht durchgeführtWrites fail
ApplicationIntent=ReadOnly Verbindungen werden nicht hergestelltConnections fail Verbindungen werden erfolgreich hergestelltConnections succeed Verbindungen werden erfolgreich hergestelltConnections succeed

Die oben gezeigte Tabelle veranschaulicht das Standardverhalten – dies ist das gleiche Verwalten wie in den SQL Server-Versionen vorSQL Server 2019 (15.x)SQL Server 2019 (15.x).The preceding table shows the default behavior, which is the same as versions of SQL Server before SQL Server 2019 (15.x)SQL Server 2019 (15.x).

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) festgelegtPRIMARY_ROLE(READ_WRITE_ROUTING_URL) set

Nachdem Sie die Umleitung von Lese-/Schreibverbindungen festgelegt haben, behandelt das Replikat Verbindungsanforderungen anders.After you set read/write connection redirection, the way the replica handles connection requests behaves differently. Das Verbindungsverhalten richtet sich weiterhin nach den Einstellungen für SECONDARY_ROLE (ALLOW CONNECTIONS = ) und ApplicationIntent.The connection behavior still depends on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent setting. Die folgende Tabelle zeigt, wie ein sekundäres Replikat mit festgelegtem READ_WRITE_ROUTING basierend auf SECONDARY_ROLE (ALLOW CONNECTIONS = ) und ApplicationIntent Verbindungen behandelt.The following table shows how a secondary replica with READ_WRITE_ROUTING set handles connections based on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent.

Wert vom Typ ApplicationIntentApplicationIntent value SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
StandardDefault
Verbindungen werden nicht hergestelltConnections fail Verbindungen werden nicht hergestelltConnections fail Verbindungen werden an das primäre Replikat geleitetConnections route to primary
ApplicationIntent=ReadOnly Verbindungen werden nicht hergestelltConnections fail Verbindungen werden erfolgreich hergestelltConnections succeed Verbindungen werden erfolgreich hergestelltConnections succeed

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.The preceding table shows that when the primary replica has READ_WRITE_ROUTING_URL set, the secondary replica will redirect connections to the primary replica when SECONDARY_ROLE (ALLOW CONNECTIONS = ALL), and the connection specifies ReadWrite.

BeispielExample

In diesem Beispiel weist die Verfügbarkeitsgruppe drei Replikat auf:In this example, an availability group has three replicas:

  • Ein primäres Replikat auf COMPUTER01A primary replica on COMPUTER01
  • Ein synchrones sekundäres Replikat auf COMPUTER02A synchronous secondary replica on COMPUTER02
  • Ein asynchrones sekundäres Replikat auf COMPUTER03A asynchronous secondary replica on COMPUTER03

Die folgende Abbildung zeigt die Verfügbarkeitsgruppe.The following picture represents the availability group.

Ursprüngliche Verfügbarkeitsgruppe

Das folgende Transact-SQL-Skript erstellt diese Verfügbarkeitsgruppe.The following transact-SQL script creates this AG. In diesem Beispiel gibt jedes Replikat die READ_WRITE_ROUTING_URL an.In this example, Each replica specifies the READ_WRITE_ROUTING_URL.

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.Domain and top-level domain of the fully qualified domain name. Beispiel: corporation.com.For example, corporation.com.

VerbindungsverhaltenConnection behaviors

Im folgenden Diagramm stellt eine Clientanwendung mit ApplicationIntent=ReadWrite eine Verbindung mit COMPUTER02 her.In the following diagram, a client application connects to COMPUTER02, with ApplicationIntent=ReadWrite. Die Verbindung wird an das primäre Replikat umgeleitet.The connection is redirected to the primary replica.

Ursprüngliche Verfügbarkeitsgruppe

Das sekundäre Replikat leitet Lese-/Schreibaufrufe an das primäre Replikat um.The secondary replica redirects read/write calls to the primary replica. Eine Schreibverbindung an eines der Replikate wird an das primäre Replikat umgeleitet.A read write connection to either replica will redirect to the primary replica.

Im folgenden Diagramm wurde für das primäre Replikat ein manuelles Failover zu COMPUTER02 ausgeführt.In the following diagram, the primary replica has been manually failed over to COMPUTER02. Eine Clientanwendung stellt mit ApplicationIntent=ReadWrite eine Verbindung mit COMPUTER01 her.A client application connects to COMPUTER01, with ApplicationIntent=ReadWrite. Die Verbindung wird an das primäre Replikat umgeleitet.The connection is redirected to the primary replica.

Ursprüngliche Verfügbarkeitsgruppe

SQL Server-Instanz offlineSQL Server instance offline

Wenn die in der Verbindungszeichenfolge angegebene SQL Server-Instanz nicht verfügbar ist (ausgefallen ist), kann keine Verbindung hergestellt werden, unabhängig davon, welche Rolle das Replikat auf dem Zielserver innehat.If the instance of SQL Server specified in the connection string is not available (has an outage), the connection will fail regardless of the role that the replica on the target server plays. Um längere Ausfallzeiten für Anwendungen zu verhindert, konfigurieren Sie einen alternativen FailoverPartner in der Verbindungszeichenfolge.To avoid prolonged application downtime, configure an alternative FailoverPartner in the connection string. Die Anwendung muss eine Wiederholungslogik implementieren, um die Verarbeitung sicherzustellen, falls sowohl das primäre als auch das sekundäre Replikat während des tatsächlichen Failovers nicht online sind.The application has to implement retry logic to accommodate primary and secondary replicas not being online during the actual failover. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unter SqlConnection.ConnectionString-Eigenschaft.For information about connection strings, see SqlConnection.ConnectionString Property.

Weitere InformationenSee Also

Übersicht zu AlwaysOn-Verfügbarkeitsgruppen (SQL Server)Overview of Always On Availability Groups (SQL Server)

Informationen zum Clientverbindungszugriff auf Verfügbarkeitsreplikate (SQL Server)About Client Connection Access to Availability Replicas (SQL Server)

Verfügbarkeitsgruppenlistener, Clientkonnektivität und Anwendungsfailover (SQL Server)Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)