Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : SQL Server 2019 (15.x) et versions ultérieures
SQL Server 2019 (15.x) introduit la redirection des connexions en lecture/écriture du réplica secondaire vers le réplica principal pour les groupes de disponibilité Always On. 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 une réplique 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 à 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. 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 clustering avec laquelle les groupes de disponibilité SQL Server s’intègrent n’offre pas de fonctionnalité de type é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’une réplique secondaire redirige les requêtes de connexion de lecture/écriture :
- La réplique secondaire doit être en ligne.
- La spécification de la réplique
PRIMARY_ROLEdoit inclureREAD_WRITE_ROUTING_URL. - La chaîne de connexion doit être
ReadWrite. Pour cela,ApplicationIntentdoit être défini surReadWriteouApplicationIntentne 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 dépend du fait qu’il soit ou non configuré pour autoriser les connexions, ainsi que du paramètre ApplicationIntent dans 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.
ApplicationIntent valeur |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
|---|---|---|---|
ApplicationIntent=ReadWritePar défaut |
É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.
ApplicationIntent Valeur |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
|---|---|---|---|
ApplicationIntent=ReadWritePar défaut |
Échec des connexions | Échec des connexions | Les connexions sont redirigées vers le primaire |
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.
Rétablir le comportement de routage par défaut
À partir de SQL Server 2025 (17.x), vous pouvez spécifier NONE comme destination READ_WRITE_ROUTING_URL ou READ_ONLY_ROUTING_URL pour annuler le routage spécifié du réplica de disponibilité et acheminer le trafic selon le comportement par défaut. Pour en savoir plus, passez en revue ALTER AVAILABILITY GROUP Transact-SQL commande.
Exemple
Dans cet exemple, un groupe de disponibilité a trois réplicas :
- Une réplique principale sur COMPUTER01
- Une réplique secondaire synchrone sur COMPUTER02
- Une réplique secondaire asynchrone sur COMPUTER03
L’illustration suivante représente le groupe de disponibilité.
Le script Transact-SQL suivant crée ce groupe de disponibilité. Dans cet exemple, chaque réplique spécifie le 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.
- Domaine et domaine de niveau supérieur du nom de domaine complet. Par exemple :
Comportements de connexion
Dans le diagramme suivant, une application cliente se connecte à COMPUTER02, avec ApplicationIntent=ReadWrite. La connexion est redirigée vers la réplique principale.
La réplique secondaire redirige les appels de lecture/écriture vers la réplique principale. Une connexion en lecture-écriture sur l’une ou l’autre des répliques sera redirigée vers la réplique principale.
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 la réplique principale.
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)