DBAtlas · Atlas d'exploitation des bases de données

Vérifier le listener, ses IP et la configuration du read-only routing

SQL ServerAlways On et HA

Commande

-- Listener, port and IP states:
SELECT ag.name AS ag_name, l.dns_name, l.port, l.is_conformant,
       ip.ip_address, ip.ip_subnet_mask, ip.state_desc
FROM   sys.availability_group_listeners l
  JOIN sys.availability_groups ag ON ag.group_id = l.group_id
  LEFT JOIN sys.availability_group_listener_ip_addresses ip ON ip.listener_id = l.listener_id;

-- Read-only routing list: where read intent goes when X is primary:
SELECT ag.name AS ag_name, pr.replica_server_name AS when_primary_is,
       rl.routing_priority, sr.replica_server_name AS route_to,
       sr.read_only_routing_url, sr.secondary_role_allow_connections_desc
FROM   sys.availability_read_only_routing_lists rl
  JOIN sys.availability_replicas pr ON pr.replica_id = rl.replica_id
  JOIN sys.availability_replicas sr ON sr.replica_id = rl.read_only_replica_id
  JOIN sys.availability_groups ag   ON ag.group_id = pr.group_id
ORDER BY ag.name, when_primary_is, rl.routing_priority;

-- Replica endpoint and connection settings:
SELECT replica_server_name, endpoint_url, read_only_routing_url,
       secondary_role_allow_connections_desc, seeding_mode_desc, session_timeout
FROM   sys.availability_replicas;

-- Routing test from the command line (-d is required with -K ReadOnly):
-- sqlcmd -S tcp:AGL-Musteri,1433 -d Musteri -E -M -K ReadOnly -Q "SELECT @@SERVERNAME"

Ce que fait la commande

Affiche le nom DNS du listener, le port et l'état cluster de chaque IP de sous-réseau ; pour chaque scénario de primaire de la liste de read-only routing, vers quel réplica et quelle URL les connexions read-intent sont routées.

Quand l'utiliser

Quand les applications ne peuvent pas se connecter après un basculement, que les connexions ApplicationIntent=ReadOnly arrivent sur le primaire, ou qu'un nouveau sous-réseau/réplica a été ajouté.

Attention

Le read-only routing ne fonctionne que pour les connexions passant par le listener avec ApplicationIntent=ReadOnly et une base explicite ; les connexions directes à un nom d'instance ne sont pas routées. Un réplica dont read_only_routing_url est vide ne peut pas être une cible de routage. Sur un listener multi-sous-réseaux, les clients sans MultiSubnetFailover=True subissent des timeouts de connexion de 20-30 s après un basculement. Requête en lecture seule ; sûre.

Ouvrir dans DBAtlas →

Voir aussi