Delen via


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 SQLCMDvan, 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 -Mvoor meerdere subnetten opneemt.

Schermopname van het opdrachtpromptvenster wanneer u de listener pingt voor de beschikbaarheid vanglisten.

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 de MultiSubNetFailover 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 van RegisterAllProvidersIP 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
    

    Schermopname van de uitvoer van een voorbeeld van de opdracht in Windows PowerShell.

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:

Verwijzingen