Time-out treedt op wanneer u verbinding maakt met een AlwaysOn-listener in een omgeving met meerdere subnetten
Dit artikel helpt u bij het oplossen van het probleem dat optreedt wanneer u verbinding maakt met een SQL Server AlwaysOn-beschikbaarheidsgroeplistener in een omgeving met meerdere subnetten.
Oorspronkelijke productversie: SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012 Express, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise Core
Origineel KB-nummer: 2792139
Symptomen
Nadat u de listener van de beschikbaarheidsgroep hebt geconfigureerd voor een AlwaysOn-beschikbaarheidsgroep in Microsoft SQL Server 2012, kunt u de listener mogelijk niet pingen of er geen verbinding mee maken vanuit een toepassing.
Wanneer u bijvoorbeeld verbinding probeert te maken met een listener van SQL Server met behulp SQLCMD
van , treedt er een time-out op voor de verbinding. Bovendien ontvangt u een foutbericht dat er ongeveer als volgt uitziet:
Sqlcmd: Fout: Microsoft SQL Native Client: Time-out voor aanmelding is verlopen.
Opmerking
Deze symptomen komen meestal af en toe voor of zijn gerelateerd aan failover van de resource van de beschikbaarheidsgroep.
In de volgende schermopname ziet u een voorbeeld van wat er gebeurt wanneer u de listener probeert te pingen voor de beschikbaarheid van aglisten
. De schermopname toont ook een geslaagde verbinding met SQL Server met behulp van de SQLCMD
opdracht wanneer u de failoverparameter voor meerdere subnetten opneemt-M
.
Opmerking
U kunt de SQLCMD
opdracht samen met de -M
parameter gebruiken zoals weergegeven in de schermopname om verbinding te maken met de listener.
Oorzaak
Dit probleem treedt op omdat uw toepassing gebruikmaakt van een verouderde gegevensprovider die de nieuwe MultiSubnetFailover
parameter niet ondersteunt of niet is geconfigureerd voor het gebruik van deze parameter.
Deze parameter wordt ondersteund in nieuwere versies van het SQLClient-stuurprogramma dat is opgenomen in de .NET Framework 4 en met latere versies van de .NET Framework, en wordt teruggezet naar de .NET Framework 3.5.
Opmerking
De PING
opdracht is een eenvoudig hulpprogramma voor connectiviteitstests dat de nieuwe parameter niet ondersteunt.
Oplossing
U kunt een van de volgende oplossingen gebruiken die van toepassing zijn op uw zaak:
Als u deze situatie wilt oplossen wanneer de gegevensproviders de
MultiSubNetFailover
parameter ondersteunen, voegt u deMultiSubNetFailover
parameter toe aan uw verbindingsreeks en stelt u deze in op true.Als u deze situatie wilt oplossen wanneer uw verouderde clients de
MultiSubnetFailover
eigenschap niet kunnen gebruiken, kunt u de waarde vanRegisterAllProvidersIP
de listener wijzigen in 0. Voer hiervoor de volgende opdracht uit vanuit de Windows PowerShell opdrachtregelinterface:Import-Module FailoverClusters Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
Opmerking
Nadat u de RegisterAllProvidersIP
waarde hebt ingesteld op 0, moet het huidige online-IP-adres niet meer zijn geregistreerd bij de DNS-server en moet het offline-IP-adres worden geregistreerd bij de DNS-server wanneer er een failover optreedt. Dit kan leiden tot een verbindingsvertraging voor de volgende failover.
Meer informatie
Wanneer u verbinding probeert te maken met een listener die is gedefinieerd op meer dan één subnet, kan de bewerking mislukken als het clientstuurprogramma verbinding probeert te maken met behulp van een van de offline IP-adressen van de listener.
Wanneer een listener wordt gemaakt, wordt een IP-adres aangewezen voor elk uniek subnet waarin een replica van een beschikbaarheidsgroep wordt gehost. Als er bijvoorbeeld een listener wordt gemaakt voor een beschikbaarheidsgroep met replica's die bestaan in twee subnetten, worden er twee IP-adressen gedefinieerd in de listener. Eén adres wordt gebruikt door een toepassing die verbinding kan maken met een exemplaar van SQL Server in subnet 1 en het andere adres wordt gebruikt wanneer een toepassing verbinding maakt met een exemplaar van SQL Server in subnet 2.
Achter de schermen maakt de listener een clienttoegangspuntresource voor windows-clusters. Een van de eigenschappen is RegisterAllProvidersIP
. Wanneer een listener wordt gemaakt, wordt deze ingesteld op 1 en worden alle IP-adressen van de listener geregistreerd in de DNS-server. Deze configuratie biedt kortere tijd voor het opnieuw verbinden van clients.
Omdat de DNS-record alle IP-adressen bevat, moet een client die verbinding probeert te maken met de listener weten hoe deze situatie moet worden afgehandeld. Met de MultiSubnetFailover
parameter kan het clientstuurprogramma parallelle verbindingen met alle IP-adressen van de listener proberen. Zonder de MultiSubnetFailover
parameter probeert het clientstuurprogramma sequentieel verbinding te maken met alle IP-adressen voor de listener. Sequentiële verbindingen kunnen een lange aanmeldingstijd of time-outs voor aanmelding veroorzaken.
Opmerking
Het probleem dat in dit artikel wordt genoemd, is ook van invloed op SharePoint-omgevingen die zijn geconfigureerd voor het gebruik van de secundaire alleen-lezen replica van een AlwaysOn-beschikbaarheidsgroep. U kunt dit probleem oplossen door een van de volgende acties uit te voeren die van toepassing zijn op uw versie van SharePoint:
Voor SharePoint 2007: dit is geclassificeerd als een verouderde toepassing. Daarom kan SharePoint 2007 niet worden geconfigureerd voor het gebruik van de
MultiSubnetFailover
parameter. In plaats daarvan moet u de opdracht Windows PowerShell gebruiken die wordt beschreven in de sectie Oplossing.Voor SharePoint 2010: cumulatieve updatepakketten zijn nu beschikbaar die ondersteuning voor de
MultiSubnetFailover
parameter toevoegen. Zie het volgende artikel voor meer informatie over de updatepakketten:
Verwijzingen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor