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 alwayson-listener van een SQL Server AlwaysOn-beschikbaarheidsgroep 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
Oorspronkelijk KB-nummer: 2792139
Symptomen
Nadat u de listener voor de beschikbaarheidsgroep voor een AlwaysOn-beschikbaarheidsgroep in Microsoft SQL Server 2012 hebt geconfigureerd, kunt u de listener mogelijk niet pingen of er 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. Daarnaast ontvangt u een foutbericht dat er ongeveer als volgt uitziet:
Sqlcmd: Fout: Microsoft SQL Native Client: time-out voor aanmelding is verlopen.
Notitie
Deze symptomen zijn meestal onregelmatig of gerelateerd aan failover van de resource van de beschikbaarheidsgroep.
In de volgende schermopname ziet u een voorbeeld van wat er gebeurt wanneer u probeert de listener te pingen voor de beschikbaarheid van aglisten
. In de schermopname ziet u ook een geslaagde verbinding met SQL Server met behulp van de SQLCMD
opdracht wanneer u de failoverparameter -M
voor meerdere subnetten opneemt.
Notitie
U kunt de SQLCMD
opdracht samen met de -M
parameter gebruiken, zoals wordt 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 geen ondersteuning biedt voor de nieuwe MultiSubnetFailover
parameter 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 .NET Framework 4 en met latere versies van .NET Framework en wordt weer overgezet naar .NET Framework 3.5.
Notitie
De PING
opdracht is een eenvoudig hulpprogramma voor het testen van connectiviteit dat de nieuwe parameter niet ondersteunt.
Oplossing
U kunt een van de volgende oplossingen gebruiken die van toepassing zijn op uw aanvraag:
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 waar.U kunt deze situatie 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
Notitie
Nadat u de RegisterAllProvidersIP
waarde hebt ingesteld op 0, moet het huidige online IP-adres niet zijn geregistreerd bij de DNS-server en moet het offline-IP-adres worden geregistreerd bij de DNS-server wanneer er een failover plaatsvindt. Dit kan een verbindingsvertraging veroorzaken 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 er 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 in twee subnetten bestaan, 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 Windows-clusterclienttoegangspuntresource. Een van de eigenschappen is RegisterAllProvidersIP
. Wanneer een listener wordt gemaakt, is dit ingesteld op 1 en worden alle IP-adressen van de listener geregistreerd in de DNS-server. Deze configuratie biedt een beperkte herverbindingstijd voor 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 MultiSubnetFailover
de parameter kan het clientstuurprogramma verbindingen parallel met alle IP-adressen van de listener proberen. Zonder de MultiSubnetFailover
parameter probeert het clientstuurprogramma opeenvolgend verbinding te maken met alle IP-adressen voor de listener. Sequentiële verbindingen kunnen lange aanmeldingstijd of aanmeldingstime-outs veroorzaken.
Notitie
Het probleem dat in dit artikel wordt genoemd, is ook van invloed op SharePoint-omgevingen die zijn geconfigureerd voor het gebruik van de secundaire replica met het kenmerk Alleen-lezen van een AlwaysOn-beschikbaarheidsgroep. U kunt dit probleem oplossen door 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 Windows PowerShell-opdracht 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
SqlClient-ondersteuning voor hoge beschikbaarheid, herstel na noodgevallen
Een listener voor beschikbaarheidsgroepen maken of configureren (SQL Server)
Connection Timeouts in Multi-subnet Availability Group (Verbindingstime-outs in een beschikbaarheidsgroep met meerdere subnetten)