Delen via


Alleen-lezenroutering configureren voor een AlwaysOn-beschikbaarheidsgroep

Van toepassing op:SQL Server

Als u een AlwaysOn-beschikbaarheidsgroep wilt configureren ter ondersteuning van alleen-lezenroutering in SQL Server, kunt u Transact-SQL of PowerShell gebruiken. Alleen-lezenroutering verwijst naar de mogelijkheid van SQL Server om kwalificerende verbindingsaanvragen voor alleen-lezen te routeren naar een beschikbare, leesbare secundaire replica (een replica die is geconfigureerd om alleen-lezenworkloads toe te staan wanneer deze worden uitgevoerd onder de secundaire rol). Ter ondersteuning van alleen-lezenroutering moet de beschikbaarheidsgroep beschikken over een listener voor beschikbaarheidsgroepen. Clients met alleen-lezen rechten moeten hun verbindingsaanvragen richten aan deze listener en de verbindingsparameters van de client moeten de intentie van de toepassing aangeven als 'alleen-lezen'. Met andere woorden, ze moeten verbindingsaanvragen met leesintenties zijn.

Alleen-lezenroutering is beschikbaar in SQL Server 2016 (13.x) en hoger.

Opmerking

Zie Read-Only Access configureren op een beschikbaarheidsreplica (SQL Server) voor meer informatie over het configureren van een leesbare secundaire replica.

Vereiste voorwaarden

Welke replica-eigenschappen moet u configureren ter ondersteuning van Read-Only routering?

  • Voor elke leesbare secundaire replica die ondersteuning biedt voor alleen-lezenroutering, moet u een alleen-lezen routerings-URL opgeven. Deze URL wordt alleen van kracht wanneer de lokale replica wordt uitgevoerd onder de secundaire rol. De alleen-lezen routerings-URL moet voor elke replica afzonderlijk worden opgegeven, indien nodig. Elke alleen-lezen-routerings-URL wordt gebruikt voor het routeren van verbindingsaanvragen voor leesintenties naar een specifieke leesbare secundaire replica. Meestal krijgt elke leesbare secundaire replica een read-only routerings-URL toegewezen.

    Zie Berekenen van read_only_routing_url voor AlwaysOn voor informatie over het berekenen van de alleen-lezen routering-URL voor een beschikbaarheidsreplica.

  • Voor elke beschikbaarheidsreplica waarvoor u alleen-lezenroutering wilt ondersteunen wanneer het de primaire replica is, moet u een alleen-lezenrouteringslijst opgeven. Een bepaalde lijst met alleen-lezenroutering wordt alleen van kracht wanneer de lokale replica actief is in de primaire rol. Deze lijst moet indien nodig per replica worden opgegeven. Normaal gesproken bevat elke alleen-lezen routeringslijst elke alleen-lezen routerings-URL, met de URL van de lokale replica aan het einde van de lijst.

    Opmerking

    Leesgerichte verbindingsverzoeken worden doorgestuurd naar de eerste beschikbare vermelding in de alleen-lezenrouteringslijst van de huidige primaire replica. Taakverdeling tussen alleen-lezen replica's wordt echter ondersteund. Zie Taakverdeling configureren voor alleen-lezen replica's voor meer informatie.

Opmerking

Voor informatie over listeners voor beschikbaarheidsgroepen en meer informatie over alleen-lezen routering, zie Listeners voor beschikbaarheidsgroepen, Clientconnectiviteit en Toepassingsfailover (SQL Server).

Machtigingen

Opdracht Machtigingen
Replica's configureren bij het maken van een beschikbaarheidsgroep Vereist lidmaatschap van de sysadmin vaste serverfunctie en de servermachtiging CREATE AVAILABILITY GROUP, de machtiging ALTER ANY AVAILABILITY GROUP, of de machtiging CONTROL SERVER.
Wijzigen van een beschikbaarheidsreplica Hiervoor is de ALTER AVAILABILITY GROUP-machtiging vereist voor de beschikbaarheidsgroep, de CONTROL AVAILABILITY GROUP-machtiging, de ALTER ANY AVAILABILITY GROUP-machtiging of de CONTROL SERVER-machtiging.

Transact-SQL gebruiken

Een alleen-lezen routeringslijst configureren

Gebruik de volgende stappen om alleen-lezen-routering te configureren met behulp van Transact-SQL. Zie Voorbeeld (Transact-SQL) verderop in deze sectie voor een codevoorbeeld.

  1. Maak verbinding met het serverexemplaar waarop de primaire replica wordt gehost.

  2. Als u een replica opgeeft voor een nieuwe beschikbaarheidsgroep, gebruikt u de instructie CREATE AVAILABILITY GROUP Transact-SQL. Als u een replica voor een bestaande beschikbaarheidsgroep toevoegt of wijzigt, gebruikt u de instructie ALTER AVAILABILITY GROUP Transact-SQL.

    • Als u alleen-lezenroutering wilt configureren voor de secundaire rol, geeft u in de clausule ADD REPLICA of MODIFY REPLICA WITH de optie SECONDARY_ROLE op, als volgt:

      SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://system-address:port')

      De parameters van de alleen-lezen routerings-URL zijn als volgt:

      systeemadres
      Is een tekenreeks, zoals een systeemnaam, een volledig gekwalificeerde domeinnaam of een IP-adres, die het doelcomputersysteem ondubbelzinnig identificeert.

      haven
      Is een poortnummer dat wordt gebruikt door de database-engine van het SQL Server-exemplaar.

      Bijvoorbeeld: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      In een MODIFY REPLICA-clausule is de ALLOW_CONNECTIONS optioneel als de replica al is geconfigureerd om verbindingen voor alleen lezen toe te staan.

      Voor meer informatie, zie Read_only_routing_url berekenen voor Always On.

    • Als u alleen-lezenroutering wilt configureren voor de primaire rol, geeft u in de component ADD REPLICA of MODIFY REPLICA WITH de PRIMARY_ROLE optie op, als volgt:

      PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ,... n ] ))

      waarbij de server een serverexemplaar identificeert die host is voor een alleen-lezen secundaire replica in de beschikbaarheidsgroep.

      Bijvoorbeeld: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      Opmerking

      U moet de URL voor alleen-lezen routering instellen voordat u de lijst met alleen-lezen routering configureert.

Taakverdeling configureren voor alleen-lezen replica's

Vanaf SQL Server 2016 (13.x) kunt u load-balancing configureren voor een set van alleen-lezen replica's. Voorheen verwees alleen-lezen routering altijd naar de eerste beschikbare replica in de routeringslijst. Om gebruik te maken van deze functie, gebruikt u één niveau van geneste ronde haakjes rond de READ_ONLY_ROUTING_LIST serverinstanties in de opdrachten CREATE AVAILABILITY GROUP of ALTER AVAILABILITY GROUP.

De volgende routeringslijst zorgt bijvoorbeeld voor een taakverdeling voor de leesintentieverbindingsaanvraag voor twee alleen-lezen replica's en Server1Server2. De geneste haakjes rond deze servers identificeren de set met gelijke taakverdeling. Als geen van beide replica's beschikbaar is in die set, zal er geprobeerd worden om opeenvolgend verbinding te maken met de andere replica's, Server3 en Server4, in de alleen-lezen routeringslijst.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')  

Houd er rekening mee dat elke vermelding in de routeringslijst zelf een set alleen-lezen replica's met gelijke taakverdeling kan zijn. In het volgende voorbeeld ziet u dit.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')  

Er wordt slechts één niveau van geneste haakjes ondersteund.

Voorbeeld (Transact-SQL)

In het volgende voorbeeld worden twee beschikbaarheidsreplica's van een bestaande beschikbaarheidsgroep gewijzigd om alleen-lezen-routering te ondersteunen als een van deze replica's momenteel de primaire rol heeft. Om de serverexemplaren te identificeren die de beschikbaarheidsreplica hosten, geeft dit voorbeeld de exemplaarnamen COMPUTER01 en COMPUTER02 op.

ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));  
GO  
  

PowerShell gebruiken

Een alleen-lezen routeringslijst configureren

Gebruik de volgende stappen om leesgerichte routering te configureren met behulp van PowerShell. Zie Voorbeeld (PowerShell) verderop in deze sectie voor een codevoorbeeld.

  1. Stel de standaardinstelling (cd-) in op het serverexemplaren waarop de primaire replica wordt gehost.

  2. Wanneer u een beschikbaarheidsreplica toevoegt aan een beschikbaarheidsgroep, gebruikt u de cmdlet New-SqlAvailabilityReplica . Wanneer u een bestaande beschikbaarheidsreplica wijzigt, gebruikt u de cmdlet Set-SqlAvailabilityReplica . De relevante parameters zijn als volgt:

    • Als u alleen-lezenroutering voor de secundaire rol wilt configureren, geeft u de parameter ReadonlyRoutingConnectionUrl"url" op.

      waarbij de URL de volledig gekwalificeerde domeinnaam (FQDN) en poort betreft, die moet worden gebruikt bij het routeren naar de replica voor verbindingen in alleen-lezen modus. Bijvoorbeeld: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      Voor meer informatie, zie Read_only_routing_url berekenen voor Always On.

    • Als u verbindingstoegang voor de primaire rol wilt configureren, geeft u ReadonlyRoutingList"server" [ ,...n ], waarbij server een serverexemplaar identificeert dat een alleen-lezen secundaire replica binnen de beschikbaarheidsgroep host. Bijvoorbeeld: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      Opmerking

      U moet de alleen-lezen routerings-URL van een replica instellen voordat u de alleen-lezen routeringslijst configureert.

    Opmerking

    Als u de syntaxis van een cmdlet wilt weergeven, gebruikt u de Get-Help--cmdlet in de SQL Server PowerShell-omgeving. Voor meer informatie, zie Get Help SQL Server PowerShell.

De SQL Server PowerShell-provider instellen en gebruiken

Voorbeeld (PowerShell)

In het volgende voorbeeld worden de primaire replica en een secundaire replica in een beschikbaarheidsgroep geconfigureerd voor alleen-lezen routering. Eerst wijst het voorbeeld een alleen-lezen routerings-URL toe aan elke replica. Vervolgens wordt de routeringslijst voor alleen-lezen ingesteld op de primaire replica. Verbindingen met de eigenschap ReadOnly die in de verbindingsreeks is ingesteld, worden omgeleid naar de secundaire replica. Als deze secundaire replica niet leesbaar is (zoals wordt bepaald door de instelling ConnectionModeInSecondaryRole ), wordt de verbinding teruggeleid naar de primaire replica.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"  
  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica  

Opvolgen: na het configureren van Read-Only routering

Zodra de huidige primaire replica en de leesbare secundaire replica's zijn geconfigureerd om alleen-lezen routering in beide rollen te ondersteunen, kunnen de leesbare secundaire replica's leesintentie-verbindingaanvragen ontvangen van clients die verbinding maken via de beschikbaarheidsgroep-listener.

Aanbeveling

Wanneer u het bcp-hulpprogramma of sqlcmd Utility gebruikt, kunt u alleen-lezentoegang opgeven voor een secundaire replica die is ingeschakeld voor alleen-lezentoegang door de schakeloptie -K ReadOnly op te geven.

Vereisten en aanbevelingen voor klant Connection-Strings

Voor een clienttoepassing die alleen-lezenroutering gebruikt, moet de verbindingsreeks voldoen aan de volgende vereisten:

  • Gebruik het TCP-protocol.

  • Stel het kenmerk/eigenschap van de toepassingsintentie in op alleen-lezen.

  • Verwijs naar de listener van een beschikbaarheidsgroep die is geconfigureerd ter ondersteuning van alleen-lezenroutering.

  • Verwijzen naar een database in die beschikbaarheidsgroep.

Daarnaast raden we u aan om verbindingsreeksen failover met meerdere subnetten in te schakelen, die ondersteuning biedt voor een parallelle clientthread voor elke replica in elk subnet. Dit minimaliseert de verbindingstijd van de client na een failover.

De syntaxis voor een verbindingsreeks is afhankelijk van de SQL Server-provider die een toepassing gebruikt. De volgende voorbeeldverbindingsreeks voor de .NET Framework Data Provider 4.0.2 voor SQL Server illustreert de onderdelen van een verbindingsreeks die vereist en aanbevolen zijn voor read-only routing.

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True  

Zie Listeners voor beschikbaarheidsgroepen, clientconnectiviteit en toepassingsfailover (SQL Server) voor meer informatie over de intentie van alleen-lezen toepassingen en alleen-lezenroutering.

Als Read-Only routering niet correct werkt

Zie Read-Only Routering niet correct werkt voor informatie over het oplossen van problemen met een alleen-lezen routeringsconfiguratie.

Herstel naar de standaard routeringsinstelling

Vanaf SQL Server 2025 (17.x) Preview kunt u NONE opgeven als bestemming voor READ_WRITE_ROUTING_URL om de door READ_ONLY_ROUTING_URL opgegeven routering voor de beschikbaarheidsreplica te herstellen en het verkeer te routeren op basis van het standaardgedrag. Raadpleeg de opdracht ALTER AVAILABILITY GROUP Transact-SQL voor meer informatie.

Volgende stappen

Alleen-lezenrouteringsconfiguraties weergeven

Clientverbindingstoegang configureren

Verbindingsreeksen gebruiken in toepassingen

Blogs:

Aanvullende inhoud