Redirection de connexion en lecture/écriture depuis un réplica secondaire vers le réplica principal (groupes de disponibilité Always On)

S’applique à : SQL Server 2019 (15.x)

SQL Server 2019 (15.x) 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. La redirection de connexion en lecture/écriture est disponible pour toutes les plateformes de système d’exploitation. 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.

Par exemple, la chaîne de connexion peut cibler un réplica secondaire. 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.

Cas d'utilisation

Dans les versions antérieures à la SQL Server 2019 (15.x), 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. La SQL Server 2019 (15.x) 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. Par exemple :

  • La technologie de cluster qui est intégrée aux groupes de disponibilité SQL Server ne propose pas d’écouteur.
  • 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és
  • 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 manuel

Condition requise

Pour qu’un réplica secondaire redirige les requêtes de connexion en lecture/écriture :

  • Le réplica secondaire doit être en ligne.
  • Les spécifications PRIMARY_ROLE du réplica doivent inclure READ_WRITE_ROUTING_URL.
  • La chaîne de connexion doit être ReadWrite. Pour cela, ApplicationIntent doit être défini sur ReadWrite ou ApplicationIntent ne doit pas être défini et la valeur par défaut (ReadWrite) doit s’appliquer.

Définir l’option READ_WRITE_ROUTING_URL

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é.

Dans SQL Server 2019 (15.x), READ_WRITE_ROUTING_URL a été ajouté aux spécifications <add_replica_option>. Consultez les rubriques suivantes :

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) non défini (par défaut)

Par défaut, la redirection des connexions de réplica en lecture/écriture n’est pas définie pour un réplica. 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. Le tableau suivant montre comment un réplica secondaire gère les connexions en fonction de SECONDARY_ROLE (ALLOW CONNECTIONS = ) et de ApplicationIntent.

Valeur ApplicationIntent SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Default
Échec des connexions Échec des connexions Réussite des connexions
Réussite des lectures
Échec des écritures
ApplicationIntent=ReadOnly Échec des connexions Réussite des connexions Réussite des connexions

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 (15.x).

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) défini

Une fois la redirection des connexions en lecture/écriture définie, le réplica gère les requêtes de connexion différemment. Le comportement de connexion dépend toujours de SECONDARY_ROLE (ALLOW CONNECTIONS = ) et de ApplicationIntent. 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.

Valeur ApplicationIntent SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Default
Échec des connexions Échec des connexions Connexions acheminées vers le réplica principal
ApplicationIntent=ReadOnly Échec des connexions Réussite des connexions Réussite des connexions

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.

Exemple

Dans cet exemple, un groupe de disponibilité a trois réplicas :

  • Un réplica principal sur COMPUTER01
  • Un réplica secondaire synchrone sur COMPUTER02
  • Un réplica secondaire asynchrone sur COMPUTER03

L’illustration suivante représente le groupe de disponibilité.

Availability group with primary, secondary, and asynchronous secondary

Le script Transact-SQL suivant crée ce groupe de disponibilité. Dans cet exemple, chaque réplica spécifie 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>
    • Domaine et domaine de niveau supérieur du nom de domaine complet. Par exemple : corporation.com.

Comportements de connexion

Dans le diagramme suivant, une application cliente se connecte à COMPUTER02, avec ApplicationIntent=ReadWrite. La connexion est redirigée vers le réplica principal.

Connection to computer 2 is re-directed to the primary replica

Le réplica secondaire redirige les appels de lecture/écriture vers le réplica principal. Une connexion en lecture/écriture vers l’un des réplicas sera redirigée vers le réplica principal.

Dans le diagramme suivant, le réplica principal a fait l’objet d’un basculement manuel vers COMPUTER02. Une application cliente se connecte à COMPUTER01, avec ApplicationIntent=ReadWrite. La connexion est redirigée vers le réplica principal.

Connection redirected to new primary replica on computer2

Voir aussi

Vue d’ensemble des groupes de disponibilité Always On (SQL Server)

À propos de l'accès de la connexion client aux réplicas de disponibilité (SQL Server)

Écouteurs de groupe de disponibilité, connectivité client et basculement d’application (SQL Server)