Redirection de connexion en lecture/écriture depuis un réplica secondaire vers le réplica principal (groupes de disponibilité Always On)Secondary to primary replica read/write connection redirection (Always On Availability Groups)

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server nonAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2019 - PreviewSQL Server 2019 preview CTP 2.0 permet désormais la redirection de connexion en lecture/écriture depuis un réplica secondaire vers le réplica principal pour les groupes de disponibilité AlwaysOn.CTP 2.0 introduces secondary to primary replica read/write connection redirection for Always On Availability Groups. La redirection de connexion en lecture/écriture est disponible pour toutes les plateformes de système d’exploitation.Read/write connection redirection is available on any operating system platform. Elle permet de rediriger les connexions d’applications clientes vers le réplica principal, quel que soit le serveur cible spécifié dans la chaîne de connexion.It allows client application connections to be directed to the primary replica regardless of the target server specified in the connections string.

Par exemple, la chaîne de connexion peut cibler un réplica secondaire.For example, the connection string can target a secondary replica. Selon la configuration du réplica de groupe de disponibilité et les paramètres de la chaîne de connexion, la connexion peut être automatiquement redirigée vers le réplica principal.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.

Cas d’utilisationUse cases

Dans les versions antérieures à la SQL Server 2019 - PreviewSQL Server 2019 preview, l’écouteur du groupe de disponibilité et la ressource de cluster correspondante redirigent le trafic utilisateur vers le réplica principal afin de garantir la reconnexion après un basculement.Prior to SQL Server 2019 - PreviewSQL Server 2019 preview, the AG listener and the corresponding cluster resource redirect user traffic to the primary replica to ensure reconnection after failover. La SQL Server 2019 - PreviewSQL Server 2019 preview continue de prendre en charge la fonctionnalité d’écouteur du groupe de disponibilité, et permet de rediriger la connexion de réplica pour les scénarios qui ne peuvent pas inclure d’écouteur.SQL Server 2019 - PreviewSQL Server 2019 preview continues to support the AG listener functionality and adds replica connection redirection for scenarios that cannot include a listener. Exemple :For example:

  • La technologie de cluster qui est intégrée aux groupes de disponibilité SQL Server ne propose pas d’écouteur.The cluster technology that SQL Server availability groups integrates with does not offer a listener like capability
  • Une configuration à plusieurs sous-réseaux comme dans le cloud, ou une adresse IP flottante à plusieurs sous-réseaux avec Pacemaker où les configurations sont complexes, sujettes aux erreurs et difficiles à corriger en raison des nombreux composants impliquésA 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
  • L’échelle horizontale en lecture, la récupération d’urgence ou le type de cluster ont la valeur NONE, car il n’existe aucun mécanisme simple permettant de garantir la reconnexion transparente après un basculement manuelRead scale-out, or disaster recovery and cluster type is NONE, because there is no straightforward mechanism to ensure transparent reconnection upon manual failover

Condition requiseRequirement

Pour qu’un réplica secondaire redirige les requêtes de connexion en lecture/écriture :In order for a secondary replica to redirect read/write connection requests:

  • Le réplica secondaire doit être en ligne.The secondary replica must be online.
  • Les spécifications PRIMARY_ROLE du réplica doivent inclure READ_WRITE_ROUTING_URL.The replica spec PRIMARY_ROLE must include READ_WRITE_ROUTING_URL.
  • La chaîne de connexion doit définir ApplicationIntent comme ReadWrite, qui est la valeur par défaut.The connection string must define ApplicationIntent as ReadWrite- which is the default.

Définir l’option READ_WRITE_ROUTING_URLSet READ_WRITE_ROUTING_URL option

Pour configurer la redirection des connexions en lecture/écriture, définissez READ_WRITE_ROUTING_URL pour le réplica principal lorsque vous créez le groupe de disponibilité.To configure read/write connection redirection, set READ_WRITE_ROUTING_URL for the primary replica when you create the AG.

Dans SQL Server 2019 - PreviewSQL Server 2019 preview, READ_WRITE_ROUTING_URL a été ajouté aux spécifications <add_replica_option>.In SQL Server 2019 - PreviewSQL Server 2019 preview, READ_WRITE_ROUTING_URL has been added to the <add_replica_option> specification. Consultez les rubriques suivantes :See the following topics:

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) non défini (par défaut)PRIMARY_ROLE(READ_WRITE_ROUTING_URL) not set (default)

Par défaut, la redirection des connexions de réplica en lecture/écriture n’est pas définie pour un réplica.By default, read/write replica connection redirection is not set for a replica. La façon dont un réplica secondaire gère les requêtes de connexion varie selon qu’il est configuré pour autoriser les connexions, et selon la valeur du paramètre ApplicationIntent de la chaîne de connexion.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. Le tableau suivant montre comment un réplica secondaire gère les connexions en fonction de SECONDARY_ROLE (ALLOW CONNECTIONS = ) et de ApplicationIntent.The following table shows how a secondary replica handles connections based on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent.

SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Valeur par défautDefault
Échec des connexionsConnections fail Échec des connexionsConnections fail Réussite des connexionsConnections succeed
Réussite des lecturesReads succeed
Échec des écrituresWrites fail
ApplicationIntent=ReadOnly Échec des connexionsConnections fail Réussite des connexionsConnections succeed Réussite des connexionsConnections succeed

Le tableau précédant montre le comportement par défaut, qui est identique à celui des versions de SQL Server antérieures à la SQL Server 2019 - PreviewSQL Server 2019 preview.The preceding table shows the default behavior, which is the same as versions of SQL Server before SQL Server 2019 - PreviewSQL Server 2019 preview.

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) définiPRIMARY_ROLE(READ_WRITE_ROUTING_URL) set

Une fois la redirection des connexions en lecture/écriture définie, le réplica gère les requêtes de connexion différemment.After you set read/write connection redirection, the way the replica handles connection requests behaves differently. Le comportement de connexion dépend toujours de SECONDARY_ROLE (ALLOW CONNECTIONS = ) et de ApplicationIntent.The connection behavior still depends on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent setting. Le tableau suivant montre comment un réplica secondaire, où READ_WRITE_ROUTING est défini, gère les connexions en fonction de SECONDARY_ROLE (ALLOW CONNECTIONS = ) et de ApplicationIntent.The following table shows how a secondary replica with READ_WRITE_ROUTING set handles connections based on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent.

SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Valeur par défautDefault
Échec des connexionsConnections fail Échec des connexionsConnections fail Connexions acheminées vers le réplica principalConnections route to primary
ApplicationIntent=ReadOnly Échec des connexionsConnections fail Réussite des connexionsConnections succeed Réussite des connexionsConnections succeed

Le tableau précédent montre que lorsque READ_WRITE_ROUTING_URL est défini dans le réplica principal, le réplica secondaire redirige les connexions vers le réplica principal lorsque SECONDARY_ROLE (ALLOW CONNECTIONS = ALL), et que la connexion spécifie ReadWrite.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.

 ExempleExample

Dans cet exemple, un groupe de disponibilité a trois réplicas :In this example, an availability group has three replicas:

  • Un réplica principal sur COMPUTER01A primary replica on COMPUTER01
  • Un réplica secondaire synchrone sur COMPUTER02A synchronous secondary replica on COMPUTER02
  • Un réplica secondaire synchrone sur COMPUTER03A synchronous secondary replica on COMPUTER03

L’illustration suivante représente le groupe de disponibilité.The following picture represents the availability group.

Groupe de disponibilité d’origine

Le script Transact-SQL suivant crée ce groupe de disponibilité.The following transact-SQL script creates this AG. Dans cet exemple, chaque réplica spécifie READ_WRITE_ROUTING_URL.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 = SYNCHRONOUS_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>
    • Domaine et domaine de niveau supérieur du nom de domaine complet.Domain and top-level domain of the fully qualified domain name. Par exemple, corporation.com.For example, corporation.com.

Comportements de connexionConnection behaviors

Dans le diagramme suivant, une application cliente se connecte à COMPUTER02, avec ApplicationIntent=ReadWrite.In the following diagram, a client application connects to COMPUTER02, with ApplicationIntent=ReadWrite. La connexion est redirigée vers le réplica principal.The connection is redirected to the primary replica.

Groupe de disponibilité d’origine

Le réplica secondaire redirige les appels de lecture/écriture vers le réplica principal.The secondary replica redirects read/write calls to the primary replica. Une connexion en lecture/écriture vers l’un des réplicas sera redirigée vers le réplica principal.A read write connection to either replica will redirect to the primary replica.

Dans le diagramme suivant, le réplica principal a fait l’objet d’un basculement manuel vers COMPUTER02.In the following diagram, the primary replica has been manually failed over to COMPUTER02. Une application cliente se connecte à COMPUTER01, avec ApplicationIntent=ReadWrite.A client application connects to COMPUTER01, with ApplicationIntent=ReadWrite. La connexion est redirigée vers le réplica principal.The connection is redirected to the primary replica.

Groupe de disponibilité d’origine

Instance SQL Server hors connexionSQL Server instance offline

Si l’instance de SQL Server qui est spécifiée dans la chaîne de connexion n’est pas disponible (en cas de panne), la connexion échoue, quel que soit le rôle que joue le réplica sur le serveur cible.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. Pour éviter les temps d’arrêt prolongés du service, configurez un autre FailoverPartner dans la chaîne de connexion.To avoid prolonged application downtime, configure an alternative FailoverPartner in the connection string. L’application doit implémenter une logique de nouvelle tentative puisque les réplicas principaux et secondaires seront hors connexion pendant le basculement.The application has to implement retry logic to accommodate primary and secondary replicas not being online during the actual failover. Pour plus d’informations sur les chaînes de connexion, consultez SqlConnection.ConnectionString, propriété.For information about connection strings, see SqlConnection.ConnectionString Property.

 Voir aussiSee Also

Vue d’ensemble des groupes de disponibilité Always On (SQL Server)Overview of Always On Availability Groups (SQL Server)

À propos de l’accès de la connexion client aux réplicas de disponibilité (SQL Server)About Client Connection Access to Availability Replicas (SQL Server)

Écouteurs de groupe de disponibilité, connectivité client et basculement d’application (SQL Server)Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)